Verwenden von COPY zum Laden von Daten in SUPER-Spalten - Amazon Redshift

Amazon Redshift wird UDFs ab dem 1. November 2025 die Erstellung von neuem Python nicht mehr unterstützen. Wenn Sie Python verwenden möchten UDFs, erstellen Sie das UDFs vor diesem Datum liegende. Bestehendes Python UDFs wird weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie im Blogbeitrag.

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.

Verwenden von COPY zum Laden von Daten in SUPER-Spalten

In den folgenden Abschnitten erfahren Sie, wie Sie den Befehl COPY verwenden können, um JSON-Daten in Amazon Redshift zu laden. Informationen zu den Datenformatparametern, die Amazon Redshift verwendet, um JSON in COPY-Befehlen zu analysieren, finden Sie in der JSON format for COPY Parameterbeschreibung unter. Datenformatparameter

Kopieren von Daten aus JSON und Avro

Amazon Redshift bietet die folgenden Methoden, um ein JSON-Dokument mithilfe von COPY aufzunehmen, auch wenn die JSON-Struktur vollständig oder teilweise unbekannt ist:

  • Speichern Sie die Daten, die aus einem JSON-Dokument abgeleitet werden, in einer einzelnen SUPER-Datenspalte mit der noshred-Option. Diese Methode ist nützlich, wenn das Schema nicht bekannt ist oder voraussichtlich geändert wird. Daher erleichtert diese Methode das Speichern des gesamten Tupels in einer einzigen SUPER-Spalte.

  • Teilen Sie das JSON-Dokument mit der Option auto oder jsonpaths in mehrere Amazon-Redshift-Spalten auf. Attribute können Amazon-Redshift-Skalare oder SUPER-Werte sein.

Sie können diese Optionen mit den Formaten JSON oder Avro verwenden. Weitere Informationen zu JSON-Optionen wie noshred autojsonpaths, und finden Sie unter. JSON format for COPY

Die maximale Größe für ein JSON-Objekt in Amazon Redshift beträgt 4 MB, was vor dem Shreddern oder Parsen gilt.

Methode 1: Kopieren eines JSON-Dokuments in eine einzelne SUPER-Datenspalte mit noshred

Mit der noshred Option im Befehl COPY können Sie ganze JSON-Dokumente in einzelne SUPER-Datenspalten kopieren. Betrachten Sie das folgende Beispiel:

  1. Erstellen Sie eine Tabelle mit einer einzigen SUPER-Datenspalte.

    CREATE TABLE region_nations_noshred (rdata SUPER);
  2. Kopieren Sie die Daten aus Amazon S3 in die einzelne SUPER-Datenspalte. Um die JSON-Quelldaten in eine einzelne SUPER-Datenspalte aufzunehmen, geben Sie die Option noshred in der Klausel FORMAT JSON an.

    COPY region_nations_noshred FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'noshred';

    Nachdem COPY die JSON-Daten erfolgreich aufgenommen hat, verfügt Ihre Tabelle über eine rdataSUPER-Datenspalte, die die Daten des gesamten JSON-Objekts enthält. Die aufgenommenen Daten behalten alle Eigenschaften der JSON-Hierarchie bei. Für eine effiziente Abfrageverarbeitung werden die Blätter jedoch in skalare Amazon-Redshift-Typen konvertiert.

  3. Verwenden Sie die folgende Abfrage, um die ursprüngliche JSON-Zeichenfolge abzurufen.

    SELECT rdata FROM region_nations_noshred;

    Wenn Amazon Redshift eine SUPER-Datenspalte generiert, wird sie mithilfe von JDBC als Zeichenfolge über die JSON-Serialisierung zugänglich. Weitere Informationen finden Sie unter Serialisieren komplexer verschachtelter JSON-Datentypen.

Methode 2: Kopieren eines JSON-Dokuments in mehrere SUPER-Datenspalten

Sie können ein JSON-Dokument in mehrere Spalten aufteilen, die entweder SUPER-Datenspalten oder Amazon-Redshift-Skalartypen sein können. Amazon Redshift verteilt verschiedene Teile des JSON-Objekts auf verschiedene Spalten. Betrachten Sie das folgende Beispiel:

  1. Erstellen Sie eine Tabelle mit mehreren Spalten, um das geschredderte JSON aufzunehmen.

    CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
  2. Um JSON in die region_nations Tabelle zu kopieren, geben Sie die Option AUTO in der FORMAT JSON-Klausel an, um den JSON-Wert auf mehrere Spalten aufzuteilen. COPY ordnet die JSON-Attribute der obersten Ebene mit Spaltennamen zu und ermöglicht, dass verschachtelte Werte als SUPER-Werte wie JSON-Arrays und -Objekte aufgenommen werden können.

    COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'auto';

    Wenn die JSON-Attributnamen gemischte Groß- und Kleinschreibung enthalten, geben Sie die Option auto ignorecase in der Klausel FORMAT JSON an. Weitere Informationen zur Verwendung des COPY-Befehls finden Sie unter Laden von JSON-Daten unter Verwendung der Option „auto ignorecase“.

