Laden von Daten in einen Amazon Aurora MySQL-DB-Cluster aus Textdateien in einem Amazon S3-Bucket - 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.

Laden von Daten in einen Amazon Aurora MySQL-DB-Cluster aus Textdateien in einem Amazon S3-Bucket

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.

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 MySQL-DB-Cluster die Berechtigung für den Zugriff auf Amazon S3 erteilen.

So gewähren Sie Aurora MySQL Zugriff auf Amazon S3:
  1. Erstellen Sie eine AWS Identity and Access Management-(IAM)-Richtlinie, die die Bucket- und Objektberechtigungen bereitstellt, die Ihrem Aurora-MySQL-DB-Cluster gestatten, auf Amazon S3 zuzugreifen. Detaillierte Anweisungen finden Sie unter Erstellen einer IAM-Zugriffsrichtlinie für Amazon S3-Ressourcen.

    Anmerkung

    In Aurora MySQL Version 3.05 und höher können Sie Objekte laden, die mit vom Kunden verwalteten AWS KMS keys verschlüsselt sind. Nehmen Sie dazu die Berechtigung kms:Decrypt in Ihre IAM-Richtlinie auf. Weitere Informationen finden Sie unter Erstellen einer IAM-Zugriffsrichtlinie für AWS KMS-Ressourcen.

    Zum Laden von Objekten, die mit Von AWS verwaltete Schlüssel oder von Amazon S3 verwalteten Schlüsseln (SSE-S3) verschlüsselt sind, benötigen Sie diese Berechtigung nicht.

  2. Erstellen Sie eine IAM-Rolle und fügen Sie der neuen IAM-Rolle die IAM-Richtlinie hinzu, die Sie in Erstellen einer IAM-Zugriffsrichtlinie für Amazon S3-Ressourcen erstellt haben. 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 Erstellen einer DB-Cluster-Parametergruppe.

  4. Legen Sie in Aurora MySQL Version 2 einen der DB-Cluster-Parameter aurora_load_from_s3_role oder aws_default_s3_role auf den Amazon-Ressourcennamen (ARN) der neuen IAM-Rolle fest. Wenn für aurora_load_from_s3_role keine IAM-Rolle angegeben wird, verwendet Aurora die unter aws_default_s3_role angegebene IAM-Rolle.

    Verwenden Sie aws_default_s3_role in Aurora MySQL 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. Weisen Sie die Rolle, die Sie in Erstellen einer IAM-Rolle, um Amazon Aurora den Zugriff auf AWS-Services zu erlauben erstellt haben, diesem DB-Cluster zu, um Datenbankbenutzern in einem Aurora MySQL DB-Cluster den Zugriff auf Amazon S3 zu erlauben. Bei einer globalen Aurora-Datenbank verknüpfen Sie die Rolle mit jedem Aurora-Cluster in der globalen Datenbank. Weitere Informationen zum Zuordnen einer IAM-Rolle zu einem DB-Cluster finden Sie unter Zuweisen einer IAM-Rolle zu einem Amazon-Aurora-MySQL-DB-Cluster.

  6. Konfigurieren Sie Ihren Aurora MySQL-DB-Cluster so, dass er ausgehende Verbindungen zu Amazon S3 zulässt. Detaillierte Anweisungen finden Sie unter Aktivieren der Netzwerkkommunikation von Amazon Aurora MySQL zu anderen AWS-Services.

    Wenn Ihr -DB-Cluster nicht öffentlich zugänglich ist und sich nicht in einem öffentlichen VPC-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 Berechtigungen für das Laden von Daten in Amazon Aurora MySQL

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 MySQL Version 3 gewähren Sie die Rolle AWS_LOAD_S3_ACCESS. In Aurora MySQL Version 2 gewähren Sie die Berechtigung LOAD FROM S3. 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 MySQL Version 3:

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

Wenn Sie die Rollentechnik in Aurora MySQL Version 3 verwenden, können Sie die Rolle auch mit der Anweisung SET ROLE role_name oder SET ROLE ALL aktivieren. Wenn Sie mit dem MySQL 8.0-Rollensystem nicht vertraut sind, finden Sie in Rollenbasiertes Berechtigungsmodell weitere Informationen. Weitere Informationen finden Sie unter Using roles im MySQL-Referenzhandbuch.

Dies gilt nur für die aktuelle aktive Sitzung. Wenn Sie sich wieder verbinden, müssen Sie die SET ROLE-Anweisung noch einmal ausführen, um Berechtigungen zu gewähren. Weitere Informationen finden Sie unter SET ROLE-Anweisung im MySQL-Referenzhandbuch.

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 festgelegt ist, müssen Sie die SET ROLE-Anweisung nicht explizit aufrufen, um eine Rolle zu aktivieren. Weitere Informationen finden Sie unter activate_all_roles_on_login im MySQL-Referenzhandbuch.

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

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

