

# Amazon S3 인벤토리 보고서의 빈 버전 ID 문자열을 null 문자열로 변환
<a name="inventory-configure-bops"></a>

**참고**  
**다음 절차는 모든 버전이 포함된 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/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. S3 인벤토리 보고서로 이동합니다. 인벤토리 보고서는 인벤토리 보고서를 구성하는 동안 지정한 대상 버킷에 있습니다. 인벤토리 보고서 찾기에 대한 자세한 내용은 [인벤토리 목록 찾기](storage-inventory-location.md) 섹션을 참조하세요.

   1. 대상 버킷을 선택합니다.

   1. 폴더를 선택합니다. 폴더 이름은 원래 원본 버킷의 이름을 따서 지정됩니다.

   1. 인벤토리 구성의 이름을 따서 명명된 폴더를 선택합니다.

   1. **hive**라는 폴더 옆의 확인란을 선택합니다. 페이지 상단에서 **S3 URI 복사(Copy S3 URI)**를 선택하여 폴더의 S3 URI를 복사합니다.

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)에서 Amazon Athena 콘솔을 엽니다.

1. 쿼리 편집기에서 **설정(Settings)**을 선택한 다음 **관리(Manage)**를 선택합니다. **설정 관리(Manage settings)** 페이지의 **쿼리 결과 위치(Location of query result)**에서 쿼리 결과를 저장할 S3 버킷을 선택합니다.

1. 쿼리 편집기에서 다음 명령을 사용하여 인벤토리 보고서의 데이터를 보관할 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';
   ```

1. 쿼리 편집기를 지우려면 **지우기(Clear)**를 선택합니다. 그리고 다음 명령을 사용하여 인벤토리 보고서를 테이블에 로드합니다. `table_name`을 이전 단계에서 선택한 이름으로 바꿉니다. 그런 다음 **실행(Run)**을 선택하여 쿼리를 실행합니다.

   ```
   MSCK REPAIR TABLE table_name;
   ```

1. 쿼리 편집기를 지우려면 **지우기(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';
   ```

1. Amazon S3 콘솔([https://console.aws.amazon.com/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 파일을 선택합니다. 다음 단계를 위해 이 파일을 로컬 시스템에 다운로드합니다.

1. 생성된 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
   ```

1. CSV 파일에서 헤더 행을 제거한 후에는 S3 배치 작업에서 이를 매니페스트로 사용할 수 있습니다. CSV 파일을 선택한 S3 버킷 또는 위치에 업로드한 다음 CSV 파일을 매니페스트로 사용하여 배치 작업을 생성합니다.

   배치 작업 생성에 대한 자세한 내용은 [S3 배치 작업 건 생성](batch-ops-create-job.md) 섹션을 참조하세요.