Daten aus Textdateien in einem Amazon S3-Bucket in einen Amazon Aurora My SQL DB-Cluster laden - Amazon Aurora

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.

Daten aus Textdateien in einem Amazon S3-Bucket in einen Amazon Aurora My SQL DB-Cluster laden

Sie können den Ausdruck LOAD DATA FROM S3 oder LOAD XML FROM S3 verwenden, um Daten aus Dateien zu laden, die in einem Amazon S3-Bucket gespeichert sind. In Aurora My SQL werden die Dateien zuerst auf der lokalen Festplatte gespeichert und dann in die Datenbank importiert. Nachdem die Importe in die Datenbank abgeschlossen sind, werden die lokalen Dateien gelöscht.

Anmerkung

Für Aurora Serverless v1 wird das Laden von Daten aus Textdateien in eine Tabelle nicht unterstützt. Für Aurora Serverless v2 wird sie unterstützt.

Gewähren von Zugriff auf Amazon S3 für Aurora

Bevor Sie Daten aus einem Amazon S3-Bucket laden können, müssen Sie Ihrem Aurora My SQL DB-Cluster zunächst die Erlaubnis erteilen, auf Amazon S3 zuzugreifen.

Um Aurora My SQL Zugriff auf Amazon S3 zu gewähren
  1. Erstellen Sie eine AWS Identity and Access Management (IAM) -Richtlinie, die die Bucket- und Objektberechtigungen bereitstellt, die Ihrem Aurora My SQL DB-Cluster den Zugriff auf Amazon S3 ermöglichen. Detaillierte Anweisungen finden Sie unter Eine IAM Richtlinie für den Zugriff auf Amazon S3 S3-Ressourcen erstellen.

    Anmerkung

    In Aurora My SQL Version 3.05 und höher können Sie Objekte laden, die vom Kunden verwaltet wurden. AWS KMS keys Nehmen Sie dazu die kms:Decrypt Erlaubnis in Ihre IAM Richtlinie auf. Weitere Informationen finden Sie unter Erstellen einer IAM-Zugriffsrichtlinie für AWS KMS-Ressourcen.

    Sie benötigen diese Berechtigung nicht, um Objekte zu laden, die mit Von AWS verwaltete Schlüssel oder von Amazon S3 verwalteten Schlüsseln (SSE-S3) verschlüsselt wurden.

  2. Erstellen Sie eine IAM Rolle und fügen Sie die IAM Richtlinie, die Sie erstellt habenEine IAM Richtlinie für den Zugriff auf Amazon S3 S3-Ressourcen erstellen, der neuen IAM Rolle hinzu. Detaillierte Anweisungen finden Sie unter Erstellen einer IAM-Rolle, um Amazon Aurora den Zugriff auf AWS-Services zu erlauben.

  3. Stellen Sie sicher, dass der DB-Cluster eine benutzerdefinierte DB-Cluster-Parametergruppe verwendet.

    Weitere Informationen über das Erstellen einer benutzerdefinierten DB-Cluster-Parametergruppe finden Sie unter Eine DB-Cluster-Parametergruppe in Amazon Aurora erstellen.

  4. Setzen Sie für Aurora My SQL Version 2 entweder den aws_default_s3_role DB-Cluster-Parameter aurora_load_from_s3_role oder auf den Amazon-Ressourcennamen (ARN) der neuen IAM Rolle. Wenn keine IAM Rolle für angegeben istaurora_load_from_s3_role, verwendet Aurora die IAM unter angegebene Rolleaws_default_s3_role.

    Verwenden aws_default_s3_role Sie für Aurora My SQL Version 3

    Wenn das Cluster Teil einer globalen Aurora-Datenbank ist, legen Sie diesen Parameter für jedes Aurora-Cluster in der globalen Datenbank fest. Auch wenn nur das primäre Cluster in einer globalen Aurora-Datenbank Daten laden kann, kann ein anderes Cluster durch den Failover-Mechanismus zum primären Cluster hochgestuft werden.

    Weitere Informationen zu DB-Cluster-Parametern finden Sie unter Amazon Aurora-DB-Cluster und DB-Instance-Parameter.

  5. Um Datenbankbenutzern in einem Aurora My SQL DB-Cluster den Zugriff auf Amazon S3 zu ermöglichen, ordnen Sie die Rolle, die Sie erstellt haben, Erstellen einer IAM-Rolle, um Amazon Aurora den Zugriff auf AWS-Services zu erlauben dem DB-Cluster zu. Bei einer globalen Aurora-Datenbank verknüpfen Sie die Rolle mit jedem Aurora-Cluster in der globalen Datenbank. Informationen zur Zuordnung einer IAM Rolle zu einem DB-Cluster finden Sie unterZuweisen einer IAM-Rolle zu einem Amazon-Aurora-MySQL-DB-Cluster.

  6. Konfigurieren Sie Ihren Aurora My SQL DB-Cluster so, dass ausgehende Verbindungen zu Amazon S3 zugelassen werden. Detaillierte Anweisungen finden Sie unter Aktivierung der Netzwerkkommunikation von Amazon Aurora zu anderen AWS Diensten.

    Wenn Ihr DB-Cluster nicht öffentlich zugänglich ist und sich in einem VPC öffentlichen Subnetz befindet, ist er privat. Sie können einen S3-Gateway-Endpunkt für den Zugriff auf Ihren S3-Bucket erstellen. Weitere Informationen finden Sie unter Gateway-Endpunkte für Amazon S3.

    Bei einer globalen Aurora-Datenbank aktivieren Sie ausgehende Verbindungen für jeden Aurora-Cluster in der globalen Datenbank.

