CTAS查詢範例 - Amazon Athena

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

CTAS查詢範例

使用下列範例建立CTAS查詢。如需有關CTAS語法的資訊,請參閱CREATE TABLE AS

在本節中:

範例:選取所有資料欄以複製資料表

以下範例會透過複製資料表的所有資料欄來建立資料表:

CREATE TABLE new_table AS SELECT * FROM old_table;

在相同範例的以下變化中,您的 SELECT 陳述式也包含 WHERE 子句。在這種情況下,查詢只會從資料表中選取滿足 WHERE 子句的那些資料列:

CREATE TABLE new_table AS SELECT * FROM old_table WHERE condition;
範例:從一或多個資料表選取特定資料欄

以下範例會建立對來自另一個資料表的一組資料欄執行的新查詢:

CREATE TABLE new_table AS SELECT column_1, column_2, ... column_n FROM old_table;

相同範例的這個變化會來自多個資料表的特定資料欄建立新的資料表:

CREATE TABLE new_table AS SELECT column_1, column_2, ... column_n FROM old_table_1, old_table_2, ... old_table_n;
範例:建立現有資料表的空白副本

以下範例使用 WITH NO DATA 來建立空白且與原始資料表具有相同結構描述的新資料表:

CREATE TABLE new_table AS SELECT * FROM old_table WITH NO DATA;
範例:指定資料儲存和壓縮格式

透過CTAS,您可以使用一種儲存格式的來源資料表,以不同的儲存格式建立另一個資料表。

使用 format 屬性來指定 ORCPARQUETAVROJSONTEXTFILE 作為新資料表的儲存格式。

對於 PARQUETORCTEXTFILE,和 JSON 儲存格式,請使用 write_compression 屬性指定新資料表資料的壓縮格式。如需每個檔案格式支援之壓縮格式的詳細資訊,請參閱在 Athena 使用壓縮

下列範例指定資料表 new_table 中的資料以 Parquet 格式儲存並使用 Snappy 壓縮。Parquet 的預設壓縮為 GZIP

CREATE TABLE new_table WITH ( format = 'Parquet', write_compression = 'SNAPPY') AS SELECT * FROM old_table;

下列範例new_table會指定使用 Snappy 壓縮以ORC格式儲存資料表中的資料。的預設壓縮ORC為ZLIB。

CREATE TABLE new_table WITH (format = 'ORC', write_compression = 'SNAPPY') AS SELECT * FROM old_table ;

下列範例指定使用 Snappy 壓縮以文字檔案格式儲存資料表 new_table 中的資料。文字檔案和JSON格式的預設壓縮為。GZIP

CREATE TABLE new_table WITH (format = 'TEXTFILE', write_compression = 'SNAPPY') AS SELECT * FROM old_table ;
範例:將查詢結果寫入不同的格式

下列CTAS查詢會選取可以以CSV或其他格式存放的所有記錄,並建立一個以格式儲存到 Amazon S3 的基礎資料的ORC新資料表:old_table

CREATE TABLE my_orc_ctas_table WITH ( external_location = 's3://amzn-s3-demo-bucket/my_orc_stas_table/', format = 'ORC') AS SELECT * FROM old_table;
範例:建立未分割的資料表

以下範例會建立未分割的資料表。資料表資料會以不同格式存放。其中的一些範例會指定外部位置。

下列範例會建立將結果儲存為文字檔案的CTAS查詢:

CREATE TABLE ctas_csv_unpartitioned WITH ( format = 'TEXTFILE', external_location = 's3://amzn-s3-demo-bucket/ctas_csv_unpartitioned/') AS SELECT key1, name1, address1, comment1 FROM table1;

在下列範例中,結果會存放在 Parquet 中,並且會使用預設結果位置:

CREATE TABLE ctas_parquet_unpartitioned WITH (format = 'PARQUET') AS SELECT key1, name1, comment1 FROM table1;

在下面的查詢中,表被存儲在JSON,並從原始表的結果中選擇特定的列:

CREATE TABLE ctas_json_unpartitioned WITH ( format = 'JSON', external_location = 's3://amzn-s3-demo-bucket/ctas_json_unpartitioned/') AS SELECT key1, name1, address1, comment1 FROM table1;

