INSERT (externe Tabelle) - Amazon Redshift

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 (externe Tabelle)

Fügt die Ergebnisse einer SELECT-Abfrage in vorhandene externe Tabellen im externen Katalog ein AWS Glue AWS Lake Formation, z. B. für oder in einen Apache-Hive-Metastore. Verwenden Sie dieselbe AWS Identity and Access Management (IAM)-Rolle, die für den Befehl CREATE EXTERNAL SCHEMA verwendet wird, um mit externen Katalogen und Amazon S3 zu interagieren.

Bei nicht partitionierten Tabellen schreibt der Befehl INSERT (externe Tabelle) Daten basierend auf den angegebenen Tabelleneigenschaften und dem Dateiformat in den Amazon-S3-Speicherort, der in der Tabelle definiert ist.

Bei partitionierten Tabellen schreibt INSERT (externe Tabelle) Daten gemäß dem in der Tabelle angegebenen Partitionsschlüssel in den Amazon-S3-Speicherort. Außerdem werden neue Partitionen automatisch im externen Katalog registriert, nachdem der INSERT-Vorgang abgeschlossen ist.

Sie können INSERT (externe Tabelle) nicht innerhalb eines Transaktionsblocks ausführen (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter Serialisierbare Isolierung.

Syntax

INSERT INTO external_schema.table_name { select_statement }

Parameter

external_schema.table_name

Der Name eines vorhandenen externen Schemas und einer externen Zieltabelle, in die eingefügt werden soll.

select-statement

Eine Anweisung, die mindestens eine Zeile in die externe Tabelle einfügt, indem eine beliebige Abfrage definiert wird. Alle von der Abfrage erzeugten Zeilen werden auf Grundlage der Tabellendefinition entweder im Text- oder im Parquet-Format in Amazon S3 geschrieben. Die Abfrage muss eine Spaltenliste zurückgeben, die mit den Spaltendatentypen in der externen Tabelle kompatibel ist. Die Spaltennamen müssen jedoch nicht übereinstimmen.

Nutzungshinweise

Die Anzahl der Spalten in der SELECT-Abfrage muss mit der Summe der Datenspalten und Partitionsspalten übereinstimmen. Der Speicherort und der Datentyp jeder Datenspalte müssen mit dem der externen Tabelle übereinstimmen. Die Position der Partitionsspalten muss am Ende der SELECT-Abfrage liegen, in derselben Reihenfolge, in der sie im Befehl CREATE EXTERNAL TABLE definiert wurden. Die Spaltennamen müssen nicht übereinstimmen.

In einigen Fällen möchten Sie möglicherweise den Befehl INSERT (externe Tabelle) für einen AWS Glue -Datenkatalog oder einen Hive-Metastore ausführen. Im Fall von muss die IAM-Rolle AWS Glue, die zum Erstellen des externen Schemas verwendet wird, sowohl über Lese- als auch über Schreibberechtigungen für Amazon S3 und verfügen AWS Glue. Wenn Sie einen - AWS Lake Formation Katalog verwenden, wird diese IAM-Rolle der Eigentümer der neuen Lake-Formation-Tabelle. Diese IAM-Rolle muss mindestens über die folgenden Berechtigungen verfügen:

  • SELECT-, INSERT-, UPDATE-Berechtigung für die externe Tabelle

  • Datenspeicherort-Berechtigung für den Amazon-S3-Pfad der externen Tabelle

Um sicherzustellen, dass Dateinamen eindeutig sind, verwendet Amazon Redshift das folgende Format für den Namen jeder Datei, die standardmäßig in Amazon S3 hochgeladen wurde.

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

Ein Beispiel ist 20200303_004509_810669_1007_0001_part_00.parquet.

Berücksichtigen Sie Folgendes, wenn Sie den Befehl INSERT (externe Tabelle) ausführen:

  • Externe Tabellen, die ein anderes Format als PARQUET oder TEXTFILE haben, werden nicht unterstützt.

  • Dieser Befehl unterstützt vorhandene Tabelleneigenschaften wie 'write.parallel', 'write.maxfilesize.mb', 'compression_type' und 'serialization.null.format'. Um diese Werte zu aktualisieren, führen Sie den Befehl ALTER TABLE SET TABLE PROPERTIES aus.

  • Die Tabelleneigenschaft 'numRows' wird automatisch gegen Ende des INSERT-Vorgangs aktualisiert. Die Tabelleneigenschaft muss bereits definiert oder der Tabelle hinzugefügt werden, wenn sie nicht durch den CREATE EXTERNAL TABLE AS-Vorgang erstellt wurde.

  • Die LIMIT-Klausel wird in der äußeren SELECT-Abfrage nicht unterstützt. Verwenden Sie stattdessen eine verschachtelte LIMIT-Klausel.

  • Sie können die STL_UNLOAD_LOG-Tabelle verwenden, um die Dateien zu verfolgen, die von jedem INSERT (externe Tabelle)-Vorgang in Amazon S3 geschrieben wurden.

  • Amazon Redshift unterstützt nur die Amazon-S3-Standardverschlüsselung für INSERT (externe Tabelle).

Beispiele für INSERT (externe Tabelle)

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung in die externe Tabelle eingefügt.

INSERT INTO spectrum.lineitem SELECT * FROM local_lineitem;

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung mithilfe der statischen Partitionierung in eine partitionierte externe Tabelle eingefügt. Die Partitionsspalten sind in der SELECT-Anweisung fest kodiert. Die Partitionsspalten müssen sich am Ende der Abfrage befinden.

INSERT INTO spectrum.customer SELECT name, age, gender, 'May', 28 FROM local_customer;

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung mithilfe der dynamischen Partitionierung in eine partitionierte externe Tabelle eingefügt. Die Partitionsspalten sind nicht fest kodiert. Daten werden automatisch zu den vorhandenen Partitionsordnern oder zu neuen Ordnern hinzugefügt, wenn eine neue Partition hinzugefügt wird.

INSERT INTO spectrum.customer SELECT name, age, gender, month, day FROM local_customer;