Laden von halbstrukturierten Daten in Amazon Redshift - Amazon Redshift

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 halbstrukturierten Daten in Amazon Redshift

Verwenden Sie den SUPER Datentyp, um hierarchische und generische Daten in Amazon Redshift beizubehalten und abzufragen. Amazon Redshift führt die json_parse Funktion ein, um Daten im JSON Format zu analysieren und in die SUPER Darstellung zu konvertieren. Amazon Redshift unterstützt auch das Laden von SUPER Spalten mithilfe des COPY Befehls. Die unterstützten Dateiformate sind AvroJSON, Text, Format mit kommagetrennten Werten (CSV), Parquet und. ORC

Informationen zu den Tabellen, die in den folgenden Beispielen verwendet werden, finden Sie unter SUPERBeispieldatensatz.

Informationen zur Funktion json_parse finden Sie unter JSONPARSEFunktion _.

Die Standardkodierung für den SUPER Datentyp ist. ZSTD

JSONDokumente in Spalten zerlegen SUPER

Mit der json_parse Funktion können Sie JSON Daten in eine SUPER Spalte einfügen oder aktualisieren. Die Funktion analysiert Daten im JSON Format und konvertiert sie in den SUPER Datentyp, den Sie in INSERT UPDATE OR-Anweisungen verwenden können.

Im folgenden Beispiel JSON werden Daten in eine SUPER Spalte eingefügt. Wenn die json_parse Funktion in der Abfrage fehlt, behandelt Amazon Redshift den Wert als eine einzelne Zeichenfolge und nicht als JSON -formatierte Zeichenfolge, die analysiert werden muss.

Wenn Sie eine SUPER Datenspalte aktualisieren, verlangt Amazon Redshift, dass das gesamte Dokument an die Spaltenwerte übergeben wird. Amazon Redshift unterstützt keine teilweisen Aktualisierungen.

INSERT INTO region_nations VALUES(0, 'lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to', 'AFRICA', JSON_PARSE('{"r_nations":[ {"n_comment":" haggle. carefully final deposits detect slyly agai", "n_nationkey":0, "n_name":"ALGERIA" }, {"n_comment":"ven packages wake quickly. regu", "n_nationkey":5, "n_name":"ETHIOPIA" }, {"n_comment":" pending excuses haggle furiously deposits. pending, express pinto beans wake fluffily past t", "n_nationkey":14, "n_name":"KENYA" }, {"n_comment":"rns. blithely bold courts among the closely regular packages use furiously bold platelets?", "n_nationkey":15, "n_name":"MOROCCO" }, {"n_comment":"s. ironic, unusual asymptotes wake blithely r", "n_nationkey":16, "n_name":"MOZAMBIQUE" } ] }'));

Verwenden COPY zum Laden von SUPER Spalten in Amazon Redshift

In den folgenden Abschnitten erfahren Sie mehr über verschiedene Möglichkeiten, den COPY Befehl zum Laden von JSON Daten in Amazon Redshift zu verwenden.

Daten von JSON und Avro kopieren

Durch die Verwendung der Unterstützung semistrukturierter Daten in Amazon Redshift können Sie ein JSON Dokument laden, ohne die Attribute seiner JSON Strukturen in mehrere Spalten aufteilen zu müssen.

Amazon Redshift bietet zwei Methoden für die Aufnahme von JSON DokumentenCOPY, selbst mit einer JSON Struktur, die ganz oder teilweise unbekannt ist:

  1. Speichern Sie die aus einem JSON Dokument stammenden Daten mithilfe der Option in einer einzigen SUPER Datenspalte. noshred Diese Methode ist nützlich, wenn das Schema nicht bekannt ist oder voraussichtlich geändert wird. Somit macht es diese Methode einfacher, das gesamte Tupel in einer einzigen SUPER Spalte zu speichern.

  2. Zerkleinern Sie das JSON Dokument mit der Option auto oder jsonpaths in mehrere Amazon Redshift Redshift-Spalten. Bei Attributen kann es sich um Amazon Redshift Redshift-Skalare oder Werte handelnSUPER.

Sie können diese Optionen mit den Formaten JSON oder Avro verwenden.

Die maximale Größe eines JSON Objekts vor dem Vernichten beträgt 4 MB.

Ein JSON Dokument in eine einzelne SUPER Datenspalte kopieren