Erteilen von Rechten zum Laden von Daten in Amazon Aurora My SQL

Der Datenbankbenutzer, der die LOAD DATA FROM S3- oder LOAD XML FROM S3-Anweisung ausgibt, muss über eine bestimmte Rolle oder Berechtigung verfügen, um eine der Anweisungen auszugeben. In Aurora My SQL Version 3 gewähren Sie die AWS_LOAD_S3_ACCESS Rolle. In Aurora My SQL Version 2 gewähren Sie das LOAD FROM S3 Privileg. Dem Administratorbenutzer für ein DB-Cluster wird die entsprechende Rolle oder -Berechtigung standardmäßig gewährt. Sie können die Berechtigung einem anderen Benutzer erteilen, indem Sie eine der folgenden Anweisungen verwenden.

Verwenden Sie die folgende Anweisung für Aurora My SQL Version 3:

GRANT AWS_LOAD_S3_ACCESS TO 'user'@'domain-or-ip-address'
Tipp

Wenn Sie die Rollentechnik in Aurora My SQL Version 3 verwenden, können Sie die Rolle auch mithilfe der SET ROLE ALL Anweisung SET ROLE role_name or aktivieren. Wenn Sie mit dem My SQL 8.0-Rollensystem nicht vertraut sind, finden Sie weitere Informationen unterRollenbasiertes Berechtigungsmodell. Weitere Informationen finden Sie unter Rollen verwenden im My SQL Reference Manual.

Dies gilt nur für die aktuelle aktive Sitzung. Wenn Sie die Verbindung wieder herstellen, müssen Sie die SET ROLE Anweisung erneut ausführen, um Rechte zu gewähren. Weitere Informationen finden Sie in der SETROLEErklärung im My SQL Reference Manual.

Sie können den DB-Cluster-Parameter activate_all_roles_on_login zum automatischen Aktivieren aller Rollen verwenden, wenn ein Benutzer eine Verbindung mit einer DB-Instance herstellt. Wenn dieser Parameter gesetzt ist, müssen Sie die SET ROLE Anweisung im Allgemeinen nicht explizit aufrufen, um eine Rolle zu aktivieren. Weitere Informationen finden Sie unter activate_all_roles_on_login im My Reference Manual. SQL

Sie müssen jedoch zu Beginn einer gespeicherten Prozedur SET ROLE ALL explizit aufrufen, um die Rolle zu aktivieren, wenn die gespeicherte Prozedur von einem anderen Benutzer aufgerufen wird.

Verwenden Sie die folgende Anweisung für Aurora My SQL Version 2:

GRANT LOAD FROM S3 ON *.* TO 'user'@'domain-or-ip-address'

