UNLOAD
Schreibt Abfrageergebnisse aus einer SELECT-Anweisung in das angegebene Datenformat. Zu den unterstützten Formaten für UNLOAD gehören Apache Parquet, ORC, Apache Avro und JSON. CSV ist das einzige Ausgabeformat, das vom dem Athena SELECT-Befehl unterstützt wird, aber Sie können den UNLOAD-Befehl, der eine Vielzahl von Ausgabeformaten unterstützt, verwenden, um Ihre SELECT-Abfrage einzuschließen und ihre Ausgabe in eines der Formate die UNLOAD unterstützt umzuschreiben.
Obwohl Sie die CREATE TABLE AS-(CTAS)-Anweisung verwenden können, um Daten in anderen Formaten als CSV auszugeben, erfordern CTAS-Anweisungen die Erstellung einer Tabelle in Athena. Die UNLOAD-Anweisung ist nützlich, wenn Sie die Ergebnisse einer SELECT-Abfrage in einem Nicht-CSV-Format ausgeben möchten, aber die zugehörige Tabelle nicht benötigen. Beispielsweise kann eine nachgelagerte Anwendung erfordern, dass die Ergebnisse einer SELECT-Abfrage im JSON-Format vorliegen, und Parquet oder ORC können einen Leistungsvorteil gegenüber CSV bieten, wenn Sie die Ergebnisse der SELECT-Abfrage für zusätzliche Analysen verwenden möchten.
Überlegungen und Einschränkungen
Beachten Sie bei der Verwendung der UNLOAD-Anweisung in Athena die folgenden Punkte:
-
Keine globale Reihenfolge von Dateien –
UNLOAD-Ergebnisse werden parallel in mehrere Dateien geschrieben. Wenn dieSELECT-Abfrage in derUNLOAD-Anweisung eine Sortierreihenfolge angibt, wird der Inhalt jeder Datei sortiert, aber die Dateien werden nicht relativ zueinander sortiert. -
Verwaiste Daten nicht gelöscht – Im Falle eines Fehlers versucht Athena nicht, verwaiste Daten zu löschen. Dieses Verhalten ist das gleiche wie bei CTAS und
INSERT INTO-Anweisungen. -
Maximale Partitionen – Die maximale Anzahl von Partitionen, die mit
UNLOADverwendet werden können, beträgt 100. -
Metadaten- und Manifestdateien– Athena generiert für jede
UNLOAD-Abfrage eine Metadatendatei und eine Datenmanifestdatei. Das Manifest verfolgt die Dateien, die die Abfrage geschrieben hat. Beide Dateien werden in Ihrem Athena-Abfrageergebnisspeicherort in Amazon S3 gespeichert. Weitere Informationen finden Sie unter Identifizieren von Abfrageausgabedateien. -
Verschlüsselung –
UNLOAD-Ausgabedateien werden gemäß der für Amazon S3 verwendeten Verschlüsselungskonfiguration verschlüsselt. Um die Verschlüsselungskonfiguration zum Verschlüsseln IhresUNLOAD-Ergebnisses einzurichten, können Sie die EncryptionConfiguration-API verwenden -
Vorbereitete Anweisungen –
UNLOADkann mit vorbereiteten Anweisungen verwendet werden. Informationen zu vorbereiteten Anweisungen in Athena finden Sie unter Parametrisierte Abfragen verwenden. -
Service Quotas –
UNLOADverwendet DML-Abfragekontingente. Kontigentinformationen finden Sie unter Service Quotas. -
Erwarteter Bucket-Eigentümer – Die Einstellung für den erwarteten Bucket-Eigentümer gilt nicht für den Amazon-S3-Speicherort, der in der
UNLOAD-Abfrage angegeben wurde. 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.
Syntax
Die UNLOAD-Anweisung verwendet die folgende Syntax.
UNLOAD (SELECTcol_name[, ...] FROMold_table) TO 's3://amzn-s3-demo-bucket/my_folder/' WITH (property_name= 'expression' [, ...] )
Außer beim Schreiben auf Partitionen, muss das TO-Ziel einen Standort in Amazon S3 angeben, der keine Daten enthält. Bevor die UNLOAD-Abfrage in den angegebenen Speicherort schreibt, überprüft sie, ob der Bucket-Speicherort leer ist. Da UNLOAD keine Daten an den angegebenen Speicherort schreibt, wenn der Speicherort bereits Daten enthält, überschreibt UNLOAD keine vorhandenen Daten. Um einen Bucket-Speicherort als Ziel für UNLOAD wiederzuverwenden, löschen Sie die Daten am Bucket-Speicherort und führen Sie die Abfrage dann erneut aus.
Beachten Sie, dass dieses Verhalten anders ist, wenn UNLOAD in Partitionen schreibt. Wenn Sie dieselbe UNLOAD-Abfrage mehrmals ausführen, die dieselbe SELECT-Anweisung, denselben TO-Speicherort und dieselben Partitionen hat, entlädt jede UNLOAD-Abfrage die Daten an dem angegebenen Speicherort und den angegebenen Partitionen in Amazon S3.
Parameter
Die möglichen Werte für property_name sind wie folgt.
- format = '
file_format' -
Erforderlich Gibt das Dateiformat der Ausgabe an. Mögliche Werte für
file_formatsindORC,PARQUET,AVRO,JSONoderTEXTFILE. - Kompression = '
compression_format' -
Optional. Diese Option ist spezifisch für die Formate ORC und Parquet. Für ORC ist der Standardwert
zlibund für Parquet der Standardwertgzip. Informationen über unterstützte Komprimierungsformate finden Sie unter Unterstützung der Athena-Komprimierung.Anmerkung
Diese Option gilt nicht für das Format
AVRO. Athena verwendetgzipfürJSON- undTEXTFILE-Formate. - compression_level =
compression_level -
Optional. Die Komprimierungsstufe, die für die ZSTD-Komprimierung verwendet werden soll. Diese Eigenschaft gilt nur für die ZSTD-Komprimierung. Weitere Informationen finden Sie unter ZSTD-Komprimierungsstufen verwenden.
- field_delimiter = '
delimiter' -
Optional. Gibt ein Feldtrennzeichen aus einem einzigen Zeichen für Dateien in CSV, TSV und anderen Textformaten an. Das folgende Beispiel verwendet ein Komma als Trennzeichen:
WITH (field_delimiter = ',')Derzeit werden mehrzeilige Feldtrennzeichen nicht unterstützt. Wenn Sie kein Feldtrennzeichen angeben, wird das Oktalzeichen
\001(^A) verwendet. - partitioned_by = ARRAY[
col_name[,...] ] -
Optional. Eine Array-Liste der Spalten, nach denen die Ausgabe partitioniert ist.
Anmerkung
Stellen Sie in Ihrer
SELECT-Anweisung sicher, dass die Namen der partitionierten Spalten in Ihrer Spaltenliste an letzter Stelle stehen.
Beispiele
Im folgenden Beispiel wird die Ausgabe einer SELECT-Abfrage im JSON-Format an den Amazon-S3-Speicherort s3://amzn-s3-demo-bucket/unload_test_1/ geschrieben.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/unload_test_1/' WITH (format = 'JSON')
Im folgenden Beispiel wird die Ausgabe einer SELECT-Abfrage im Parquet-Format mithilfe der Snappy-Komprimierung geschrieben.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET',compression = 'SNAPPY')
Im folgenden Beispiel werden vier Spalten im Textformat geschrieben, wobei die Ausgabe durch die letzte Spalte partitioniert ist.
UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) TO 's3://amzn-s3-demo-bucket/ partitioned/' WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1'])
Im folgenden Beispiel werden die Abfrageergebnisse unter Verwendung des Parquet-Dateiformats, der ZSTD-Komprimierung und der ZSTD-Komprimierungsstufe 4 an den angegebenen Speicherort entladen.
UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
Weitere Ressourcen
-
Vereinfachen Sie Ihre ETL- und ML-Pipelines mithilfe des Amazon Athena UNLOAD-Features
im AWS-Big-Data-Blog.