INSERT INTO - 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.

INSERT INTO

Fügt neue Zeilen in eine Zieltabelle ein, basierend auf einer SELECT-Abfrageanweisung, die in einer Quelltabelle ausgeführt wird, oder basierend auf einem Satz von VALUES, der als Teil der Anweisung bereitgestellt wird. Wenn die Quelltabelle auf zugrunde liegenden Daten in einem Format wie CSV oder JSON basiert und die Zieltabelle auf einem anderen Format wie Parquet oder ORC basiert, können Sie INSERT INTO-Abfragen verwenden, um ausgewählte Daten in das Format der Zieltabelle zu transformieren.

Überlegungen und Einschränkungen

Beachten Sie Folgendes, wenn Sie INSERT-Abfragen mit Athena verwenden.

  • Wenn Sie eine INSERT-Abfrage für eine Tabelle mit zugrunde liegenden Daten ausführen, die in Amazon S3 verschlüsselt sind, werden die Ausgabedateien, die die INSERT-Abfrage schreibt, standardmäßig nicht verschlüsselt. Wir empfehlen, INSERT-Abfrageergebnisse zu verschlüsseln, wenn Sie in Tabellen mit verschlüsselten Daten einfügen.

    Weitere Informationen zum Verschlüsseln von Abfrageergebnissen mithilfe der Konsole finden Sie unter Verschlüsseln der in Amazon S3 gespeicherten Athena-Abfrageergebnisse. Um die Verschlüsselung mit der AWS CLI oder der Athena-API zu aktivieren, verwenden Sie die EncryptionConfiguration Eigenschaften der StartQueryExecutionAktion, um Amazon S3 S3-Verschlüsselungsoptionen gemäß Ihren Anforderungen festzulegen.

  • Für INSERT INTO-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.

  • ACID-konforme INSERT INTO-Anweisungen finden Sie im INSERT INTO-Abschnitt von Aktualisieren von Iceberg-Datentabellen.

Unterstützte Formate und SerDes

Sie können eine INSERT Abfrage für Tabellen ausführen, die aus Daten mit den folgenden Formaten und erstellt wurden SerDes.

Data format (Datenformat) SerDe

Avro

org.apache.hadoop.hive.serde2.avro. AvroSerDe

Ion com.amazon.ionhiveserde. IonHiveSerDe

JSON

org.apache.hive.hcatalog.data. JsonSerDe

ORC

org.apache.hadoop.hive.ql.io.orc. OrcSerde

Parquet

org.apache.hadoop.hive.ql.io.parquet.serde. ParquetHiveSerDe

Textdatei

org.apache.hadoop.hive.serde2.lazy. LazySimpleSerDe

Anmerkung

CSV-, TSV- und benutzerdefinierte, durch Trennzeichen getrennte Dateien werden unterstützt.

Bucket-Tabellen werden nicht unterstützt

INSERT INTO wird für Bucket-Tabellen nicht unterstützt. Weitere Informationen finden Sie unter Partitionierung und Bucketing in Athena.

Verbundabfragen werden nicht unterstützt

INSERT INTO wird für Verbundabfragen nicht unterstützt. Ein Versuch, dies zu tun, kann zur Fehlermeldung führen: Dieser Vorgang wird derzeit für externe Kataloge nicht unterstützt. Weitere Informationen zu Verbundabfragen finden Sie unter Nutzung von Amazon-Athena-Verbundabfrage.

Partitionierung

Beachten Sie die Punkte in diesem Abschnitt, wenn Sie die Partitionierung mit INSERT INTO- oder CREATE TABLE AS SELECT-Abfragen verwenden.

Einschränkungen

Die Anweisung INSERT INTO unterstützt das Schreiben von maximal 100 Partitionen in die Zieltabelle. Wenn Sie die SELECT-Klausel für eine Tabelle mit mehr als 100 Partitionen ausführen, schlägt die Abfrage fehl, es sei denn, die SELECT-Abfrage ist auf 100 Partitionen oder weniger beschränkt.

Hinweise zum Umgehen dieser Einschränkung finden Sie unter Verwenden von CTAS und INSERT INTO zum Umgehen des Limits von 100 Partitionen.

Spalten-Reihenfolge

INSERT INTO- oder CREATE TABLE AS SELECT-Anweisungen erwarten, dass die partitionierte Spalte die letzte Spalte in der Liste der projizierten Spalten in einer SELECT-Anweisung ist.

Wenn die Quelltabelle nicht partitioniert ist oder im Vergleich zur Zieltabelle auf verschiedene Spalten partitioniert ist, betrachten Abfragen wie INSERT INTO destination_table SELECT * FROM source_table die Werte in der letzten Spalte der Quelltabelle als Werte für eine Partitionsspalte in der Zieltabelle. Beachten Sie dies beim Versuch, eine partitionierte Tabelle aus einer nicht partitionierten Tabelle zu erstellen.

Ressourcen

Weitere Informationen zur Verwendung von INSERT INTO mit Partitionierung finden Sie in den folgenden Ressourcen.

In Amazon S3 geschriebene Dateien

