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

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

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

注意

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

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

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

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

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

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

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

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

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

  3. 前往 https://console.aws.amazon.com/athena/ 開啟 Amazon 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 查詢來擷取原始庫存報告中的所有項目,並將任何空白的版本 ID 取代為 null 字串。使用您之前選擇的項目取代 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/),並導覽至您之前為 Location of query result (查詢結果位置) 選擇的 S3 儲存貯體。其中應該有一系列以日期結尾的資料夾。

    例如,您應該會看到類似 s3://DOC-EXAMPLE-BUCKET/query-result-location/Unsaved/2021/10/07/。您應該會看到包含您所執行之 SELECT 查詢結果的 .csv 檔案。

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

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

    若要移除標頭列,您可以對檔案執行下列其中一個命令。用您的 CSV 檔案名稱取代 file.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 批次操作任務