Die AWS_LOAD_S3_ACCESS Rolle und die LOAD FROM S3 Berechtigung sind spezifisch für Amazon Aurora und nicht für externe My SQL Databases oder RDS für My SQL DB-Instances verfügbar. Wenn Sie die Replikation zwischen einem Aurora-DB-Cluster als Replikationsquelle und My SQL database als Replikationsclient eingerichtet haben, führt die GRANT Anweisung für die Rolle oder das Privileg dazu, dass die Replikation mit einem Fehler beendet wird. Sie können diese Fehlermeldung ignorieren und mit der Replikation fortfahren. Verwenden Sie die Prozedur mysql_rds_skip_repl_error, um den Fehler bei einer RDS for My SQL Instance zu überspringen. Um den Fehler in einer externen My SQL database zu überspringen, verwenden Sie die Systemvariable slave_skip_errors (Aurora My SQL Version 2) oder die Systemvariable replica_skip_errors (Aurora My Version 3). SQL

Anmerkung

Der Datenbankbenutzer muss über INSERT Rechte für die Datenbank verfügen, in die er Daten lädt.

Den Pfad (URI) zu einem Amazon S3 S3-Bucket angeben

Die Syntax für die Angabe des Pfads (URI) zu Dateien, die in einem Amazon S3 S3-Bucket gespeichert sind, lautet wie folgt.

s3-region://amzn-s3-demo-bucket/file-name-or-prefix

Der Pfad enthält die folgenden Werte:

  • region(optional) — Die AWS Region, die den Amazon S3 S3-Bucket enthält, aus dem geladen werden soll. Dieser Wert ist optional. Falls Sie keinen Wert für region angeben, lädt Aurora die Datei aus Amazon S3 in derselben Region wie Ihr DB-Cluster.

  • bucket-name – Der Name des Amazon S3-Buckets mit den zu ladenden Daten. Objekt-Präfixe, die einen virtuellen Ordnerpfad identifizieren, werden unterstützt.

  • file-name-or-prefix— Der Name der Amazon S3 S3-Textdatei oder XML -Datei oder ein Präfix, das einen oder mehrere zu ladende Texte oder XML Dateien identifiziert. Sie können auch eine Manifestdatei festlegen, die eine oder mehrere Textdateien zum Laden angibt. Weitere Informationen darüber, wie Sie mit einer Manifestdatei Textdateien aus Amazon S3 laden, finden Sie unter Verwenden eines Manifests für zu ladende Dateien.

Um die URI vier Dateien in einen S3-Bucket zu kopieren
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie im Navigationsbereich Buckets und dann den Bucket aus, dessen Bereich URI Sie kopieren möchten.

  3. Wählen Sie das Präfix oder die Datei aus, die Sie aus S3 laden möchten.

  4. Wählen Sie „S3 URI kopieren“.

LOADDATAFROMS3

Sie können die LOAD DATA FROM S3 Anweisung verwenden, um Daten aus jedem Textdateiformat zu laden, das von der SQL LOADDATAINFILEMy-Anweisung unterstützt wird, z. B. Textdaten, die durch Kommas getrennt sind. Komprimierte Dateien werden nicht unterstützt.

Anmerkung

Stellen Sie sicher, dass Ihr Aurora My SQL DB-Cluster ausgehende Verbindungen zu S3 zulässt. Weitere Informationen finden Sie unter Aktivierung der Netzwerkkommunikation von Amazon Aurora zu anderen AWS Diensten.

Syntax

LOAD DATA [FROM] S3 [FILE | PREFIX | MANIFEST] 'S3-URI' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name,...)] [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number {LINES | ROWS}] [(col_name_or_user_var,...)] [SET col_name = expr,...]
Anmerkung

In Aurora My SQL Version 3.05 und höher FROM ist das Schlüsselwort optional.

Parameter

Die Anweisung LOAD DATA FROM S3 verwendet die folgenden erforderlichen und optionalen Parameter. Weitere Informationen zu einigen dieser Parameter finden Sie unter LOADDATAStatement in der SQL Dokumentation My.

FILE | PREFIX | MANIFEST

Gibt an, ob die Daten aus einer einzelnen Datei, aus allen Dateien mit einem bestimmten Präfix oder aus allen Dateien in einem angegebenen Manifest geladen werden sollen. FILE ist der Standardwert.