Athena schreibt Dateien in die Quelldatenspeicherorte in Amazon S3 als Ergebnis des INSERT-Befehls. Jede INSERT-Operation erstellt eine neue Datei, anstatt an eine vorhandene Datei anzuhängen. Die Dateispeicherorte hängen von der Struktur der Tabelle und ggf. der SELECT-Abfrage ab. Athena generiert für jede INSERT-Abfrage eine Daten-Manifest-Datei. Das Manifest verfolgt die Dateien, die die Abfrage geschrieben hat. Es wird im Verzeichnis der Athena-Abfrageergebnisse in Amazon S3 gespeichert. Weitere Informationen finden Sie unter Identifizieren von Abfrageausgabedateien.

Vermeiden Sie hochgradig transaktionale Updates

Wenn Sie Zeilen INSERT INTO zu einer Tabelle in Amazon S3 hinzufügen, schreibt Athena keine vorhandenen Dateien um oder ändert sie. Stattdessen schreibt es die Zeilen als eine oder mehrere neue Dateien. Da Tabellen mit vielen kleinen Dateien zu einer geringeren Abfrageleistung führen und Schreib- und Lesevorgänge wie PutObject Amazon S3 zu höheren Kosten GetObject führen, sollten Sie bei der Verwendung die folgenden Optionen in Betracht ziehenINSERT INTO:

  • Führen Sie INSERT INTO Operationen seltener für größere Zeilenstapel aus.

  • Bei großen Datenaufnahmemengen sollten Sie einen Service wie Amazon Data Firehose in Betracht ziehen.

  • Vermeiden Sie die Verwendung ganz. INSERT INTO Sammeln Sie stattdessen Zeilen in größeren Dateien und laden Sie sie direkt auf Amazon S3 hoch, wo sie von Athena abgefragt werden können.

Suchen verwaister Dateien

Wenn eine CTAS INSERT INTO Oder-Anweisung fehlschlägt, können verwaiste Daten am Datenspeicherort belassen und in nachfolgenden Abfragen gelesen werden. 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 von Abfrageausgabedateien und DataManifestLocation.

INSERT INTO...SELECT

Gibt die Abfrage an, die für eine Tabelle ausgeführt werden soll, source_table, die festlegt, welche Zeilen in eine zweite Tabelle eingefügt werden sollen, destination_table. Wenn die SELECT-Abfrage Spalten in der source_table angibt, müssen die Spalten genau mit denen in der destination_table übereinstimmen.

Weitere Informationen zu SELECT-Abfragen finden Sie unter SELECT.

Syntax

INSERT INTO destination_table SELECT select_query FROM source_table_or_view

Beispiele

Wählen Sie alle Zeilen in der vancouver_pageviews-Tabelle aus und fügen Sie sie in die canada_pageviews-Tabelle ein:

INSERT INTO canada_pageviews SELECT * FROM vancouver_pageviews;

Wählen Sie nur die Zeilen in der vancouver_pageviews-Tabelle aus, in denen die date-Spalte einen Wert zwischen 2019-07-01 und 2019-07-31 hat, und fügen Sie sie dann in canada_july_pageviews ein:

INSERT INTO canada_july_pageviews SELECT * FROM vancouver_pageviews WHERE date BETWEEN date '2019-07-01' AND '2019-07-31';

Wählen Sie die Werte in den Spalten city und state in der cities_world-Tabelle nur aus den Zeilen mit dem Wert usa in der Spalte country aus und fügen Sie sie in die Spalten city und state in der cities_usa-Tabelle ein:

INSERT INTO cities_usa (city,state) SELECT city,state FROM cities_world WHERE country='usa'

INSERT INTO...VALUES

Fügt Zeilen in eine vorhandene Tabelle ein, indem Spalten und Werte angegeben werden. Angegebene Spalten und zugehörige Datentypen müssen genau mit den Spalten und Datentypen in der Zieltabelle übereinstimmen.

Wichtig

Wir raten davon ab, Zeilen mit VALUES einzufügen, da Athena Dateien für jede INSERT-Operation generiert. Dies kann dazu führen, dass viele kleine Dateien erstellt werden und die Abfrageleistung der Tabelle beeinträchtigen. Um Dateien zu identifizieren, die eine INSERT-Abfrage erstellt, überprüfen Sie die Daten-Manifest-Datei. Weitere Informationen finden Sie unter Arbeiten mit Abfrageergebnissen, letzten Abfragen und Ausgabedateien.

Syntax

INSERT INTO destination_table [(col1,col2,...)] VALUES (col1value,col2value,...)[, (col1value,col2value,...)][, ...]

Beispiele

In den folgenden Beispielen hat die Tabelle "cities" drei Spalten: id, city, state, state_motto. Die id-Spalte hat den Typ INT und alle anderen Spalten haben den Typ VARCHAR.

Fügen Sie eine einzelne Zeile in die cities-Tabelle ein, wobei alle Spaltenwerte angegeben sind:

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')

Fügen Sie zwei Zeilen in die cities-Tabelle ein:

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'), (3,'Boise','ID','Esto perpetua')