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
SELECTAnweisung an. - [ WITH [ NO ] DATA ]
-
Wenn
WITH NO DATAverwendet 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 anBeispiel:
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_locationin 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_locationverwenden, 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\001standardmäßig verwendet. -
format = [storage_format] -
Das Speicherformat für die CTAS-Abfrageergebnisse, z. B.
ORC,PARQUET,AVRO,JSON,IONoderTEXTFILE. Für Iceberg-Tabellen sind die zulässigen FormateORC,PARQUETundAVRO. Wenn nichts angegeben ist, wird standardmäßigPARQUETverwendet. 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 * 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 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 tsund dem 1. Januar 1970.month(ts)Erstellt eine Partition für jeden Monat jedes Jahres. Der Partitionswert ist die ganzzahlige Differenz in Monaten zwischen tsund dem 1. Januar 1970.day(ts)Erstellt eine Partition für jeden Tag jedes Jahres. Der Partitionswert ist die ganzzahlige Differenz in Tagen zwischen tsund 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 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 dieTEXTFILE-,JSON-,PARQUET- undORC-Dateiformate angeben.Wenn die
format-Eigenschaft beispielsweisePARQUETals Speicherformat angibt, gibt der Wert fürwrite_compressiondas Komprimierungsformat für Parquet an. In diesem Fall entspricht die Angabe eines Wertes fürwrite_compressionder Angabe eines Wertes fürparquet_compression.Wenn die
format-EigenschaftORCals Speicherformat angibt, gibt der Wert fürwrite_compressiondas Komprimierungsformat für ORC an. In diesem Fall entspricht die Angabe eines Wertes fürwrite_compressionder Angabe eines Wertes fürorc_compression.Mehrere Eigenschaften von Komprimierungsformaten können in derselben CTAS-Abfrage nicht angegeben werden. Sie können beispielsweise nicht sowohl
write_compressionals auchparquet_compressionin derselben Abfrage angeben. Dasselbe gilt fürwrite_compressionundorc_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 dieORC-Daten in die Tabelle geschrieben werden. Beispiel,WITH (orc_compression = 'ZLIB'). Teile innerhalb derORC-Datei (mit Ausnahme vonORCPostscript) werden mit der von Ihnen angegebenen Komprimierung komprimiert. Wenn es weggelassen wird, wird die ZLIB-Komprimierung standardmäßig für verwendetORC.Anmerkung
Aus Gründen der Kontinuität empfehlen wir, die
write_compression-Eigenschaft anstelle vonorc_compressionzu verwenden. Verwenden Sie dieformat-Eigenschaft, um das Speicherformat alsORCanzugeben, und verwenden Sie dann diewrite_compression-Eigenschaft, um das vonORCverwendete 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 vonparquet_compressionzu verwenden. Verwenden Sie dieformat-Eigenschaft, um das Speicherformat alsPARQUETanzugeben, und verwenden Sie dann diewrite_compression-Eigenschaft, um das vonPARQUETverwendete 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.