CREATE TABLE AS - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CREATE TABLE AS

建立新的資料表並填入 SELECT 查詢的結果。若要建立空白資料表,請使用 CREATE TABLECREATE TABLE AS 結合使用 CREATE TABLE DDL 陳述式與 SELECT DML 陳述式,因此技術上同時包含 DDL 和 DML。請注意,雖然 CREATE TABLE AS 在此處與其他 DDL 陳述式一起分組,但是針對 Service Quotas 而言,Athena 中的 CTAS 查詢仍會被視為 DML。如需有關 Athena 中的 Service Quotas 的相關資訊,請參閱 Service Quotas

注意

對於 CTAS 陳述式,預期的儲存貯體擁有者設定不適用於 Simple Storage Service (Amazon S3) 中的目的地資料表位置。預期的儲存貯體擁有者設定僅適用於您為 Athena 查詢結果指定的 Simple Storage Service (Amazon S3) 輸出位置。如需更多詳細資訊,請參閱 使用 Athena 主控台指定查詢結果位置

如需有關超出此參考主題範圍的 CREATE TABLE AS 的其他資訊,請參閱 從查詢結果建立資料表 (CTAS)

概要

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

其中:

WITH ( property_name = expression [, ...] )

CTAS 資料表選用屬性清單,其中一些是特定於資料儲存體格式。請參閱 CTAS 資料表屬性

query

用於建立新資料表的 SELECT 查詢。

重要

如果您打算以分割區建立查詢,在 SELECT 陳述式的欄清單最後指定分割區各欄的名稱。

[ WITH [ NO ] DATA ]

如果使用 WITH NO DATA,新的空資料表具有的結構描述會與建立的原始資料表相同。

注意

若要將資料欄標題包含在查詢結果輸出中,您可以使用簡單的 SELECT 查詢而不是 CTAS 查詢。您可以從查詢結果位置擷取結果,或直接使用 Athena 主控台下載結果。如需更多詳細資訊,請參閱 使用查詢結果、近期查詢和輸出檔案

CTAS 資料表屬性

Athena 中的每個 CTAS 資料表會有一個您使用 WITH (property_name = expression [, ...] ) 指定的 CTAS 資料表選用屬性清單。如需這些參數的用法詳細資訊,請參閱 CTAS 查詢的範例

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

選用。預設值為 HIVE。指定產生之資料表的資料表類型

範例:

WITH (table_type ='ICEBERG')
external_location = [location]
注意

由於 Iceberg 資料表並非外部資料表,因此此屬性不適用於 Iceberg 資料表。若要在 CTAS 陳述式中定義 Iceberg 資料表的根位置,請使用本節稍後所述的 location 屬性。

選用。Athena 在 Amazon S3 中儲存您的 CTAS 查詢的位置。

範例:

