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

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

Ab Amazon Aurora MySQL-Version 1.8 und neuer können auch Daten aus Textdateien, die sich in einem Amazon S3-Bucket befinden, in eine Tabelle geladen werden. Weitere Informationen zu den Aurora MySQL-Versionen erhalten Sie unter Datenbank-Engine-Updates für Amazon Aurora MySQL.

Diese Funktion ist derzeit nicht für Aurora Serverless-Cluster verfügbar.

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.

  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. Setzen Sie den DB-Cluster-Parameter aurora_load_from_s3_role oder aws_default_s3_role auf den Amazon-Ressourcennamen (ARN) der neuen IAM-Rolle. Wenn für aurora_load_from_s3_role keine IAM-Rolle angegeben wird, verwendet Aurora die unter aws_default_s3_role angegebene IAM-Rolle.

    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.

    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, von dem Anweisung LOAD DATA FROM S3 oder LOAD XML FROM S3 stammt, muss über die Berechtigung LOAD FROM S3 verfügen. Dem Hauptbenutzernamen für ein DB-Cluster wird das Sonderrecht LOAD FROM S3 standardmäßig erteilt. Sie können das Sonderrecht für einen anderen Benutzer mithilfe des folgenden Statements erteilen.

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

Das Sonderrecht LOAD FROM S3 ist Amazon Aurora-spezifisch und für MySQL-Datenbanken oder RDS-MySQL-DB-Instances nicht verfügbar. Wenn Sie eine Replikation zwischen dem Aurora-DB-Cluster, als dem Replikations-Master, und einer MySQL-Datenbank, als Replikations-Client, eingerichtet haben, dann beendet die Anweisung GRANT LOAD FROM S3 die Replikation mit einer Fehlermeldung. 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 RDS-MySQL-DB-Instance zu überspringen. Um den Fehler auf einer MySQL-Datenbank zu übergehen, verwenden Sie die Anweisung SET GLOBAL sql_slave_skip_counter .

Angeben eines Pfades zu einem Amazon S3-Bucket

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

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

Der Pfad enthält die folgenden Werte:

  • region (optional) – (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.

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.

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,...]

Parameter

Nachfolgend finden Sie eine Liste der erforderlichen und optionalen Parameter für die Anweisung LOAD DATA FROM S3. Weitere Informationen zu einigen der Parameter finden Sie unter LOAD DATA INFILE Syntax in der MySQL-Dokumentation.

  • FILE | PREFIX | MANIFEST – Gibt an, ob 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 Angeben eines Pfades zu einem Amazon S3-Bucket beschriebenen Syntax fest.

  • REPLACE | IGNORE – Gibt an, welche Aktion ausgeführt werden soll, falls eine Eingabezeile dieselben 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, wie viele 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 in einer durch Kommata getrennte Liste mit einem oder mehreren Spaltennamen oder durch Benutzervariablen die Namen der zu ladenden Spalten an. 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 Kommata 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. Sie müssen Aurora-Version 1.11 oder neuer verwenden, damit Sie das Schlüsselwort MANIFEST mit der Anweisung LOAD DATA FROM S3 einsetzen können.

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

Nachfolgend finden Sie eine Liste der erforderlichen und optionalen Parameter für die Anweisung LOAD DATA FROM S3. Weitere Informationen zu einigen der Parameter finden Sie unter LOAD XML Syntax in der MySQL-Dokumentation.

  • FILE | PREFIX – Gibt an, ob 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 dieselben 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, wie viele 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 in einer durch Kommata getrennte Liste mit einem oder mehreren XML-Element-Namen oder durch Benutzervariablen die Namen der zu ladenden Elemente an. 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 Kommata 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. Des Weiteren können Sie mit einer Unterabfrage keine Daten aus der zu ladenden Tabelle auswählen.

Verwandte Themen