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
Themen
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
oderjsonpaths
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
auto
jsonpaths
, 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:
Erstellen Sie eine Tabelle mit einer einzigen SUPER-Datenspalte.
CREATE TABLE region_nations_noshred (rdata SUPER);
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
rdata
SUPER-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.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:
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 );
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:
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 );
-
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 imjsonpaths
Array zuordnet, wie im Folgenden dargestellt:{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] }
-
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';
-
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;
jsonpaths
Dateien 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:
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);
Ordnen Sie den Root-JSON-Pfad „$“ wie folgt dem Stammverzeichnis des Dokuments zu:
{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }
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.