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.
Überlegungen und Einschränkungen für CTAS-Abfragen
In den folgenden Abschnitten werden Überlegungen und Einschränkungen beschrieben, die Sie bei der Verwendung von CREATE TABLE AS SELECT
(CTAS)-Abfragen in Athena berücksichtigen sollten.
Lernen Sie die CTAS-Abfragesyntax kennen
Die CTAS-Abfragesyntax unterscheidet sich von der Syntax CREATE [EXTERNAL] TABLE
für das Erstellen von Tabellen. Siehe CREATE TABLE AS.
Der Unterschied zwischen Ansichten und CTAS-Abfragen
CTAS-Abfragen schreiben neue Daten an einen bestimmten Ort in Amazon S3. Ansichten schreiben keine Daten.
Geben Sie einen Speicherort für Ihre CTAS-Abfrageergebnisse an
Wenn Ihre Arbeitsgruppe die clientseitige Einstellung überschreibt, die für den Speicherort der Abfrageergebnisse gilt, erstellt Athena die Tabelle am Speicherort s3://amzn-s3-demo-bucket/tables/
. Den für die Arbeitsgruppe angegebenen Speicherort für Abfrageergebnisse können Sie in den Arbeitsgruppendetails anzeigen.<query-id>
/
Wenn Ihre Arbeitsgruppe den Speicherort für Abfrageergebnisse nicht überschreibt, können Sie die Syntax WITH (external_location ='s3://amzn-s3-demo-bucket/')
in der CTAS-Abfrage verwenden, um den Speicherort für CTAS-Abfrageergebnisse anzugeben.
Anmerkung
Die Eigenschaft external_location
muss einen Speicherort angeben, der leer ist. Eine CTAS-Abfrage überprüft, ob der Pfadspeicherort (Präfix) im Bucket leer ist und überschreibt niemals die Daten, wenn der Speicherort bereits Daten enthält. Um denselben Speicherort erneut zu verwenden, löschen Sie die Daten im Schlüsselpräfixspeicherort im Bucket.
Wenn Sie die Syntax external_location
auslassen und die Arbeitsgruppeneinstellung nicht verwenden, verwendet Athena die clientseitige Einstellung für den Abfrageergebnisspeicherort und erstellt die Tabelle am Speicherort s3://amzn-s3-demo-bucket/
. <Unsaved-or-query-name>
/<year>/<month/<date>
/tables/<query-id>
/
Suchen Sie nach verwaisten Dateien
Wenn eine CTAS
INSERT INTO
Oder-Anweisung fehlschlägt, ist es möglich, dass verwaiste Datendateien für fehlgeschlagene oder abgebrochene Abfragen am Zieldatenspeicherort verbleiben. Da Athena in einigen Fällen keine Daten aus dem Ziel-Bucket für Ihre Abfrage löscht, können die Teildaten in nachfolgenden Abfragen enthalten sein.
Zur Suche nach verwaisten Dateien zwecks Überprüfung oder Löschung können Sie die Daten-Manifest-Datei verwenden, die Athena zur Verfügung stellt, um die Liste der zu schreibenden Dateien zu verfolgen. In einigen seltenen Fällen, in denen eine Athena-Abfrage plötzlich fehlschlug, ist die Manifestdatei möglicherweise nicht vorhanden. Sie können den Ziel-S3-Speicherort manuell überprüfen, um die verwaisten Dateien zu finden. Weitere Informationen finden Sie unter Identifizieren von Abfrageausgabedateien und DataManifestLocation.
Wir empfehlen dringend, Apache Iceberg zu verwenden, um atomare Transaktionen von Tabellen durchzuführen. Weitere Informationen finden Sie unter Abfragen von Apache Iceberg-Tabellen.
Denken Sie daran, dass ORDER BY-Klauseln ignoriert werden
In einer CTAS-Abfrage ignoriert Athena ORDER BY
-Klauseln im SELECT
-Teil der Abfrage.
Gemäß der SQL-Spezifikation (ISO 9075 Teil 2) ist die Reihenfolge der Zeilen einer durch einen Abfrageausdruck angegebenen Tabelle nur für den Abfrageausdruck garantiert, der die ORDER BY
-Klausel unmittelbar enthält. Tabellen in SQL sind ohnehin von Natur aus ungeordnet, und die Implementierung der ORDER BY
in der Unterabfrage-Klauseln würde sowohl zu einer schlechten Leistung der Abfrage als auch zu keiner geordneten Ausgabe führen. Daher gibt es bei Athena-CTAS-Abfragen keine Garantie dafür, dass die in der ORDER
BY
-Klausel angegebene Reihenfolge beim Schreiben der Daten beibehalten wird.
Wählen Sie ein Format zum Speichern Ihrer Abfrageergebnisse
Sie können CTAS-Ergebnisse in PARQUET
, ORC
, AVRO
, JSON
und TEXTFILE
speichern. Mehrzeichen-Trennzeichen werden für das CTAS-TEXTFILE
-Format nicht unterstützt. Wenn Sie kein Datenspeicherformat angeben, werden die CTAS-Abfrageergebnisse standardmäßig in Parquet gespeichert.
CTAS-Abfragen erfordern keine Angabe von a, um SerDe Formattransformationen zu interpretieren. Siehe Example: Writing query results to a different format.
Ziehen Sie Komprimierungsformate in Betracht
GZIP
-Komprimierung wird für CTAS-Abfrageergebnisse in JSON- und TEXTFILE-Formaten verwendet. Für Parquet können Sie GZIP
oder SNAPPY
verwenden, der Standardwert ist GZIP
. Für ORC können Sie LZ4
, SNAPPY
, ZLIB
oder ZSTD
verwenden, der Standardwert ist ZLIB
. Beispiele für CTAS, die die Komprimierung angeben, finden Sie unter Example: Specifying data storage and compression formats. Weitere Informationen zur Komprimierung in Athena finden Sie unter Verwenden Sie die Komprimierung in Athena.
Partitioniere und sammle deine Ergebnisse
Sie können die Ergebnisdaten einer CTAS-Abfrage partitionieren und in Buckets speichern. Um Eigenschaften der Zieltabelle anzugeben, fügen Sie Partitionierungs- und Bucketing-Prädikate am Ende der Klausel hinzu. WITH
Weitere Informationen erhalten Sie unter Verwenden Sie Partitioning und Bucketing und Example: Creating bucketed and partitioned tables.
Wenn Sie CTAS verwenden, um eine partitionierte Tabelle zu erstellen, hat Athena ein Schreiblimit von 100 Partitionen. Hinweise zum Umgehen der Begrenzung auf 100 Partitionen finden Sie unter Verwenden Sie CTAS und INSERTINTO, um das Limit von 100 Partitionen zu umgehen.
Verschlüsseln Sie Ihre Ergebnisse
Sie können CTAS-Abfrageergebnisse in Amazon S3 verschlüsseln, so wie Sie auch andere Abfrageergebnisse in Athena verschlüsseln. Weitere Informationen finden Sie unter Verschlüsseln Sie die in Amazon S3 gespeicherten Athena-Abfrageergebnisse.
Die Einstellung für den erwarteten Bucket-Besitzer gilt nicht für CTAS
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 Geben Sie mithilfe der Athena-Konsole einen Speicherort für Abfrageergebnisse an.
Die Datentypen der Spalten werden beibehalten
Spaltendatentypen für eine CTAS-Abfrage sind dieselben wie für die ursprüngliche Abfrage angegeben.