Amazon Athena에서 CTAS 쿼리를 실행할 때 파일 수 또는 크기를 조정하려면 어떻게 해야 합니까?
Amazon Athena에서 CREATE TABLE AS SELECT(CTAS) 쿼리를 실행할 때 파일 수 또는 각 파일의 데이터 양을 정의하고 싶습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
CTAS 쿼리에서 버킷 작업을 사용하여 출력 파일 수를 제어할 수 있습니다. 그러나 생성되는 파일 수가 지정된 버킷 수와 항상 일치하지는 않을 수 있습니다. 버킷 작업 기능은 유사한 데이터를 함께 그룹화할 수 있지만 파일 수를 정확하게 제어할 수는 없습니다.
다음 해결 방법은 Global Historical Climatology Network Daily 퍼블릭 데이터세트인 **s3://noaa-ghcn-pds/csv.gz/**를 사용합니다. 자세한 내용은 Amazon Athena 및 Amazon QuickSight를 사용하여 200년 이상의 전 세계 기후 데이터 시각화를 참조하십시오.
참고: 다음 예제 명령에서 다음 값을 원하는 값으로 바꾸십시오.
external_location: CTAS 쿼리를 저장한 Amazon Simple Storage Service(Amazon S3) 위치입니다.
format: 출력에 사용할 형식(예: ORC, PARQUET, AVRO, JSON 또는 TEXTFILE)입니다.
bucket_count: 원하는 버킷 수입니다.
bucketed_by: 데이터를 해시하여 버킷에 저장할 필드입니다(예: yearmonthday).
데이터세트 검사
파일 수와 데이터세트 크기를 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls s3://noaa-ghcn-pds/csv.gz/ --summarize --recursive --human-readable
참고: **s3://noaa-ghcn-pds/csv.gz/**를 s3 버킷 경로로 바꾸십시오.
출력 예시:
2019-11-30 01:58:05 3.3 KiB csv.gz/1763.csv.gz 2019-11-30 01:58:06 3.2 KiB csv.gz/1764.csv.gz 2019-11-30 01:58:06 3.3 KiB csv.gz/1765.csv.gz 2019-11-30 01:58:07 3.3 KiB csv.gz/1766.csv.gz ... 2019-11-30 02:05:43 199.7 MiB csv.gz/2016.csv.gz 2019-11-30 02:05:50 197.7 MiB csv.gz/2017.csv.gz 2019-11-30 02:05:54 197.0 MiB csv.gz/2018.csv.gz 2019-11-30 02:05:57 168.8 MiB csv.gz/2019.csv.gz Total Objects: 257 Total Size: 15.4 GiB
환경 생성
다음 단계를 완료하십시오.
-
테이블을 생성하려면 다음 명령을 실행합니다.
CREATE EXTERNAL TABLE historic_climate_gz( id string, yearmonthday int, element string, temperature int, m_flag string, q_flag string, s_flag string, obs_time int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://noaa-ghcn-pds/csv.gz/'
-
테이블을 테스트하려면 다음 명령을 실행합니다.
SELECT * FROM historic_climate_gz LIMIT 10
출력은 데이터세트의 10개 라인을 보여줍니다.
환경을 생성한 후 CTAS 쿼리를 실행할 때 다음 방법을 사용하여 데이터세트를 수정합니다.
데이터세트의 파일 수 수정
카디널리티가 높고 값이 균등하게 분산된 열을 기준으로 데이터를 버킷화하는 것이 가장 좋습니다. 자세한 내용은 버킷 작업 이점을 참조하십시오.
다음 단계를 완료하십시오.
-
데이터세트를 20개 파일로 변환하려면 다음 명령을 실행합니다.
CREATE TABLE "historic_climate_gz_20_files" WITH ( external_location = 's3://awsexamplebucket/historic_climate_gz_20_files/', format = 'TEXTFILE', bucket_count=20, bucketed_by = ARRAY['yearmonthday'] ) AS SELECT * FROM historic_climate_gz
참고: 위 예시에서는 yearmonthday 필드를 사용합니다.
-
버킷에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls s3://awsexamplebucket/historic_climate_gz_20_files/ --summarize --recursive --human-readable
출력 예시:
Total Objects: 20 Total Size: 15.6 Gib
각 파일의 대략적인 크기 설정
다음 단계를 완료하십시오.
-
원하는 파일 수를 얻기 위해 사용해야 하는 버킷 수를 결정합니다. 예를 들어, 15.4GB 데이터세트를 2GB 파일로 분할하려면 파일 8개(15.4 / 2 = 7.7, 8로 반올림)가 있어야 합니다.
-
버킷으로 구성된 새 테이블을 생성하려면 다음 명령을 실행합니다.
CREATE TABLE "historic_climate_gz_2GB_files" WITH ( external_location = 's3://awsexamplebucket/historic_climate_gz_2GB_file/', format = 'TEXTFILE', bucket_count=8, bucketed_by = ARRAY['yearmonthday']) AS SELECT * FROM historic_climate_gz
-
데이터세트에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls s3://awsexamplebucket/historic_climate_gz_2GB_file/ --summarize --recursive --human-readable
출력 예시:
2019-09-03 10:59:20 1.7 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00000.gz 2019-09-03 10:59:20 2.0 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00001.gz 2019-09-03 10:59:20 2.0 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00002.gz 2019-09-03 10:59:19 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00003.gz 2019-09-03 10:59:17 1.7 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00004.gz 2019-09-03 10:59:21 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00005.gz 2019-09-03 10:59:18 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00006.gz 2019-09-03 10:59:17 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00007.gz Total Objects: 8 Total Size: 15.0 GiB
데이터 형식 변환 및 대략적인 파일 크기 설정
다음 단계를 완료하십시오.
-
데이터를 다른 형식으로 변환하려면 다음 명령을 실행합니다.
CREATE TABLE "historic_climate_parquet" WITH ( external_location = 's3://awsexamplebucket/historic_climate_parquet/', format = 'PARQUET') AS SELECT * FROM historic_climate_gz
-
데이터세트 크기를 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls s3://awsexamplebucket/historic_climate_parquet/ --summarize --recursive --human-readable
출력 예시:
Total Objects: 30 Total Size: 9.8 GiB
-
원하는 파일 수를 얻기 위해 사용해야 하는 버킷 수를 결정합니다. 예를 들어, 500MB 파일과 9.8GB의 데이터세트인 경우 파일 20개가 있어야 합니다.
-
데이터세트를 500MB 파일로 변환하려면 다음 명령을 실행합니다.
CREATE TABLE "historic_climate_parquet_500mb" WITH ( external_location = 's3://awsexamplebucket/historic_climate_parquet_500mb/', format = 'PARQUET', bucket_count=20, bucketed_by = ARRAY['yearmonthday'] ) AS SELECT * FROM historic_climate_parquet
-
데이터세트에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls s3://awsexamplebucket/historic_climate_parquet_500mb/ --summarize --recursive --human-readable
출력 예시:
2019-09-03 12:01:45 333.9 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00000 2019-09-03 12:01:01 666.7 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00001 2019-09-03 12:01:00 665.6 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00002 2019-09-03 12:01:06 666.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00003 2019-09-03 12:00:59 667.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00004 2019-09-03 12:01:27 666.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00005 2019-09-03 12:01:10 666.5 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00006 2019-09-03 12:01:12 668.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00007 2019-09-03 12:01:03 666.8 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00008 2019-09-03 12:01:10 646.4 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00009 2019-09-03 12:01:35 639.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00010 2019-09-03 12:00:52 529.5 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00011 2019-09-03 12:01:29 334.2 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00012 2019-09-03 12:01:32 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00013 2019-09-03 12:01:34 332.2 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00014 2019-09-03 12:01:44 333.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00015 2019-09-03 12:01:51 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00016 2019-09-03 12:01:39 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00017 2019-09-03 12:01:47 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00018 2019-09-03 12:01:49 332.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00019 Total Objects: 20 Total Size: 9.9 GiB
참고: 버킷으로 구성된 테이블은 INSERT INTO 문을 지원하지 않습니다.