CREATE TABLE AS - Amazon Athena

CREATE TABLE AS

Erstellt eine neue Tabelle mit den Ergebnissen einer SELECT-Abfrage. Um eine leere Tabelle zu erstellen, verwenden Sie CREATE TABLE. CREATE TABLE AS kombiniert eine CREATE TABLE-DDL-Anweisung mit einer SELECT-DML-Anweisung und enthält daher technisch gesehen sowohl DDL als auch DML. Beachten Sie, dass CTAS-Abfragen in Athena, obwohl CREATE TABLE AS hier mit anderen DDL-Anweisungen gruppiert ist, für Service Quotas als DML behandelt werden. Informationen zu Service Quotas für Athena finden Sie unter Service Quotas.

Anmerkung

Für CTAS-Anweisungen gilt die erwartete Bucket-Eigentümereinstellung nicht für den Speicherort der Zieltabelle in Amazon S3. Die erwartete Bucket-Eigentümereinstellung gilt nur für den Amazon-S3-Ausgabespeicherort, den Sie für Athena-Abfrageergebnisse angeben. Weitere Informationen finden Sie unter Angeben eines Speicherorts des Abfrageergebnisses mithilfe der Athena-Konsole.

Weitere Informationen zu CREATE TABLE AS, die über den Rahmen dieses Referenzthemas hinausgehen, finden Sie unter Erstellen einer Tabelle aus Abfrageergebnissen (CTAS).

Syntax

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

Wobei Folgendes gilt:

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

Eine Liste der optionalen CTAS-Tabelleneigenschaften, von denen einige für das Datenspeicherformat spezifisch sind. Siehe CTAS-Tabelleneigenschaften.

query

Eine SELECT-Abfrage, die verwendet wird, um eine neue Tabelle zu erstellen.

Wichtig

Wenn Sie eine Abfrage mit Partitionen erstellen möchten, geben Sie die Namen der partitionierten Spalten am Ende der Liste in der Liste der Spalten in der SELECT Anweisung an.

[ WITH [ NO ] DATA ]

Wenn WITH NO DATA verwendet wird, wird eine neue leere Tabelle mit demselben Schema wie die ursprüngliche Tabelle erstellt.

Anmerkung

Um Spaltenüberschriften in Ihre Abfrageergebnis-Ausgabe einzubeziehen, können Sie eine einfache SELECT-Abfrage statt einer CTAS-Abfrage verwenden. Sie können die Ergebnisse aus Ihrem Speicherort für Abfrageergebnisse abrufen oder die Ergebnisse direkt über die Athena-Konsole herunterladen. Weitere Informationen finden Sie unter Arbeiten mit Abfrageergebnissen und aktuellen Abfragen.

CTAS-Tabelleneigenschaften

Jede CTAS-Tabelle in Athena verfügt über eine Liste der optionalen CTAS-Tabelleneigenschaften, die Sie mit angeben WITH (property_name = expression [, ...] ). Informationen zur Verwendung dieser Parameter finden Sie unter Beispiele für CTAS-Abfragen.

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

Optional. Der Standardwert ist HIVE. Gibt den Tabellentyp der resultierenden Tabelle an

Beispiel:

WITH (table_type ='ICEBERG')
external_location = [location]
Anmerkung

Da Iceberg-Tabellen nicht extern sind, gilt diese Eigenschaft nicht für Iceberg-Tabellen. Um den Stammspeicherort einer Iceberg-Tabelle in einer CTAS-Anweisung zu definieren, verwenden Sie die später in diesem Abschnitt beschriebene location-Eigenschaft.

Optional. Der Speicherort, an dem Athena Ihre CTAS-Abfrage in Amazon S3 speichert.

Beispiel:

WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')

Athena verwendet nicht zweimal denselben Pfad für Abfrageergebnisse. Wenn Sie den Speicherort manuell angeben, müssen Sie sicherstellen, dass der von Ihnen angegebene Amazon-S3-Speicherort keine Daten enthält. Athena versucht nie, Ihre Daten zu löschen. Wenn Sie denselben Speicherort erneut verwenden möchten, müssen Sie die Daten manuell löschen. Andernfalls schlägt Ihre CTAS-Abfrage fehl.

Wenn Sie eine CTAS-Abfrage ausführen, die einen external_location in einer Arbeitsgruppe angibt, die einen Speicherort für Abfrageergebnisse erzwingt, schlägt die Abfrage mit einer Fehlermeldung fehl. Sie können den für die Arbeitsgruppe angegebenen Abfrageergebnisspeicherort in den Arbeitsgruppendetails anzeigen.

Wenn Ihre Arbeitsgruppe die clientseitige Einstellung für den Abfrageergebnisspeicherort überschreibt, erstellt Athena die Tabelle am folgenden Speicherort:

s3://amzn-s3-demo-bucket/tables/query-id/

Wenn Sie nicht die Eigenschaft external_location verwenden, um einen Speicherort anzugeben, und Ihre Arbeitsgruppe clientseitige Einstellungen nicht überschreibt, verwendet Athena Ihre clientseitige Einstellung für den Abfrageergebnisspeicherort, um die Tabelle am folgenden Speicherort zu erstellen:

