Amazon S3 인벤토리 보고서의 빈 버전 ID 문자열을 null 문자열로 변환 - Amazon Simple Storage Service

Amazon S3 인벤토리 보고서의 빈 버전 ID 문자열을 null 문자열로 변환

참고

다음 절차는 모든 버전이 포함된 Amazon S3 인벤토리 보고서에만 적용되며 "모든 버전" 보고서가 S3 버전 관리가 사용 설정된 버킷에서 S3 배치 작업의 매니페스트로 사용되는 경우에만 적용됩니다. 현재 버전만 지정하는 S3 인벤토리 보고서의 문자열을 변환할 필요가 없습니다.

S3 인벤토리 보고서를 S3 배치 작업의 매니페스트로 사용할 수 있습니다. 그러나 버킷에서 S3 버전 관리가 사용 설정된 경우 모든 버전을 포함하는 S3 인벤토리 보고서는 버전 ID 필드에 빈 문자열이 있는 모든 null 버전이 지정된 객체를 표시합니다. 인벤토리 보고서에 모든 객체 버전 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라는 폴더 옆의 확인란을 선택합니다. 페이지 상단에서 S3 URI 복사(Copy 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://amzn-s3-demo-bucket/query-result-location/Unsaved/2021/10/07/과 같은 항목이 표시되어야 합니다. 실행한 SELECT 쿼리의 결과가 포함된 .csv 파일이 표시되어야 합니다.

    가장 최근에 수정된 날짜의 CSV 파일을 선택합니다. 다음 단계를 위해 이 파일을 로컬 시스템에 다운로드합니다.

  9. 생성된 CSV 파일에는 헤더 행이 포함되어 있습니다. 배치 작업은 CSV 매니페스트의 헤더 행을 지원하지 않으므로 이 CSV 파일을 S3 배치 작업에 대한 입력으로 사용하려면 헤더 행을 제거해야 합니다.

    헤더 행을 제거하려면 파일에서 다음 명령 중 하나를 실행합니다. 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 배치 작업 건 생성 섹션을 참조하세요.