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;

例: 1 つ以上のテーブルから特定の列を選択する

次の例では、別のテーブルからの列のセットで実行される新しいクエリが作成されます。

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 データを含む新しいテーブルを作成します。同様の方法で、PARQUETORCAVROJSON、および TEXTFILE を指定できます。

この例では、圧縮に SNAPPY も指定します。省略すると、GZIP が使用されます。Parquet と ORC で保存されている CTAS クエリ結果に対して GZIP および SNAPPY の圧縮形式がサポートされています。

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;

例: パーティション化されたテーブルを作成する

次の例では、WITH 句で partitioned_by と他のプロパティを使用した、異なるストレージ形式のパーティション テーブルに対する CREATE TABLE AS SELECT クエリを示します。構文については、「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 個の一意のバケットとパーティションの組み合わせをサポートします。たとえば、5 個のバケットを持つテーブルを作成する場合、それぞれ 5 個のバケットを持つ 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;