S-3 URI

Gibt an, URI ob eine Text- oder Manifestdatei geladen werden soll, oder ein Amazon S3 S3-Präfix, das verwendet werden soll. Geben Sie das an, URI indem Sie die unter beschriebene Syntax verwendenDen Pfad (URI) zu einem Amazon S3 S3-Bucket angeben.

REPLACE | IGNORE

Gibt an, welche Aktion ausgeführt werden soll, falls eine Eingabezeile die gleichen eindeutigen Schlüsselwerte aufweist wie eine vorhandene Zeile in der Datenbanktabelle.

  • Geben Sie REPLACE an, wenn die Eingabezeile die bestehende Zeile überschreiben soll.

  • Geben Sie IGNORE an, wenn die Eingabezeile verworfen werden soll.

INTO TABLE

Gibt den Namen der Datenbanktabelle an, in welche die Eingabezeilen geladen werden sollen.

PARTITION

Gibt vor, dass alle Eingabezeilen in die Partitionen, die in der Liste mit durch Komma getrennten Partitionsnamen angegeben sind, eingefügt werden müssen. Lässt sich eine Eingabezeile nicht in eine der angegebenen Partitionen einfügen, schlägt die Anweisung fehl und eine Fehlermeldung wird zurückgegeben.

CHARACTER SET

Gibt den Zeichensatz der Daten in der Eingabedatei an.

FIELDS | COLUMNS

Gibt an, wie die Felder oder Spalten in der Eingabedatei getrennt werden. Für Felder wird standardmäßig ein Tabulator als Trennzeichen verwendet.

LINES

Gibt an, wie die Zeilen in der Eingabedatei getrennt werden. Zeilen werden standardmäßig durch ein Zeilenumbruchzeichen ('\n') getrennt.

IGNORE number LINES | ROWS

Gibt an, dass eine bestimmte Anzahl an Zeilen am Anfang der Eingabedatei ignoriert werden sollen. Sie können beispielsweise mit IGNORE 1 LINES die erste Headerzeile mit den Spaltennamen überspringen oder mit IGNORE 2 ROWS die ersten beiden Datenzeilen der Eingabedatei auslassen. Wenn Sie auch PREFIX verwenden, überspringt IGNORE eine bestimmte Anzahl von Zeilen am Anfang der ersten Eingabedatei.

col_name_or_user_var, ...

Gibt eine durch Komma getrennte Liste mit einem oder mehreren Spaltennamen bzw. einer oder mehreren Benutzervariablen an, die die Namen der zu ladenden Elemente identifizieren. Der Name einer Benutzervariable, der für diesen Zweck verwendet wird, muss mit dem Namen eines Elements aus der Textdatei übereinstimmen, welcher ein @ als Präfix hat. Sie können Benutzervariablen einsetzen, um die entsprechenden Feldwerte für die spätere Wiederverwendung zu speichern.

Beispielsweise wird mit folgender Anweisung die erste Spalte aus der Eingabedatei in die erste Spalte von table1 geladen, zudem wird der Wert der Spalte table_column2 in table1 auf den Eingabewert der zweiten Spalte geteilt durch 100 gesetzt.

LOAD DATA FROM S3 's3://amzn-s3-demo-bucket/data.txt' INTO TABLE table1 (column1, @var1) SET table_column2 = @var1/100;
SET

Gibt eine durch Komma getrennte Liste mit Zuweisungsvorgängen an, die die Werte von Spalten in der Tabelle auf Werte setzen, die nicht in der Eingabedatei enthalten sind.

Beispielsweise setzt die folgende Anweisung die ersten beiden Spalten von table1 auf die Werte in den ersten beiden Spalten aus der Eingabedatei und anschließend den Wert von column3 in table1 auf den aktuellen Zeitstempel.

LOAD DATA FROM S3 's3://amzn-s3-demo-bucket/data.txt' INTO TABLE table1 (column1, column2) SET column3 = CURRENT_TIMESTAMP;

