Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
在 Amazon Athena 中執行 CTAS 查詢時,如何調整檔案的數量或大小?
當我在 Amazon Athena 中執行 CREATE TABLE AS SELECT (CTAS) 查詢時,我想要定義檔案的數量或每個檔案的資料量。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您可以在 CTAS 查詢中使用分割儲存貯體來控制輸出檔案的數量。但是,建立的檔案數量可能不一定與指定的儲存貯體數量相符。分割儲存貯體功能可以將相似的資料分組在一起,但無法精確控制檔案數量。
以下解決方案使用全球歷史氣候網路每日公共資料集 s3://noaa-ghcn-pds/csv.gz/。如需詳細資訊,請參閱使用 Amazon Athena 和 Amazon Quick Sight 視覺化 200 多年的全球氣候資料。
**注意:**在以下範例命令中,將以下值替換為您的值:
**external_location:**您儲存 CTAS 查詢的 Amazon Simple Storage Service (Amazon S3) 位置。
**格式:**您想要的輸出格式,例如 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.4 GB 的資料集拆分為 2 GB 的檔案,則必須有 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 -
確定必須使用多少個儲存貯體才能達到所需的檔案數量。例如,對於 500 MB 的檔案和 9.8 GB 的資料集,您必須有 20 個檔案。
-
若要將資料集轉換為 500 MB 檔案,請執行以下命令:
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 陳述式。
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 3 年前
- 已提問 3 年前
- 已提問 2 年前