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 AS
kombiniert 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 anBeispiel:
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
,AVRO
JSON
,ION
oder.TEXTFILE
Für Iceberg-Tabellen sind die zulässigen FormateORC
,PARQUET
undAVRO
. Wenn nichts angegeben ist, wird standardmäßigPARQUET
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 * FROMtable_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ßlichnbuckets - 1
.truncate(s, nchars)
Erstellt den Partitionswert aus den ersten nchars
-Zeichen vons
.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 dieTEXTFILE
-,JSON
-,PARQUET
- undORC
-Dateiformate angeben.Wenn die
format
-Eigenschaft beispielsweisePARQUET
als Speicherformat angibt, gibt der Wert fürwrite_compression
das Komprimierungsformat für Parquet an. In diesem Fall entspricht die Angabe eines Wertes fürwrite_compression
der Angabe eines Wertes fürparquet_compression
.Ähnlich verhält es sich, wenn die
format
EigenschaftORC
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ürwrite_compression
der Angabe eines Wertes fürorc_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 auchparquet_compression
in derselben Abfrage angeben. Dasselbe gilt fürwrite_compression
undorc_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 dieORC
-Daten in die Tabelle geschrieben werden. Beispiel,WITH (orc_compression = 'ZLIB')
. Teile innerhalb derORC
-Datei (mit Ausnahme vonORC
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 vonorc_compression
zu verwenden. Verwenden Sie dieformat
-Eigenschaft, um das Speicherformat alsORC
anzugeben, und verwenden Sie dann diewrite_compression
-Eigenschaft, um das vonORC
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 vonparquet_compression
zu verwenden. Verwenden Sie dieformat
-Eigenschaft, um das Speicherformat alsPARQUET
anzugeben, und verwenden Sie dann diewrite_compression
-Eigenschaft, um das vonPARQUET
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.