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 bestehende externe Tabellen in einem externen Katalog ein, z. B. für AWS Glue AWS Lake Formation, oder einen Apache Hive-Metastore. Verwenden Sie dieselbe Rolle AWS Identity and Access Management (IAM), die für den CREATE EXTERNAL SCHEMA Befehl verwendet wurde, um mit externen Katalogen und Amazon S3 zu interagieren.

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

Bei partitionierten Tabellen schreibt INSERT (externe Tabelle) Daten gemäß dem in der Tabelle angegebenen Partitionsschlüssel an den Amazon S3 S3-Speicherort. Außerdem werden nach Abschluss des INSERT Vorgangs automatisch neue Partitionen im externen Katalog registriert.

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 der Summe der Datenspalten und Partitionsspalten entsprechen. Der Speicherort und der Datentyp jeder Datenspalte müssen mit dem der externen Tabelle übereinstimmen. Die Position der Partitionsspalten muss sich am Ende der SELECT Abfrage befinden, und zwar in der Reihenfolge, in der sie im CREATE EXTERNAL TABLE Befehl 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 zur Erstellung des externen Schemas verwendet wurde, sowohl Lese- als auch Schreibberechtigungen für Amazon S3 und haben AWS Glue. Wenn Sie einen AWS Lake Formation Katalog verwenden, wird diese IAM Rolle der Besitzer 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.

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

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

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

  • Die Tabelleneigenschaft numRows '' wird gegen Ende des INSERT Vorgangs automatisch aktualisiert. Die Tabelleneigenschaft muss bereits definiert oder der Tabelle hinzugefügt werden, sofern sie nicht durch eine CREATE EXTERNAL TABLE AS-Operation 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 durch jeden Vorgang INSERT (externe Tabelle) in Amazon S3 geschrieben wurden.

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

INSERTBeispiele für (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 statischer Partitionierung in eine partitionierte externe Tabelle eingefügt. Die Partitionsspalten sind in der Anweisung fest codiert. SELECT 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 dynamischer 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;