s3://amzn-s3-demo-bucket/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

Optional. Gibt an, ob es sich bei der Tabelle um eine externe Tabelle handelt. Der Standardwert ist „true“. Für Iceberg-Tabellen muss dies auf „false“ gesetzt werden.

Beispiel:

WITH (is_external = false)
location = [location]

Erforderlich für Iceberg-Tabellen. Gibt den Stammspeicherort für die aus den Abfrageergebnissen zu erstellende Iceberg-Tabelle an.

Beispiel:

WITH (location ='s3://amzn-s3-demo-bucket/tables/iceberg_table/')
field_delimiter = [delimiter]

Optionale und speziell für Text-basierte Datenspeicherformate. Das einstellige Feldtrennzeichen für Dateien in CSV-, TSV- und Textdateien. Beispiel, WITH (field_delimiter = ','). Derzeit werden mehrzeilige Feldtrennzeichen für CTAS-Abfragen nicht unterstützt. Wenn Sie kein Feldtrennzeichen angeben, wird \001 standardmäßig verwendet.

format = [storage_format]

Das Speicherformat für die CTAS-Abfrageergebnisse, z. B. ORC, PARQUET, AVRO, JSON, ION oder TEXTFILE. Für Iceberg-Tabellen sind die zulässigen Formate ORC, PARQUET und AVRO. Wenn nichts angegeben ist, wird standardmäßig PARQUET verwendet. Der Name dieses Parameters, format, muss in Kleinbuchstaben angegeben werden oder Ihre CTAS-Abfrage schlägt fehl.

Beispiel:

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

Diese Eigenschaft gilt nicht für Iceberg-Tabellen. Verwenden Sie für Iceberg-Tabellen die Partitionierung mit Bucket-Transformation.

Eine Array-Liste der Buckets zum Gruppieren von Daten. Wenn nicht angegeben, gruppiert Athena Ihre Daten nicht in dieser Abfrage.

bucket_count = [int]
Anmerkung

Diese Eigenschaft gilt nicht für Iceberg-Tabellen. Verwenden Sie für Iceberg-Tabellen die Partitionierung mit Bucket-Transformation.

Die Anzahl der Buckets für das Bucketing Ihrer Daten. Wenn nicht angegeben, gruppiert Athena Ihre Daten nicht. Beispiel:

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 * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
Anmerkung

Diese Eigenschaft gilt nicht für Iceberg-Tabellen. Verwenden Sie die später in diesem Abschnitt beschriebene partitioning-Eigenschaft, um Partitionstransformationen für Iceberg-Tabellen zu verwenden.

Optional. Eine Array-Liste der Spalten, nach denen die CTAS-Tabelle partitioniert wird. Stellen Sie sicher, dass die Namen der partitionierten Spalten am Ende der Liste in der Liste der Spalten in der SELECT-Anweisung aufgeführt werden.

partitioning = ARRAY[partition_transform, ...]

Optional. Gibt die Partitionierung der zu erstellenden Iceberg-Tabelle an. Iceberg unterstützt eine Vielzahl von Partitionstransformationen und Partitionsentwicklungen. Partitionstransformationen sind in der folgenden Tabelle zusammengefasst.

Transform Beschreibung
year(ts) Erstellt eine Partition für jedes Jahr. Der Partitionswert ist die ganzzahlige Differenz in Jahren zwischen ts und dem 1. Januar 1970.
month(ts) Erstellt eine Partition für jeden Monat jedes Jahres. Der Partitionswert ist die ganzzahlige Differenz in Monaten zwischen ts und dem 1. Januar 1970.
day(ts) Erstellt eine Partition für jeden Tag jedes Jahres. Der Partitionswert ist die ganzzahlige Differenz in Tagen zwischen ts und dem 1. Januar 1970.
hour(ts) Erstellt eine Partition für jede Stunde jeden Tages. Der Partitionswert ist ein Zeitstempel, bei dem die Minuten und Sekunden auf Null gesetzt werden.
bucket(x, nbuckets) Hasht die Daten in die angegebene Anzahl an Buckets. Der Partitionswert ist ein ganzzahliger Hash von x, mit einem Wert zwischen 0 und einschließlich nbuckets - 1.
truncate(s, nchars) Erstellt den Partitionswert aus den ersten nchars-Zeichen von s.

Beispiel:

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

Optional. Spezifische Konfiguration zur Datenoptimierung. Dateien, die kleiner als der angegebene Wert sind, werden zur Optimierung eingeschlossen. Der Standardwert ist das 0,75-fache des Wertes von write_target_data_file_size_bytes. Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter Iceberg-Tabellen optimieren.

Beispiel:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

Optional. Spezifische Konfiguration zur Datenoptimierung. Dateien, die größer als der angegebene Wert sind, werden zur Optimierung eingeschlossen. Der Standardwert ist das 1,8-fache des Wertes von write_target_data_file_size_bytes. Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter Iceberg-Tabellen optimieren.

Beispiel:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

