將 Amazon S3 庫存報告中的空白版本 ID 字串轉換為空字串 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Amazon S3 庫存報告中的空白版本 ID 字串轉換為空字串

注意

下列處理程序僅適用於包含所有版本的 Amazon S3 庫存報告,且僅當「所有版本」報告用作已啟用 S3 版本控制之儲存貯體上 S3 批次操作的資訊清單時。您不需要為僅指定最新版本的 S3 庫存報告轉換字串。

您可以使用 S3 庫存報告作為 S3 批次操作的資訊清單。不過,在儲存貯體上啟用 S3 版本控制時,包含所有版本的 S3 庫存報告會在版本 ID 欄位中以空字串標示任何未進行版本控制的物件。當清查報告包含所有物件版本 IDs 時,批次操作會將null字串識別為版本 IDs,但不能將字串視為空白字串。

當 S3 批次操作任務使用「所有版本」S3 庫存報告作為資訊清單時,在版本 ID 欄位中具有空字串之物件上的所有任務都會失敗。若要將 S3 庫存報告的版本 ID 欄位中的空字串轉換為批次操作的 null 字串,請使用以下處理程序。

更新 Amazon S3 庫存報告以搭配批次操作使用
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. 導覽至您的 S3 庫存報告。庫存報告位於您在設定庫存報告時所指定的目的地儲存貯體。如需有關尋找庫存報告的詳細資訊,請參閱 尋找您的清查清單

    1. 選擇目的地儲存貯體。

    2. 選擇 資料夾。以原始來源儲存貯體命名資料夾。

    3. 選擇以庫存組態命名的資料夾。

    4. 選取名為 hive 資料夾旁邊的核取方塊。在頁面頂端,選擇複製 S3 URI 以複製資料夾的 S3 URI。

  3. 在 Word 開啟 Amazon Athena 主控台。 https://console.aws.amazon.com/athena/

  4. 在查詢編輯器中,選擇 Settings (設定),然後選擇 Manage (管理)。在 Manage settings (管理設定) 頁面,對於 Location of query result (查詢結果的位置),請選擇 S3 儲存貯體來存放查詢結果。

  5. 在查詢編輯器中,建立 Athena 資料表,以使用下列命令保留庫存報告中的資料。table_name 將 取代為您選擇的名稱,並在 LOCATION子句中插入您先前複製的 S3 URI。然後選擇 Run (執行) 來執行查詢。

    CREATE EXTERNAL TABLE table_name(bucket string, key string, version_id string) PARTITIONED BY (dt string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 'Copied S3 URI';
  6. 若要清除查詢編輯器,請選擇 Clear (清除)。之後,使用下列命令將庫存報告載入資料表。使用您在上一個步驟中選擇的項目取代 table_name。然後選擇 Run (執行) 來執行查詢。

    MSCK REPAIR TABLE table_name;
  7. 若要清除查詢編輯器,請選擇 Clear (清除)。執行下列SELECT查詢以擷取原始庫存報告中的所有項目,並以null字串取代任何空的 IDs 版本。使用您之前選擇的項目取代 table_name,並使用您想要此工具在庫存報告上執行的日期取代 WHERE 子句中的 YYYY-MM-DD-HH-MM。然後選擇 Run (執行) 來執行查詢。

    SELECT bucket as Bucket, key as Key, CASE WHEN version_id = '' THEN 'null' ELSE version_id END as VersionId FROM table_name WHERE dt = 'YYYY-MM-DD-HH-MM';
  8. 返回 Amazon S3 主控台 (https://console.aws.amazon.com/s3/),然後導覽至您先前為查詢結果位置選擇的 S3 儲存貯體。其中應該有一系列以日期結尾的資料夾。

    例如,您應該會看到類似 s3://amzn-s3-demo-bucket/query-result-location/未儲存/2021/10/07/。您應該會看到包含您所執行之 SELECT 查詢結果的 .csv 檔案。

    選擇具有最新修改日期的 CSV 檔案。將此檔案下載到您的本機電腦,以進行下一個步驟。

  9. 產生的 CSV 檔案包含標頭列。若要使用此 CSV 檔案作為 S3 批次操作任務的輸入,您必須移除標頭列,因為批次操作不支援 CSV 資訊清單上的標頭列。

    若要移除標頭列,您可以對檔案執行下列其中一個命令。Replace (取代) file.csv 您的 CSV 檔案名稱。

    對於 macOS 和 Linux 電腦,請在終端機視窗中執行 tail 命令。

    tail -n +2 file.csv > tmp.csv && mv tmp.csv file.csv

    對於 Windows 機器,請在 Windows PowerShell 視窗中執行下列指令碼。將 File-location 替換為您的檔案路徑,並將 file.csv 替換為檔案名稱。

    $ins = New-Object System.IO.StreamReader File-location\file.csv $outs = New-Object System.IO.StreamWriter File-location\temp.csv try { $skip = 0 while ( !$ins.EndOfStream ) { $line = $ins.ReadLine(); if ( $skip -ne 0 ) { $outs.WriteLine($line); } else { $skip = 1 } } } finally { $outs.Close(); $ins.Close(); } Move-Item File-location\temp.csv File-location\file.csv -Force
  10. 從 CSV 檔案中移除標頭列後,您就可以在 S3 批次操作任務中將其用作資訊清單。將 CSV 檔案上傳到您選擇的 S3 儲存貯體或位置,然後使用 CSV 檔案作為清單建立批次操作任務。

    如需有關建立 S3 批次操作任務的詳細資訊,請參閱 建立 S3 批次操作任務