Überlegungen und Einschränkungen für CTAS-Abfragen - 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.

Ü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/<query-id>/. Den für die Arbeitsgruppe angegebenen Speicherort für Abfrageergebnisse können Sie in den Arbeitsgruppendetails anzeigen.

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, ZLIBoder 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.