本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CREATE TABLE AS
建立新的資料表並填入 SELECT 查詢的結果。若要建立空白資料表,請使用CREATE TABLE。 CREATE TABLE AS
將CREATE TABLE
DDL陳述式與陳述SELECT
DML式結合在一起,因此技術上包含DDL和DML。請注意,雖然CREATE TABLE
AS
在此處與其他DDL陳述式一起分組,但是 Athena 中的CTAS查詢仍會視DML為「Service Quotas」目的。如需有關 Athena 中的 Service Quotas 的相關資訊,請參閱 Service Quotas。
注意
對於CTAS陳述式,預期的儲存貯體擁有者設定不適用於 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 ]
其中:
注意
若要在查詢結果輸出中包含欄標題,您可以使用簡單的SELECT
查詢來取代CTAS查詢。您可以從查詢結果位置擷取結果,或直接使用 Athena 主控台下載結果。如需詳細資訊,請參閱使用查詢結果和最近的查詢。
CTAS表格性質
Athena 中的每個CTAS表格都有一份您使用指定的選擇性CTAS資料表屬性清單WITH (property_name = expression [, ...] )
。如需這些參數的用法詳細資訊,請參閱 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://amzn-s3-demo-bucket/tables/parquet_table/')
Athena 不會對查詢結果使用相同的路徑兩次。如果您手動指定位置,請確定您指定的 Amazon S3 位置沒有資料。Athena 絕不會嘗試刪除您的資料。如果您想再次使用相同的位置,請手動刪除資料,否則您的CTAS查詢將會失敗。
如果您執行的CTAS查詢指定在工作群組
external_location
中強制執行查詢結果位置的查詢,則查詢會失敗,並顯示錯誤訊息。若要查看為工作群組指定的查詢結果位置,請檢視工作群組的詳細資訊。如果您的工作群組覆寫查詢結果位置的用戶端設定,則 Athena 會在以下位置建立資料表:
s3://amzn-s3-demo-bucket/tables/
query-id
/如果您未使用
external_location
屬性來指定位置,且您的工作群組未覆寫用戶端設定,則 Athena 會使用查詢結果位置的用戶端設定,在下列位置建立資料表:s3://amzn-s3-demo-bucket/
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://amzn-s3-demo-bucket/tables/
iceberg_table
/') -
field_delimiter = [delimiter]
-
選用,專門用於文字型資料儲存格式。CSV、TSV和文本文件中文件的單字符字段分隔符。例如:
WITH (field_delimiter = ',')
。查CTAS詢目前不支援多字元欄位分隔符號。如果不指定欄位分隔符號,預設會使用\001
。 -
format = [storage_format]
-
CTAS查詢結果的儲存格式
ORC
,例如PARQUET
AVRO
、JSON
、ION
、或TEXTFILE
。對於 Iceberg 資料表,允許的格式為ORC
、PARQUET
和AVRO
。若省略,預設會使用PARQUET
。此參數的名稱必須以小寫格式列出,否則您的CTAS查詢將會失敗。format
範例:
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://amzn-s3-demo-bucket/tables/parquet_table/' ) AS SELECT * FROMtable_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 資料表。如需詳細資訊,請參閱優化冰山表。範例:
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 資料表。如需詳細資訊,請參閱優化冰山表。範例:
WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
-
optimize_rewrite_data_file_threshold = [int]
-
選用。資料最佳化的專用組態。如果需要最佳化的資料檔案少於指定的閾值,則不會重寫這些檔案。這允許累積更多的資料檔案,從而產生更接近目標大小的檔案,並略過不必要的運算以節省成本。預設值為 5。此屬性僅適用於 Iceberg 資料表。如需詳細資訊,請參閱優化冰山表。
範例:
WITH (optimize_rewrite_data_file_threshold = 5)
-
optimize_rewrite_delete_file_threshold = [int]
-
選用。資料最佳化的專用組態。如果與資料檔案關聯的刪除檔案少於閾值,則不會重寫資料檔案。這允許為每個資料檔案累積更多的刪除檔案,從而節省成本。預設為 2。此屬性僅適用於 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
值將指定資料寫入資料表時要使用的壓縮。您可以為TEXTFILE
、JSON
、PARQUET
,以及ORC
檔案格式指定壓縮。例如,如果
format
屬性指定PARQUET
作為儲存格式,則write_compression
的值會指定 Parquet 的壓縮格式。在這種情況下,指定write_compression
的值相當於為parquet_compression
指定值。同樣地,如果
format
內容指定ORC
為儲存格式,則的值會write_compression
指定的壓縮格式ORC。在這種情況下,指定write_compression
的值相當於為orc_compression
指定值。無法在相同CTAS查詢中指定多個壓縮格式資料表屬性。例如,您無法在相同查詢中同時指定
write_compression
和parquet_compression
。同樣適用於write_compression
和orc_compression
。如需每種檔案格式支援之壓縮類型的詳細資訊,請參閱在 Athena 使用壓縮。 -
orc_compression = [compression_format]
-
將
ORC
資料寫入資料表時用於ORC
檔案格式的壓縮類型。例如:WITH (orc_compression = 'ZLIB')
。ORC
檔案中的區塊 (ORC
Postscript 除外) 使用您指定的壓縮進行壓縮。如果省略,則依預設會使用ZLIB壓縮ORC
。注意
為取得一致,我們建議您使用
write_compression
屬性,而不是orc_compression
。使用format
屬性將儲存格式指定為ORC
,然後使用write_compression
屬性指定ORC
將使用的壓縮格式。 -
parquet_compression = [compression_format]
-
將 Parquet 資料寫入資料表時,用於 Parquet 檔案格式的壓縮類型。例如:
WITH (parquet_compression = 'SNAPPY')
。此壓縮會套用至 Prquet 檔案中的資料欄區塊。如果省略,則默認情況下使用GZIP壓縮實木複合地板。注意
為取得一致,我們建議您使用
write_compression
屬性,而不是parquet_compression
。使用format
屬性將儲存格式指定為PARQUET
,然後使用write_compression
屬性指定PARQUET
將使用的壓縮格式。 -
compression_level = [compression_level]
-
要使用的壓縮級別。此屬性僅適用於ZSTD壓縮。可能的值為 1 到 22。預設值為 3。如需詳細資訊,請參閱使用ZSTD壓縮層級。
-
範例
如需CTAS查詢範例,請參閱下列資源。