Optional. Spezifische Konfiguration zur Datenoptimierung. Wenn es weniger Datendateien gibt, die eine Optimierung erfordern als der angegebene Schwellenwert, werden die Dateien nicht neu geschrieben. Dies ermöglicht die Ansammlung von mehr Datendateien, um Dateien näher an der Zielgröße zu erzeugen und unnötige Berechnungen zur Kosteneinsparung zu überspringen. Der Standardwert ist 5. Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter Iceberg-Tabellen optimieren.

Beispiel:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

Optional. Spezifische Konfiguration zur Datenoptimierung. Wenn weniger Löschdateien mit einer Datendatei verknüpft sind als der Schwellenwert, wird die Datendatei nicht neu geschrieben. Dies ermöglicht die Ansammlöung von mehr Löschdateien für jede Datendatei zur Kosteneinsparung. Der Standardwert ist 2. Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter Iceberg-Tabellen optimieren.

Beispiel:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

Optional. Vakuum-spezifische Konfiguration. Die Mindestanzahl der aktuellsten Snapshots, die beibehalten werden sollen. Der Standardwert ist 1. Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter VACUUM.

Anmerkung

Die vacuum_min_snapshots_to_keep-Eigenschaft erfordert die Athena-Engine-Version 3.

Beispiel:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

Optional. Vakuum-spezifische Konfiguration. Ein Zeitraum in Sekunden, der das Alter der beibehaltenden Snapshots darstellt. Der Standardwert beträgt 432 000 (5 Tage). Diese Eigenschaft gilt nur für Iceberg-Tabellen. Weitere Informationen finden Sie unter VACUUM.

Anmerkung

Die vacuum_max_snapshot_age_seconds-Eigenschaft erfordert die Athena-Engine-Version 3.

Beispiel:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

Der Komprimierungstyp, der für jedes Speicherformat verwendet werden soll, mit dem die Komprimierung angegeben werden kann. Der compression_format-Wert gibt die Komprimierung an, die verwendet werden soll, wenn die Daten in die Tabelle geschrieben werden. Sie können die Komprimierung für die TEXTFILE-, JSON-, PARQUET- und ORC-Dateiformate angeben.

Wenn die format-Eigenschaft beispielsweise PARQUET als Speicherformat angibt, gibt der Wert für write_compression das Komprimierungsformat für Parquet an. In diesem Fall entspricht die Angabe eines Wertes für write_compression der Angabe eines Wertes für parquet_compression.

Wenn die format-Eigenschaft ORC als Speicherformat angibt, gibt der Wert für write_compression das Komprimierungsformat für ORC an. In diesem Fall entspricht die Angabe eines Wertes für write_compression der Angabe eines Wertes für orc_compression.

Mehrere Eigenschaften von Komprimierungsformaten können in derselben CTAS-Abfrage nicht angegeben werden. Sie können beispielsweise nicht sowohl write_compression als auch parquet_compression in derselben Abfrage angeben. Dasselbe gilt für write_compression und orc_compression. Informationen zu den für jedes Dateiformat unterstützten Komprimierungstypen finden Sie unter Komprimierung in Athena verwenden.

orc_compression = [compression_format]

Der Komprimierungstyp verwendet das ORC-Dateiformat, wenn die ORC-Daten in die Tabelle geschrieben werden. Beispiel, WITH (orc_compression = 'ZLIB'). Teile innerhalb der ORC-Datei (mit Ausnahme von ORC Postscript) werden mit der von Ihnen angegebenen Komprimierung komprimiert. Wenn es weggelassen wird, wird die ZLIB-Komprimierung standardmäßig für verwendet ORC.

Anmerkung

Aus Gründen der Kontinuität empfehlen wir, die write_compression-Eigenschaft anstelle von orc_compression zu verwenden. Verwenden Sie die format-Eigenschaft, um das Speicherformat als ORC anzugeben, und verwenden Sie dann die write_compression-Eigenschaft, um das von ORC verwendete Komprimierungsformat anzugeben.

parquet_compression = [compression_format]

Der Komprimierungstyp verwendet das Parquet-Dateiformat, wenn die Parquet-Daten in die Tabelle geschrieben werden. Beispiel, WITH (parquet_compression = 'SNAPPY'). Diese Komprimierung wird auf Spaltenstücke innerhalb der Parquet-Dateien angewendet. Wenn dies weggelassen wird, wird die GZIP-Komprimierung standardmäßig für Parquet verwendet.

Anmerkung

Aus Gründen der Kontinuität empfehlen wir, die write_compression-Eigenschaft anstelle von parquet_compression zu verwenden. Verwenden Sie die format-Eigenschaft, um das Speicherformat als PARQUET anzugeben, und verwenden Sie dann die write_compression-Eigenschaft, um das von PARQUET verwendete Komprimierungsformat anzugeben.

compression_level = [compression_level]

Die zu verwendende Komprimierungsstufe. Diese Eigenschaft gilt nur für die ZSTD-Komprimierung. Mögliche Werte liegen zwischen 1 und 22. Der Standardwert ist 3. Weitere Informationen finden Sie unter ZSTD-Komprimierungsstufen verwenden.

Beispiele

Beispiele für CTAS-Abfragen finden Sie in den folgenden Ressourcen.