AWS

[aws cli] S3 Select

비번변경 2023. 1. 17. 17:38

개요

2022.11.07 - [AWS] S3 Select - 객체 내 데이터 쿼리에서 정리한 S3 Select 기능을 aws cli를 통해 이용하는 방법을 정리한다.

 

 

select-object-content

cli로 S3 Select를 이용할 때는 데이터를 조회할 파일(bucket, key), 데이터를 조회할 쿼리(expression, expression-type), 그리고 입력으로 받을 데이터 형식과 결과로 낼 데이터 형식을 지정해야 한다.

aws s3api select-object-content \
    --bucket <BUCKET_NAME> \
    --key <OBJ_KET> \
    --expression <QUERY>
    --expression-type SQL \
    --input-serialization <VALUE> \
    --output-serialization <VALUE> \
    <OUTPUT_FILE_PATH>

 

입력 설정(input-serialization)

사진의 설정값을 JSON 형식으로 지정해야 한다. 파일 형식에 따라 유효한 설정값은 아래와 같다.

{
  "CSV": {
    "FileHeaderInfo": "USE"|"IGNORE"|"NONE",
    "Comments": "string",
    "QuoteEscapeCharacter": "string",
    "RecordDelimiter": "string",
    "FieldDelimiter": "string",
    "QuoteCharacter": "string",
    "AllowQuotedRecordDelimiter": true|false
  },
  "CompressionType": "NONE"|"GZIP"|"BZIP2",
  "JSON": {
    "Type": "DOCUMENT"|"LINES"
  },
  "Parquet": {
  }
}

 

출력 설정(output-serialization)

출력 방식을 JSON 형식으로 지정해야 한다.

{
  "CSV": {
    "QuoteFields": "ALWAYS"|"ASNEEDED",
    "QuoteEscapeCharacter": "string",
    "RecordDelimiter": "string",
    "FieldDelimiter": "string",
    "QuoteCharacter": "string"
  },
  "JSON": {
    "RecordDelimiter": "string"
  }
}

 

 

예시

parquet 파일 데이터 조회하여 CSV로 출력

aws s3api select-object-content \
    --bucket test_bucket \
    --key database/test/part-00000-000000.parquet \
    --expression 'select count(*) from s3object' \
    --expression-type SQL \
    --input-serialization '{"Parquet": {}}' \
    --output-serialization '{"CSV": {}}' "output.csv"

 

gzip으로 압축한 JSON 파일 조회

각 행에 JSON 형식 데이터가 저장되어 있을 때는 Type을 LINES로 지정한다.

aws s3api select-object-content \
    --bucket test_bucket \
    --key database/test/part-00000-000000.json \
    --expression 'select count(*) from s3object' \
    --expression-type SQL \
    --input-serialization '{"JSON": {"Type": "LINES"}}' \
    --output-serialization '{"CSV": {}}' "output.csv"

 

 

 

참고 문서

https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html