Auf der rechten Seite von SET-Zuweisungen können Sie Unterabfragen formulieren. Für eine Unterabfrage, die einen Wert zurückgibt, der einer Spalte zugewiesen werden soll, kommt ausschließlich eine skalare Unterabfrage infrage. Des Weiteren können Sie mit einer Unterabfrage keine Daten aus der zu ladenden Tabelle auswählen.

Sie können nicht das Schlüsselwort LOCAL der Anweisung LOAD DATA FROM S3 verwenden, wenn Sie Daten aus einem Amazon-S3-Bucket laden.

Verwenden eines Manifests für zu ladende Dateien

Sie können die LOAD DATA FROM S3 Anweisung mit dem MANIFEST Schlüsselwort verwenden, um eine Manifestdatei in einem JSON Format anzugeben, das die Textdateien auflistet, die in eine Tabelle in Ihrem DB-Cluster geladen werden sollen.

Das folgende JSON Schema beschreibt das Format und den Inhalt einer Manifestdatei.

{ "$schema": "http://json-schema.org/draft-04/schema#", "additionalProperties": false, "definitions": {}, "id": "Aurora_LoadFromS3_Manifest", "properties": { "entries": { "additionalItems": false, "id": "/properties/entries", "items": { "additionalProperties": false, "id": "/properties/entries/items", "properties": { "mandatory": { "default": "false", "id": "/properties/entries/items/properties/mandatory", "type": "boolean" }, "url": { "id": "/properties/entries/items/properties/url", "maxLength": 1024, "minLength": 1, "type": "string" } }, "required": [ "url" ], "type": "object" }, "type": "array", "uniqueItems": true } }, "required": [ "entries" ], "type": "object" }

urlIn jedem Manifest muss ein Name URL mit dem Bucket-Namen und dem vollständigen Objektpfad für die Datei angegeben werden, nicht nur ein Präfix. Sie können ein Manifest verwenden, um Dateien aus verschiedenen Buckets, verschiedenen Regionen oder mit unterschiedlichen Präfixen zu laden. Wenn in der keine Region angegeben istURL, wird die Region des Aurora-DB-Ziel-Clusters verwendet. Das folgende Beispiel zeigt eine Manifestdatei, mit der vier Dateien aus unterschiedlichen Buckets geladen werden.

{ "entries": [ { "url":"s3://aurora-bucket/2013-10-04-customerdata", "mandatory":true }, { "url":"s3-us-west-2://aurora-bucket-usw2/2013-10-05-customerdata", "mandatory":true }, { "url":"s3://aurora-bucket/2013-10-04-customerdata", "mandatory":false }, { "url":"s3://aurora-bucket/2013-10-05-customerdata" } ] }

Das optionale Flag mandatory gibt an, ob LOAD DATA FROM S3 eine Fehlermeldung zurückgeben soll, wenn die Datei nicht gefunden wird. Das Flag mandatory ist standardmäßig auf false gesetzt. Wenn keine Dateien gefunden werden, wird mandatory beendet, und zwar unabhängig vom LOAD DATA FROM S3-Wert.

Manifestdateien können eine beliebige Erweiterung haben. Im folgenden Beispiel wird die Anweisung LOAD DATA FROM S3 mit dem Manifest aus dem vorherigen Beispiel ausgeführt, das den Namen customer.manifest trägt.

LOAD DATA FROM S3 MANIFEST 's3-us-west-2://aurora-bucket/customer.manifest' INTO TABLE CUSTOMER FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (ID, FIRSTNAME, LASTNAME, EMAIL);

Nachdem die Anweisung beendet ist, wird ein Eintrag für jede erfolgreich geladene Datei in die Tabelle aurora_s3_load_history geschrieben.

Überprüfen der geladenen Dateien mit der Tabelle „aurora_s3_load_history“

Mit jeder erfolgreich ausgeführten Anweisung LOAD DATA FROM S3 wird die Tabelle aurora_s3_load_history im Schema mysql mit einem Eintrag für jede geladene Datei aktualisiert.

Nach der Ausführung der Anweisung LOAD DATA FROM S3 können Sie überprüfen, welche Dateien geladen wurden. Dazu führen Sie eine Abfrage für die Tabelle aurora_s3_load_history aus. Um die Dateien zu sehen, die aus einer Iteration der Anweisung geladen wurden, verwenden Sie die WHERE Klausel, um die Datensätze auf dem Amazon S3 URI nach der in der Anweisung verwendeten Manifestdatei zu filtern. Wenn Sie zuvor dieselbe Manifestdatei verwendet haben, filtern Sie die Ereignisse mithilfe des Felds timestamp.

