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 und die Zieltabelle auf einem anderen Format wie Parquet oder basiertORC, können Sie mithilfe von INSERT INTO
Abfragen ausgewählte Daten in das Format der Zieltabelle umwandeln.
Ü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 dieINSERT
-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 Sie die in Amazon S3 gespeicherten Athena-Abfrageergebnisse. Um die Verschlüsselung mit AWS CLI oder Athena zu aktivierenAPI, 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 Geben Sie mithilfe der Athena-Konsole einen Speicherort für Abfrageergebnisse an. -
Hinweise zur ACID Einhaltung
INSERT INTO
der Vorschriften finden Sie imINSERT INTO
Abschnitt von. Iceberg-Tabellendaten aktualisieren
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 AnmerkungCSVTSV, und Dateien mit benutzerdefiniertem Trennzeichen werden unterstützt. |
Bucket-Tabellen werden nicht unterstützt
INSERT INTO
wird für Bucket-Tabellen nicht unterstützt. Weitere Informationen finden Sie unter Verwenden Sie Partitioning und Bucketing.
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 Verwenden Sie Amazon Athena Federated Query.
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 Sie CTAS und INSERTINTO, um das Limit von 100 Partitionen zu umgehen.
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
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.destination_table
SELECT * FROM
source_table
Ressourcen
Weitere Informationen zur Verwendung von INSERT INTO
mit Partitionierung finden Sie in den folgenden Ressourcen.
-
Hinweise zum Einfügen von partitionierten Daten in eine partitionierte Tabelle finden Sie unter Verwenden Sie CTAS und INSERTINTO, um das Limit von 100 Partitionen zu umgehen.
-
Hinweise zum Einfügen von nicht-partitionierten Daten in eine partitionierte Tabelle finden Sie unter Verwendung CTAS und INSERT INTO Zweck ETL und Datenanalyse.
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 Sie die Ausgabedateien der Abfrage.
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 Stapel von Zeilen 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 erhalten Sie unter Identifizieren Sie die Ausgabedateien der Abfrage 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 Sie mit Abfrageergebnissen und aktuellen Abfragen.
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')