Die Rolle AWS_LOAD_S3_ACCESS und die Berechtigung LOAD FROM S3 sind spezifisch für Amazon Aurora und nicht für externe MySQL-Datenbanken oder DB-Instances von RDS für MySQL verfügbar. Wenn Sie die Replikation zwischen einem Aurora-DB-Cluster als Haupt-Replikation und einer MySQL-Datenbank als Replikations-Client eingerichtet haben, führt die GRANT-Anweisung für die Rolle oder Berechtigung dazu, dass die Replikation mit einem Fehler beendet wird. Sie können diese Fehlermeldung ignorieren und mit der Replikation fortfahren. Verwenden Sie das Verfahren mysql_rds_skip_repl_error, um die Fehlermeldung für eine Instance von RDS für MySQL zu überspringen. Um den Fehler in einer externen MySQL-Datenbank zu überspringen, verwenden Sie die Systemvariable slave_skip_errors (Aurora MySQL Version 2) oder die Systemvariable replica_skip_errors (Aurora MySQL Version 3).

Angeben des Pfads (URI) zu einem Amazon-S3-Bucket

Mit folgender Syntax wird der Pfad (URI) zu Dateien angegeben, die in einem Amazon-S3-Bucket gespeichert sind.

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

Der Pfad enthält die folgenden Werte:

  • region (optional) – Die AWS-Region mit dem Amazon-S3-Bucket, aus dem Daten geladen werden sollen. 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-Textdatei oder XML-Datei oder ein Präfix, das eine oder mehrere Text- oder XML-Dateien zum Laden bestimmt. 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.

So kopieren Sie den URI für Dateien in einem S3-Bucket
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie im Navigationsbereich Buckets und dann den Bucket aus, dessen 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 aus.

LOAD DATA FROM S3

Mit der Anweisung LOAD DATA FROM S3 können Sie Daten in jedem Textdateiformat laden, das von der MySQL-Anweisung LOAD DATA INFILE unterstützt wird (z. B. durch Komma-getrennte Textdaten). Komprimierte Dateien werden nicht unterstützt.

Anmerkung

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

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 MySQL Version 3.05 und höher ist das Schlüsselwort FROM optional.

Parameter

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

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.

S3-URI

Gibt den URI der zu ladenden Text- oder Manifestdatei oder das zu verwendende Amazon-S3-Präfix an. Legen Sie den URI mithilfe der unter beschriebenen Syntax fes Angeben des Pfads (URI) zu einem Amazon-S3-Bucket.

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://mybucket/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://mybucket/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 mit der Anweisung LOAD DATA FROM S3 und dem Schlüsselwort MANIFEST eine Manifestdatei im JSON-Format angeben, in der die Textdateien aufgeführt sind, die in eine Tabelle im 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" }

Jeder url-Wert im Manifest muss eine URL mit dem Bucket-Namen und dem vollständigen Objektpfad zur Datei angeben (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. Falls in der URL keine Region angegeben ist, wird die Region des Ziel-DB-Clusters in Aurora 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 anzuzeigen, die aus einer Iteration der Anweisung geladen wurden, verwenden Sie die Klausel WHERE, um die Datensätze auf dem Amazon S3-URI für die in der Anweisung verwendete 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

Der URI, der in der Load-Anweisung angegeben wurde. Dieser URI kann alle der folgenden Elemente abbilden:

  • 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 der Datei, die – mithilfe des im Feld load_prefix angegebenen URI – aus Amazon S3 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 durch Kommata getrennten Daten der Datei customerdata.txt im dbbucket Amazon S3-Bucket und lädt dann diese Daten in die Tabelle store-schema.customer-table.

LOAD DATA FROM S3 's3://dbbucket/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 durch Kommata getrennten Daten aller Dateien, die mit dem Objektpräfix employee-data im my-data Amazon S3-Bucket in der Region us-west-2 übereinstimmen, und lädt dann diese Daten in die Tabelle employees.

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

Mit folgender Anweisung werden Daten aus Dateien, die in einer JSON-Manifestdatei mit dem Namen "q1_sales.json" angegeben sind, in die Tabelle sales geladen.

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

LOAD XML FROM S3

Mit der Anweisung LOAD XML FROM S3 können Sie Daten aus XML-Dateien, die in einem Amazon S3-Bucket gespeichert sind, in drei verschiedenen XML-Formaten 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 der Parameter finden Sie unter LOAD XML-Anweisung in der MySQL-Dokumentation.

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.

ROWS IDENTIFIED BY

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 beispielsweise mit IGNORE 1 LINES die erste Zeile in der Textdatei überspringen oder mit IGNORE 2 ROWS die ersten beiden Datenzeilen der XML-Eingabedatei auslassen.

field_name_or_user_var, ...

Gibt eine durch Komma getrennte Liste mit einem oder mehreren XML-Elementnamen bzw. einer oder mehreren Benutzervariablen an, die die Namen der zu ladenden Elemente identifizieren. Der Name einer Benutzervariable, die für diesen Zweck verwendet wird, muss mit dem Namen eines Elements aus der XML-Datei ü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 XML FROM S3 's3://mybucket/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://mybucket/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.