select * from mysql.aurora_s3_load_history where load_prefix = 'S3_URI';

In der folgenden Tabelle werden die Felder der Tabelle aurora_s3_load_history beschrieben.

Feld Beschreibung

load_prefix

DieURI, die in der Load-Anweisung angegeben wurde. Dies URI kann einem der folgenden Werte zugeordnet werden:

  • Eine einzelne Datei für ein Statement LOAD DATA FROM S3 FILE

  • Ein Amazon S3-Präfix, das auf mehrere Dateien für eine LOAD DATA FROM S3 PREFIX-Anweisung verweist

  • Eine einzelne Manifestdatei, die die zu ladenden Namen der Dateien für ein Statement LOAD DATA FROM S3 MANIFEST enthält

file_name

Der Name einer Datei, die mithilfe der im load_prefix Feld angegebenen Daten von Amazon S3 URI in Aurora geladen wurde.

version_number

Die Versionsnummer der im Feld file_name bezeichneten Datei, die geladen wurde, wenn der Amazon S3-Bucket eine Versionsnummer hat.

bytes_loaded

Die Größe der geladenen Datei in Bytes.

load_timestamp

Der Zeitstempel, zu dem die Anweisung LOAD DATA FROM S3 abgeschlossen ist.

Beispiele

Mit folgender Anweisung werden Daten aus einem Amazon S3-Bucket geladen, der sich in derselben Region befindet wie der Aurora-DB-Cluster. Die Anweisung liest die kommagetrennten Daten in der Dateicustomerdata.txt, die sich in amzn-s3-demo-bucket Amazon S3 S3-Bucket und lädt dann die Daten in die Tabellestore-schema.customer-table.

LOAD DATA FROM S3 's3://amzn-s3-demo-bucket/customerdata.csv' INTO TABLE store-schema.customer-table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (ID, FIRSTNAME, LASTNAME, ADDRESS, EMAIL, PHONE);

Mit folgender Anweisung werden Daten aus einem Amazon S3-Bucket geladen, der sich in einer anderen Region befindet als der Aurora-DB-Cluster. Die Anweisung liest die kommagetrennten Daten aus allen Dateien, die dem Objektpräfix in der employee-data amzn-s3-demo-bucket Amazon S3 S3-Bucket in der us-west-2 Region und lädt dann die Daten in die employees Tabelle.

LOAD DATA FROM S3 PREFIX 's3-us-west-2://amzn-s3-demo-bucket/employee_data' INTO TABLE employees FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (ID, FIRSTNAME, LASTNAME, EMAIL, SALARY);

Die folgende Anweisung lädt Daten aus den Dateien, die in einer JSON Manifestdatei mit dem Namen q1_sales.json angegeben sind, in die Tabelle. sales

LOAD DATA FROM S3 MANIFEST 's3-us-west-2://amzn-s3-demo-bucket1/q1_sales.json' INTO TABLE sales FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (MONTH, STORE, GROSS, NET);

LOADXMLFROMS3

Sie können die LOAD XML FROM S3 Anweisung verwenden, um Daten aus XML Dateien, die in einem Amazon S3 S3-Bucket gespeichert sind, in einem von drei verschiedenen XML Formaten zu laden:

  • Spaltennamen als Attribute des Elements <row>. Der Attributwert bestimmt die Inhalte des Tabellenfeldes.

    <row column1="value1" column2="value2" .../>
  • Spaltennamen als untergeordnete Elemente des Elements <row>. Der Wert des untergeordneten Elements bestimmt die Inhalte des Tabellenfeldes.

    <row> <column1>value1</column1> <column2>value2</column2> </row>
  • Spaltennamen im Attribut name des Elements <field> im Element <row>. Der Wert des Elements <field> bestimmt die Inhalte des Tabellenfeldes.

    <row> <field name='column1'>value1</field> <field name='column2'>value2</field> </row>

Syntax