In einigen Fällen gibt es eine Diskrepanz zwischen Spaltennamen und JSON-Attributen oder das zu ladende Attribut ist mehr als eine Ebene tief verschachtelt. Wenn ja, verwenden Sie eine jsonpaths-Datei, um JSON-Attribute manuell Amazon-Redshift-Spalten zuzuordnen. Betrachten Sie das folgende Beispiel:

  1. Erstellen Sie eine Tabelle mit mehreren Spalten, um das geschredderte JSON aufzunehmen.

    CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
  2. In diesem Fall stimmen die Spaltennamen nicht mit den JSON-Attributen überein. Sie können eine jsonpaths Datei erstellen, die die Pfade der Attribute den Tabellenspalten anhand ihrer Position im jsonpaths Array zuordnet, wie im Folgenden dargestellt:

    {"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] }
  3. Verwenden Sie den Speicherort der jsonpaths Datei als Argument für die JSON-Option FORMAT in COPY.

    COPY nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_jsonpaths.json';
  4. Verwenden Sie die folgende Abfrage, um auf die Tabelle zuzugreifen, die die Datenverteilung auf mehrere Spalten anzeigt. Die SUPER-Datenspalten werden im JSON-Format ausgegeben.

    SELECT r_regionkey,r_name,r_comment,r_nations[0].n_nationkey FROM region_nations ORDER BY 1,2,3 LIMIT 1;

jsonpathsDateien ordnen Felder im JSON-Dokument Tabellenspalten zu. Sie können zusätzliche Spalten, wie Verteilungs- und Sortierschlüssel, extrahieren und dabei zugleich das gesamte Dokument als SUPER-Spalte laden. Die folgende Abfrage lädt das komplette Dokument in die nations Spalte. Die Spalte name ist der Sortierschlüssel und die Spalte regionkey ist der Verteilungsschlüssel. Betrachten Sie das folgende Beispiel:

  1. Erstellen Sie eine Tabelle mit mehreren Spalten für das geschredderte JSON.

    CREATE TABLE nations_sorted ( regionkey smallint, name varchar, nations super ) DISTKEY(regionkey) SORTKEY(name);
  2. Ordnen Sie den Root-JSON-Pfad „$“ wie folgt dem Stammverzeichnis des Dokuments zu:

    {"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }
  3. Verwenden Sie den Speicherort der jsonpaths Datei als Argument für die JSON-Option FORMAT in COPY.

    COPY nations_sorted FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_sorted_jsonpaths.json';

Weitere Informationen zur Verwendung finden jsonpaths Sie unterCOPY von JSON-Format.

Kopieren von Daten aus Text und CSV

Amazon Redshift stellt SUPER-Spalten in Text- und CSV-Formaten als serialisiertes JSON dar. Eine gültige JSON-Formatierung ist erforderlich, damit SUPER-Spalten mit den korrekten Typinformationen geladen werden. Verwenden Sie Unquote für Objekte, Arrays, Zahlen, Boolesche Werte und Nullwerte. Setzen Sie Zeichenfolgenwerte in doppelte Anführungszeichen. SUPER-Spalten verwenden Standard-Escape-Zeichenregeln für Text- und CSV-Formate.

Beim Kopieren aus CSV werden Trennzeichen gemäß dem CSV-Standard maskiert. Betrachten Sie das folgende Beispiel:

CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/csv/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT CSV;

Wenn beim Kopieren aus Text das gewählte Trennzeichen möglicherweise auch in einem SUPER-Feld vorkommt, verwenden Sie die ESCAPE-Option während COPY und UNLOAD. Betrachten Sie das folgende Beispiel:

CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/text/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' DELIMITER ',' ESCAPE;

Kopieren von Daten aus dem Spaltenformat Parquet und ORC

Wenn Ihre halbstrukturierten oder verschachtelten Daten bereits im Apache Parquet- oder Apache ORC-Format verfügbar sind, können Sie den Befehl COPY verwenden, um Daten in Amazon Redshift aufzunehmen.

Die Amazon-Redshift-Tabellenstruktur sollte mit der Anzahl der Spalten und den Spaltendatentypen der Parquet- oder ORC-Dateien übereinstimmen. Indem Sie SERIALIZETOJSON im Befehl COPY angeben, können Sie jeden Spaltentyp in der Datei laden, der einer SUPER-Spalte in der Tabelle zugeordnet ist. Dazu gehören Struktur- und Array-Typen.

Das folgende Beispiel verwendet ein Parquet-Format:

COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/parquet/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT PARQUET SERIALIZETOJSON;

Im folgenden Beispiel wird ein ORC-Format verwendet.

COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/orc/region_nation' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT ORC SERIALIZETOJSON;

Wenn die Attribute der Datentypen Datum oder Uhrzeit in ORC enthalten sind, konvertiert Amazon Redshift sie nach der Kodierung in SUPER zu varchar.