在下列範例中,格式為ORC:

CREATE TABLE ctas_orc_unpartitioned WITH ( format = 'ORC') AS SELECT key1, name1, comment1 FROM table1;

在下列範例中,格式為 Avro:

CREATE TABLE ctas_avro_unpartitioned WITH ( format = 'AVRO', external_location = 's3://amzn-s3-demo-bucket/ctas_avro_unpartitioned/') AS SELECT key1, name1, comment1 FROM table1;
範例:建立分割的資料表

以下範例顯示採用不同儲存格式的分割資料表的 CREATE TABLE AS SELECT 查詢,使用 partitioned_by,以及 WITH 子句中的其他屬性。如需語法,請參閱CTAS表格性質。如需選擇用於分割的資料欄的詳細資訊,請參閱使用分割和分區設定

注意

SELECT 陳述式中資料欄清單結尾列出分割區資料欄。您可以依多於一個資料欄分割,且最多可以有 100 個唯一分割區和儲存貯體組合。例如,如果未指定儲存貯體,則可有 100 個分割區。

CREATE TABLE ctas_csv_partitioned WITH ( format = 'TEXTFILE', external_location = 's3://amzn-s3-demo-bucket/ctas_csv_partitioned/', partitioned_by = ARRAY['key1']) AS SELECT name1, address1, comment1, key1 FROM tables1;
CREATE TABLE ctas_json_partitioned WITH ( format = 'JSON', external_location = 's3://amzn-s3-demo-bucket/ctas_json_partitioned/', partitioned_by = ARRAY['key1']) AS select name1, address1, comment1, key1 FROM table1;
範例:建立歸納和分割的資料表

以下範例顯示一個 CREATE TABLE AS SELECT 查詢,同時使用歸納和分割來在 Simple Storage Service (Amazon S3) 中存放查詢結果。資料表結果會依不同的資料欄分割和歸納。Athena 支援最多 100 個唯一儲存貯體和分割區組合。例如,如果您建立包含 5 個儲存貯體的資料表,則支援 20 個分割區 (每個都有 5 個儲存貯體)。如需語法,請參閱CTAS表格性質

如需選擇用於歸納的資料欄的詳細資訊,請參閱使用分割和分區設定

CREATE TABLE ctas_avro_bucketed WITH ( format = 'AVRO', external_location = 's3://amzn-s3-demo-bucket/ctas_avro_bucketed/', partitioned_by = ARRAY['nationkey'], bucketed_by = ARRAY['mktsegment'], bucket_count = 3) AS SELECT key1, name1, address1, phone1, acctbal, mktsegment, comment1, nationkey FROM table1;
範例:建立一個包含 Parquet 資料的 Iceberg 資料表。

下列範例會建立包含 Parquet 資料檔案的 Iceberg 資料表。使用 table1 中的 dt 資料欄按月份分割檔案。此範例會更新資料表上的保留屬性,以便在資料表中的每個分支上保留 10 個快照。另外,還會保留過去 7 天內的快照。如需有關 Athena 中的 Iceberg 資料表屬性的詳細資訊,請參閱 指定資料表屬性

CREATE TABLE ctas_iceberg_parquet WITH (table_type = 'ICEBERG', format = 'PARQUET', location = 's3://amzn-s3-demo-bucket/ctas_iceberg_parquet/', is_external = false, partitioning = ARRAY['month(dt)'], vacuum_min_snapshots_to_keep = 10, vacuum_max_snapshot_age_seconds = 604800 ) AS SELECT key1, name1, dt FROM table1;
範例:建立一個包含 Avro 資料的 Iceberg 資料表。

下列範例會建立包含 Avro 資料檔案的 Iceberg 資料表,其中資料表會依 key1 進行分割。

CREATE TABLE ctas_iceberg_avro WITH ( format = 'AVRO', location = 's3://amzn-s3-demo-bucket/ctas_iceberg_avro/', is_external = false, table_type = 'ICEBERG', partitioning = ARRAY['key1']) AS SELECT key1, name1, date FROM table1;