CREATE TABLE AS - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CREATE TABLE AS

Erstellt eine neue Tabelle mit den Ergebnissen einer SELECT-Abfrage. Um eine leere Tabelle zu erstellen, verwenden SieCREATE TABLE. CREATE TABLE ASkombiniert eine CREATE TABLE DDL Anweisung mit einer SELECT DML Anweisung und enthält daher technisch gesehen DDL sowohl als auchDML. Beachten Sie, dass CTAS Abfragen in Athena, obwohl sie CREATE TABLE AS hier mit anderen DDL Anweisungen gruppiert sind, so behandelt werden, als ob es sich DML um Servicequotas handelt. Informationen zu Service Quotas für Athena finden Sie unter Service Quotas.

Anmerkung

Bei CTAS Kontoauszügen gilt die Einstellung für den erwarteten Bucket-Besitzer 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 Geben Sie mithilfe der Athena-Konsole einen Speicherort für Abfrageergebnisse an.

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

Syntax

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

Wobei gilt:

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

Eine Liste optionaler CTAS Tabelleneigenschaften, von denen einige spezifisch für das Datenspeicherformat sind. Siehe CTASEigenschaften von Tabellen.

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[NEIN]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 die Ausgabe der Abfrageergebnisse einzubeziehen, können Sie anstelle einer SELECT Abfrage eine einfache 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 Sie mit Abfrageergebnissen und aktuellen Abfragen.

CTASEigenschaften von Tabellen

Jede CTAS Tabelle in Athena hat eine Liste optionaler CTAS Tabelleneigenschaften, die Sie mit WITH (property_name = expression [, ...] ) angeben. 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. Verwenden Sie die später in diesem Abschnitt beschriebene location Eigenschaft, um die Stammposition einer Iceberg-Tabelle in einer CTAS Anweisung zu definieren.

Optional. Der Ort, an dem Athena Ihre CTAS Anfrage 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, löschen Sie die Daten manuell. Andernfalls schlägt Ihre CTAS Abfrage fehl.

Wenn Sie eine CTAS Abfrage ausführen, die einen Speicherort external_location in einer Arbeitsgruppe angibt, die ein Abfrageergebnis 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 aus einem Zeichen bestehende Feldtrennzeichen für Dateien inCSV, TSV und Textdateien. Beispiel, WITH (field_delimiter = ','). Derzeit werden Feldtrennzeichen aus mehreren Zeichen für Abfragen nicht unterstützt. CTAS Wenn Sie kein Feldtrennzeichen angeben, wird \001 standardmäßig verwendet.

format = [storage_format]

Das Speicherformat für die CTAS Abfrageergebnisse, z. B.ORC,,PARQUET, AVROJSON, 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 aufgeführt werden, sonst schlägt Ihre CTAS Abfrage 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 von 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 Optimieren Sie Iceberg-Tabellen.

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 Optimieren Sie Iceberg-Tabellen.

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 Optimieren Sie Iceberg-Tabellen.

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 Optimieren Sie Iceberg-Tabellen.

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.

Ähnlich verhält es sich, wenn die format Eigenschaft ORC als Speicherformat angibt, write_compression gibt der Wert für 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.

In derselben CTAS Abfrage können nicht mehrere Tabelleneigenschaften für das Komprimierungsformat 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 Verwenden Sie die Komprimierung in Athena.

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 nicht angegeben, wird die ZLIB Komprimierung standardmäßig für verwendetORC.

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 nicht angegeben, 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 Verwenden Sie ZSTD Kompressionsstufen.

Beispiele

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