LOAD XML FROM S3 'S3-URI' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name,...)] [CHARACTER SET charset_name] [ROWS IDENTIFIED BY '<element-name>'] [IGNORE number {LINES | ROWS}] [(field_name_or_user_var,...)] [SET col_name = expr,...]

Parameter

Die Anweisung LOAD XML FROM S3 verwendet die folgenden erforderlichen und optionalen Parameter. Weitere Informationen zu einigen dieser Parameter finden Sie unter LOADXMLStatement in der SQL Dokumentation Meine Daten.

FILE | PREFIX

Gibt an, ob die Daten aus einer einzelnen Datei oder aus allen Dateien mit einem bestimmten Präfix geladen werden sollen. FILE ist der Standardwert.

REPLACE | IGNORE

Gibt an, welche Aktion ausgeführt werden soll, falls eine Eingabezeile die gleichen eindeutigen Schlüsselwerte aufweist wie eine vorhandene Zeile in der Datenbanktabelle.

  • Geben Sie REPLACE an, wenn die Eingabezeile die bestehende Zeile überschreiben soll.

  • Geben Sie IGNORE an, wenn Sie die Eingabezeile verwerfen möchten. IGNORE ist der Standardwert.

INTO TABLE

Gibt den Namen der Datenbanktabelle an, in welche die Eingabezeilen geladen werden sollen.

PARTITION

Gibt vor, dass alle Eingabezeilen in die Partitionen, die in der Liste mit durch Komma getrennten Partitionsnamen angegeben sind, eingefügt werden müssen. Lässt sich eine Eingabezeile nicht in eine der angegebenen Partitionen einfügen, schlägt die Anweisung fehl und eine Fehlermeldung wird zurückgegeben.

CHARACTER SET

Gibt den Zeichensatz der Daten in der Eingabedatei an.

ROWSIDENTIFIEDVON

Gibt den Elementnamen an, der eine Zeile in der Eingabedatei bestimmt. Der Standardwert ist <row>.

IGNORE number LINES | ROWS

Gibt an, dass eine bestimmte Anzahl an Zeilen am Anfang der Eingabedatei ignoriert werden sollen. Sie können es beispielsweise verwenden, IGNORE 1 LINES um die erste Zeile in der Textdatei IGNORE 2 ROWS zu überspringen oder um die ersten beiden Datenzeilen in der Eingabe zu überspringenXML.

field_name_or_user_var, ...

Gibt eine durch Kommas getrennte Liste mit einem oder mehreren XML Elementnamen oder Benutzervariablen an, die anhand des Namens angeben, welche Elemente geladen werden sollen. Der Name einer Benutzervariablen, die für diesen Zweck verwendet wird, muss mit dem Namen eines Elements aus der XML Datei übereinstimmen, dem das Präfix @ vorangestellt ist. Sie können Benutzervariablen einsetzen, um die entsprechenden Feldwerte für die spätere Wiederverwendung zu speichern.

Beispielsweise wird mit folgender Anweisung die erste Spalte aus der Eingabedatei in die erste Spalte von table1 geladen, zudem wird der Wert der Spalte table_column2 in table1 auf den Eingabewert der zweiten Spalte geteilt durch 100 gesetzt.

LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml' INTO TABLE table1 (column1, @var1) SET table_column2 = @var1/100;
SET

Gibt eine durch Komma getrennte Liste mit Zuweisungsvorgängen an, die die Werte von Spalten in der Tabelle auf Werte setzen, die nicht in der Eingabedatei enthalten sind.

Beispielsweise setzt die folgende Anweisung die ersten beiden Spalten von table1 auf die Werte in den ersten beiden Spalten aus der Eingabedatei und anschließend den Wert von column3 in table1 auf den aktuellen Zeitstempel.

LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml' INTO TABLE table1 (column1, column2) SET column3 = CURRENT_TIMESTAMP;

Auf der rechten Seite von SET-Zuweisungen können Sie Unterabfragen formulieren. Für eine Unterabfrage, die einen Wert zurückgibt, der einer Spalte zugewiesen werden soll, kommt ausschließlich eine skalare Unterabfrage infrage. Darüber hinaus können Sie mit einer Unterabfrage keine Daten aus der zu ladenden Tabelle auswählen.