CTAS 查询的示例 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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 查询创建一个新表,其中包含来自源表的不同格式的 Parquet 数据。您可以通过类似方式指定 PARQUETORCAVROJSONTEXTFILE

此示例还指定采用 SNAPPY 压缩。如果省略,则使用 GZIP。GZIP 和 SNAPPY 是以 Parquet 和 ORC 格式存储的 CTAS 查询结果支持的压缩格式。

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

以下示例类似,但以 ORC 格式存储 CTAS 查询结果,并使用 orc_compression 参数指定压缩格式。如果您忽略压缩格式,默认情况下 Athena 使用 GZIP。

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

示例:将查询结果写入不同格式

以下 CTAS 查询从 old_table 中选择能够以 CSV 或其他格式存储的所有记录,并创建一个新表,其中包含以 ORC 格式保存到 Amazon S3 的基础数据:

CREATE TABLE my_orc_ctas_table WITH ( external_location = 's3://my_athena_results/my_orc_stas_table/', format = 'ORC') AS SELECT * FROM old_table;

示例:创建未分区的表

以下示例创建未分区的表。表数据以不同格式存储。其中一些示例指定了外部位置。

以下示例创建使用文本文件存储结果的 CTAS 查询:

CREATE TABLE ctas_csv_unpartitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/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://my_athena_results/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://my_athena_results/ctas_avro_unpartitioned/') AS SELECT key1, name1, comment1 FROM table1;

示例:创建分区表

以下示例显示了对不同存储格式的分区表的 CREATE TABLE AS SELECT 查询,在 WITH 子句中使用 partitioned_by 和其他属性。有关语法,请参阅 CTAS 表属性。有关为分区选择列的更多信息,请参阅分桶与分区

注意

SELECT 语句中列列表的结尾列出分区列。您可以按多个列进行分区,并拥有多达 100 个唯一的分区和存储桶组合。例如,如果未指定存储桶,则可以有 100 个分区。

CREATE TABLE ctas_csv_partitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/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://my_athena_results/ctas_json_partitioned/', partitioned_by = ARRAY['key1']) AS select name1, address1, comment1, key1 FROM table1;

示例:创建分桶表和分区表

以下示例显示同时使用分区和分桶在 Amazon S3 中存储查询结果的 CREATE TABLE AS SELECT 查询。表结果由不同的列进行分区和分桶。Athena 支持最多 100 个唯一的存储桶和分区组合。例如,如果您创建包含五个存储桶的表,则支持 20 个分区,每个分区包含五个存储桶。有关语法,请参阅 CTAS 表属性

有关为分桶选择列的信息,请参阅分桶与分区

CREATE TABLE ctas_avro_bucketed WITH ( format = 'AVRO', external_location = 's3://my_athena_results/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;