개요
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