Um ein JSON Dokument in eine einzelne SUPER Datenspalte zu kopieren, 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 noshred Option in der FORMAT JSON Klausel 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 die Daten COPY erfolgreich aufgenommen wurdenJSON, enthält Ihre Tabelle 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 durch JDBC JSON Serialisierung als Zeichenfolge zugänglich. Weitere Informationen finden Sie unter Serialisierung komplexer, verschachtelter JSON.

Ein JSON Dokument in mehrere SUPER Datenspalten kopieren

Sie können ein JSON Dokument in mehrere Spalten zerlegen, bei denen es sich entweder um SUPER Datenspalten oder Amazon Redshift Redshift-Skalartypen handeln kann. Amazon Redshift verteilt verschiedene Teile des JSON Objekts auf verschiedene Spalten.

CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );

Um die Daten des vorherigen Beispiels in die Tabelle zu kopieren, geben Sie in der FORMAT JSON Klausel die AUTO Option an, den JSON Wert auf mehrere Spalten aufzuteilen. COPYordnet die JSON Attribute der obersten Ebene den Spaltennamen zu und ermöglicht die Aufnahme verschachtelter Werte als SUPER Werte, wie z. B. JSON Arrays und Objekte.

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 in gemischten Groß- und Kleinbuchstaben vorkommen, geben Sie die auto ignorecase Option in der Klausel an. FORMAT JSON Weitere Hinweise zu dem COPY Befehl finden Sie unterAus JSON Daten mit der Option „Fall auto ignorieren“ laden.

In einigen Fällen stimmen Spaltennamen und JSON Attributen nicht überein, oder das zu ladende Attribut ist mehr als eine Ebene verschachtelt. Falls ja, verwenden Sie eine jsonpaths Datei, um JSON Attribute manuell Amazon Redshift-Spalten zuzuordnen.

CREATE TABLE nations ( regionkey smallint ,name varchar ,comment super ,nations super );

Angenommen, Sie möchten Daten in eine Tabelle laden, in der die Spaltennamen nicht mit den JSON Attributen übereinstimmen. Im folgenden Beispiel ist das bei der Tabelle nations der Fall. Sie können eine jsonpaths-Datei erstellen, die die Pfade von Attributen den Tabellenspalten anhand ihrer Position im jsonpaths-Array zuordnet.

{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] }

Der Speicherort der jsonpaths Datei wird als Argument für verwendet FORMATJSON.

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 gedruckt.

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 gleichzeitig das gesamte Dokument als SUPER Spalte laden. Die folgende Abfrage lädt das vollständige Dokument in die Spalte „nations“. Die Spalte name ist der Sortierschlüssel und die Spalte regionkey ist der Verteilungsschlüssel.

CREATE TABLE nations_sorted ( regionkey smallint, name varchar, nations super ) DISTKEY(regionkey) SORTKEY(name);

Der Root-jsonpath „$“ wird dem Root des Dokuments wie folgt zugeordnet:

{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }

Der Speicherort der Jsonpaths-Datei wird als Argument für verwendet. FORMAT JSON

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';

Daten aus Text kopieren und CSV

Amazon Redshift stellt SUPER Spalten in Text und CSV Formaten als JSON serialisiert dar. Damit SUPER Spalten mit den richtigen Typinformationen geladen werden können, ist eine gültige JSON Formatierung erforderlich. Verwenden Sie Unquote für Objekte, Arrays, Zahlen, Boolesche Werte und Nullwerte. Setzen Sie Zeichenfolgenwerte in doppelte Anführungszeichen. SUPERSpalten verwenden Standard-Escape-Regeln für Text und CSV Formate. Für CSV werden Trennzeichen gemäß dem Standard maskiert. CSV Wenn das gewählte Trennzeichen für Text auch in einem SUPER Feld vorkommen könnte, verwenden Sie die ESCAPE Option während und. COPY UNLOAD

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;
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;

Daten aus Parquet im Spaltenformat kopieren und ORC

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

Die Amazon Redshift Redshift-Tabellenstruktur sollte der Anzahl der Spalten und den Spaltendatentypen des Parquet oder der ORC Dateien entsprechen. Durch Angabe SERIALIZETOJSON im COPY Befehl können Sie jeden Spaltentyp in die Datei laden, der mit einer SUPER Spalte in der Tabelle übereinstimmt als. SUPER Dazu gehören Struktur- und Array-Typen.

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 eingegeben sindORC, konvertiert Amazon Redshift sie beim Codieren in Varchar. SUPER