WITH (external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/')

Athena 不會對查詢結果使用相同的路徑兩次。如果您手動指定位置,請確定您指定的 Amazon S3 位置沒有資料。Athena 絕不會嘗試刪除您的資料。如果您想要再次使用相同的位置,請手動刪除資料,否則您的 CTAS 查詢將會失敗。

如果您執行一個在強制執行查詢結果位置的工作群組中指定 external_location 的 CTAS 查詢,則該查詢會失敗並顯示錯誤訊息。若要查看為工作群組指定的查詢結果位置,請檢視工作群組的詳細資訊

如果您的工作群組覆寫查詢結果位置的用戶端設定,則 Athena 會在以下位置建立資料表:

s3://workgroup-query-results-location/tables/query-id/

如果您未使用 external_location 屬性來指定位置,且您的工作群組未覆寫用戶端設定,則 Athena 會使用查詢結果位置的用戶端設定,在下列位置建立資料表:

s3://query-results-location-setting/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

選用。指出資料表是否為外部資料表。預設值為 true。對於 Iceberg 資料表,必須將其設定為 false。

範例:

WITH (is_external = false)
location = [location]

Iceberg 資料表的必要項目。指定要從查詢結果建立之 Iceberg 資料表的根位置。

範例:

WITH (location ='s3://DOC-EXAMPLE-BUCKET/tables/iceberg_table/')
field_delimiter = [delimiter]

選用,專門用於文字型資料儲存格式。CSV、TSV、文字檔案中檔案的單一字元欄位分隔符號。例如 WITH (field_delimiter = ',')。目前,CTAS 查詢不支援多字元欄位分隔符號。如果不指定欄位分隔符號,預設會使用 \001

format = [storage_format]

CTAS 查詢結果的儲存格式,例如 ORCPARQUETAVROJSONIONTEXTFILE。對於 Iceberg 資料表,允許的格式為 ORCPARQUETAVRO。若省略,預設會使用 PARQUET。此參數名稱 format 必須小寫,否則您的 CTAS 查詢將會失敗。

範例:

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
注意

此屬性不適用於 Iceberg 資料表。對於 Iceberg 資料表,請使用含儲存貯體轉換的分割。

將歸納資料的儲存貯體陣列清單。如果省略,Athena 不會歸納此查詢中的資料。

bucket_count = [int]
注意

此屬性不適用於 Iceberg 資料表。對於 Iceberg 資料表,請使用含儲存貯體轉換的分割。

歸納您資料的儲存貯體數目。如果省略,Athena 不會歸納您的資料。範例:

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
注意

此屬性不適用於 Iceberg 資料表。若要針對 Iceberg 資料表使用分割區轉換,請使用本節稍後所述的 partitioning 屬性。

選用。欄的陣列清單,CTAS 資料表將依此分割。請確定分割區各欄的名稱,是列 SELECT 陳述式中欄清單的最後一欄。

partitioning = ARRAY[partition_transform, ...]

選用。指定要建立之 Iceberg 資料表的分割區。Iceberg 支援多種分割區轉換和分割區演變。下表總結說明了分割區轉換。

轉換 描述
year(ts) 每年建立一個分割區。分割區值是介於 ts 和 1970 年 1 月 1 日間年份的整數差異。
month(ts) 每年每月建立一個分割區。分割區值是介於 ts 和 1970 年 1 月 1 日間月份的整數差異。
day(ts) 每年每天建立一個分割區。分割區值是介於 ts 和 1970 年 1 月 1 日間日期的整數差異。
hour(ts) 每天每小時建立一個分割區。分割區值是分鐘和秒數設定為零的時間戳記。
bucket(x, nbuckets) 將資料雜湊處理為指定儲存貯體數目。分割區值為 x 的整數雜湊值,其值介於 0 到 nbuckets - 1 (含) 之間。
truncate(s, nchars) 將分割區值設為 s 的前 nchars 個字元。

範例:

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

選用。資料最佳化的專用組態。包括小於指定值的檔案以進行最佳化。預設為 write_target_data_file_size_bytes 值的 0.75 倍。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 最佳化處理 Iceberg 資料表

範例:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

選用。資料最佳化的專用組態。包括大於指定值的檔案以進行最佳化。預設為 write_target_data_file_size_bytes 值的 1.8 倍。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 最佳化處理 Iceberg 資料表

範例:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

選用。資料最佳化的專用組態。如果需要最佳化的資料檔案少於指定的閾值,則不會重寫這些檔案。這允許累積更多的資料檔案,從而產生更接近目標大小的檔案,並略過不必要的運算以節省成本。預設值為 5。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 最佳化處理 Iceberg 資料表

範例:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

選用。資料最佳化的專用組態。如果與資料檔案關聯的刪除檔案少於閾值,則不會重寫資料檔案。這允許為每個資料檔案累積更多的刪除檔案,從而節省成本。預設為 2。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 最佳化處理 Iceberg 資料表

範例:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

選用。清空特定組態。要保留之最新快照的數目下限。預設為 1。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 VACUUM

注意

vacuum_min_snapshots_to_keep 屬性需要 Athena 引擎版本 3。

範例:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

選用。清空特定組態。以秒為單位的期間,代表要保留之快照的存留期。預設為 432,000 (5 天)。此屬性僅適用於 Iceberg 資料表。如需更多詳細資訊,請參閱 VACUUM

注意

vacuum_max_snapshot_age_seconds 屬性需要 Athena 引擎版本 3。

範例:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

用於任何允許指定壓縮的儲存格式的壓縮類型。compression_format 值將指定資料寫入資料表時要使用的壓縮。您可以為 TEXTFILEJSONPARQUET,以及 ORC 檔案格式指定壓縮。

例如,如果 format 屬性指定 PARQUET 作為儲存格式,則 write_compression 的值會指定 Parquet 的壓縮格式。在這種情況下,指定 write_compression 的值相當於為 parquet_compression 指定值。

同樣地,如果 format 屬性指定 ORC 作為儲存格式,則 write_compression 的值會指定 ORC 的壓縮格式。在這種情況下,指定 write_compression 的值相當於為 orc_compression 指定值。

無法在相同的 CTAS 查詢中指定多個壓縮格式資料表屬性。例如,您無法在相同查詢中同時指定 write_compressionparquet_compression。同樣適用於 write_compressionorc_compression。如需每種檔案格式支援之壓縮類型的詳細資訊,請參閱Athena 壓縮支援

orc_compression = [compression_format]

ORC 資料寫入資料表時用於 ORC 檔案格式的壓縮類型。例如 WITH (orc_compression = 'ZLIB')ORC 檔案中的區塊 (ORC Postscript 除外) 使用您指定的壓縮進行壓縮。若省略,ORC 預設使用 ZLIB 壓縮。

注意

為取得一致,我們建議您使用 write_compression 屬性,而不是 orc_compression。使用 format 屬性將儲存格式指定為 ORC,然後使用 write_compression 屬性指定 ORC 將使用的壓縮格式。

parquet_compression = [compression_format]

將 Parquet 資料寫入資料表時,用於 Parquet 檔案格式的壓縮類型。例如 WITH (parquet_compression = 'SNAPPY')。此壓縮會套用至 Prquet 檔案中的資料欄區塊。若省略,Parquet 預設使用 GZIP 壓縮。

注意

為取得一致,我們建議您使用 write_compression 屬性,而不是 parquet_compression。使用 format 屬性將儲存格式指定為 PARQUET,然後使用 write_compression 屬性指定 PARQUET 將使用的壓縮格式。

compression_level = [compression_level]

要使用的壓縮級別。此屬性僅適用於 ZSTD 壓縮。可能的值為 1 到 22。預設值為 3。如需更多詳細資訊,請參閱 在 Athena 中使用 ZSTD 壓縮級別

範例

如需 CTAS 查詢的範例,請參閱下列資源。