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, die zum Erstellen von Tabellen CREATE [EXTERNAL] TABLE
verwendet wird. Siehe CREATE TABLE AS.
Der Unterschied zwischen Ansichten und CTAS Abfragen
CTASAbfragen 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 der Abfrageergebnisse nicht überschreibt, können Sie die Syntax WITH (external_location ='s3://amzn-s3-demo-bucket/')
in Ihrer CTAS Abfrage verwenden, um anzugeben, wo Ihre CTAS Abfrageergebnisse gespeichert werden.
Anmerkung
Die Eigenschaft external_location
muss einen Speicherort angeben, der leer ist. Eine CTAS Abfrage überprüft, ob die Pfadposition (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>
/
Findet verwaiste Dateien
Wenn eine CTAS
- oder INSERT INTO
-Anweisung fehlschlägt, ist es möglich, dass verwaiste Daten am Datenspeicherort belassen werden. Da Athena keine Daten oder Teildaten aus Ihrem Bucket löscht, können Sie diese Teildaten möglicherweise in nachfolgenden Abfragen lesen. 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. Weitere Informationen finden Sie unter Identifizieren Sie die Ausgabedateien der Abfrage und DataManifestLocation.
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 (ISO9075 Teil 2) ist die Reihenfolge der Zeilen einer durch einen Abfrageausdruck angegebenen Tabelle nur für den Abfrageausdruck garantiert, der die Klausel unmittelbar enthält. ORDER BY
Tabellen in SQL sind ohnehin von Natur aus ungeordnet, und die Implementierung der ORDER BY
in sub-query klauseln würde sowohl dazu führen, dass die Abfrage schlecht abschneidet als auch nicht zu einer geordneten Ausgabe führt. Daher gibt es bei CTAS Athena-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 inPARQUET
,ORC
, AVRO
JSON
, und speichernTEXTFILE
. Trennzeichen aus mehreren Zeichen werden für das Format nicht unterstützt. CTAS TEXTFILE
Wenn Sie kein Datenspeicherformat angeben, werden CTAS Abfrageergebnisse standardmäßig in Parquet gespeichert.
CTASAbfragen erfordern nicht die Angabe von a SerDe , um Formattransformationen zu interpretieren. Siehe Example: Writing query results to a different format.
Ziehen Sie Komprimierungsformate in Betracht
GZIP
Die 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 können SieORC, LZ4
SNAPPY
ZLIB
ZSTD
, oder verwenden. Die Standardeinstellung istZLIB
. CTASBeispiele, die Komprimierung spezifizieren, finden Sie unterExample: Specifying data storage and compression formats. Weitere Informationen zur Komprimierung in Athena finden Sie unter Verwenden Sie die Komprimierung in Athena.
Partitionieren und bündeln Sie Ihre Ergebnisse
Sie können die Ergebnisdaten einer CTAS Abfrage partitionieren und in einem Bucket zusammenfassen. 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 eine partitionierte Tabelle 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 auf ähnliche Weise verschlüsseln, wie Sie 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 Besitzer des erwarteten Buckets gilt nicht für CTAS
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.
Die Datentypen der Spalten werden beibehalten
Die Spaltendatentypen für eine CTAS Abfrage entsprechen denen, die für die ursprüngliche Abfrage angegeben wurden.