Skip to content

Amazon Athena에서 CTAS 쿼리를 실행할 때 파일 수 또는 크기를 조정하려면 어떻게 해야 합니까?

5분 분량
0

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

환경 생성

다음 단계를 완료하십시오.

  1. 테이블을 생성하려면 다음 명령을 실행합니다.

    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/'
  2. 테이블을 테스트하려면 다음 명령을 실행합니다.

    SELECT * FROM historic_climate_gz LIMIT 10

    출력은 데이터세트의 10개 라인을 보여줍니다.

환경을 생성한 후 CTAS 쿼리를 실행할 때 다음 방법을 사용하여 데이터세트를 수정합니다.

데이터세트의 파일 수 수정

카디널리티가 높고 값이 균등하게 분산된 열을 기준으로 데이터를 버킷화하는 것이 가장 좋습니다. 자세한 내용은 버킷 작업 이점을 참조하십시오.

다음 단계를 완료하십시오.

  1. 데이터세트를 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 필드를 사용합니다.

  2. 버킷에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 ls 명령을 실행합니다.

    aws s3 ls s3://awsexamplebucket/historic_climate_gz_20_files/ --summarize --recursive --human-readable

    출력 예시:

    Total Objects: 20
    Total Size: 15.6 Gib

각 파일의 대략적인 크기 설정

다음 단계를 완료하십시오.

  1. 원하는 파일 수를 얻기 위해 사용해야 하는 버킷 수를 결정합니다. 예를 들어, 15.4GB 데이터세트를 2GB 파일로 분할하려면 파일 8개(15.4 / 2 = 7.7, 8로 반올림)가 있어야 합니다.

  2. 버킷으로 구성된 새 테이블을 생성하려면 다음 명령을 실행합니다.

    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
  3. 데이터세트에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 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

데이터 형식 변환 및 대략적인 파일 크기 설정

다음 단계를 완료하십시오.

  1. 데이터를 다른 형식으로 변환하려면 다음 명령을 실행합니다.

    CREATE TABLE "historic_climate_parquet" WITH (
          external_location = 's3://awsexamplebucket/historic_climate_parquet/',
          format = 'PARQUET') AS
    SELECT * FROM historic_climate_gz
  2. 데이터세트 크기를 확인하려면 다음 ls 명령을 실행합니다.

    aws s3 ls s3://awsexamplebucket/historic_climate_parquet/ --summarize --recursive --human-readable

    출력 예시:

    Total Objects: 30
    Total Size: 9.8 GiB
  3. 원하는 파일 수를 얻기 위해 사용해야 하는 버킷 수를 결정합니다. 예를 들어, 500MB 파일과 9.8GB의 데이터세트인 경우 파일 20개가 있어야 합니다.

  4. 데이터세트를 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
  5. 데이터세트에 원하는 수의 파일이 포함되어 있는지 확인하려면 다음 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 문을 지원하지 않습니다.

관련 정보

CTAS 쿼리의 예

CTAS 쿼리에 대한 고려 사항 및 제한

AWS 공식업데이트됨 2달 전