Wie verwende ich den SUPER-Datentyp in Amazon Redshift, um JSON-Daten zu verarbeiten und abzufragen?
Ich möchte den SUPER-Datentyp in Amazon Redshift verwenden, um JSON-Daten zu verarbeiten und abzufragen.
Kurzbeschreibung
Verwende den Datentyp SUPER, um halbstrukturierte Daten in deinen Amazon Redshift Data Warehouses zu speichern. Du kannst den Datentyp SUPER mit der PartiQL-Sprache abfragen.
Du kannst auch Amazon Redshift Spectrum für die Unterstützung halbstrukturierter Daten verwenden.
Lösung
Du kannst entweder den COPY-Befehl oder den INSERT-Befehl mit der JSON_PARSE-Funktion verwenden, um JSON in SUPER-Daten zu laden. Wenn du große Datenmengen lädst, empfiehlt es sich, den Befehl COPY zu verwenden.
Befehl COPY verwenden
Verwende den Befehl COPY, um JSON aus Datendateien in Amazon Simple Storage Service (Amazon S3) zu laden. Weitere Informationen findest du unter Laden halbstrukturierter Daten in Amazon Redshift.
Verwende die Option noshred, um JSON in eine einzelne SUPER-Datenspalte zu laden.
Um JSON in mehrere Spalten zu laden, verwende die Option auto oder gib die Datei jsonpaths an. Wenn du die Option auto verwendest, ordnet COPY die JSON-Attribute der obersten Ebene den Spaltennamen zu und ermöglicht es dir, verschachtelte Werte als SUPER-Werte zu laden. Die folgenden Beispiele zeigen, wie die Option auto verwendet wird.
Beispiel für eine JSON-Datendatei:
{"r_regionkey":0,"r_name":"AFRICA","r_nations":[{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}]} {"r_regionkey":1,"r_name":"AMERICA","r_nations":[{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}]} {"r_regionkey":2,"r_name":"ASIA","r_nations":[{"n_nationkey":8,"n_name":"INDIA"}]}
Beispiel für einen COPY-Befehl:
# CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_nations super ); # COPY region_nations FROM 's3://<S3 path to the JSON data file>' IAM_ROLE '<IAM role>' FORMAT JSON 'auto'; # SELECT * FROM region_nations; r_regionkey | r_name | r_nations -------------+---------+------------------------------------------------------------------------------------------------------------------- 0 | AFRICA | [{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}] 1 | AMERICA | [{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}] 2 | ASIA | [{"n_nationkey":8,"n_name":"INDIA"}] (3 rows)
Lade die JSON-Daten in einer Text- oder CSV-Datei in SUPER. Vergewissere dich, dass die Daten ein gültiges JSON-Format haben. Amazon Redshift verwendet Standard-Escaping-Regeln für CSV-Dateien.
Beispiel für eine CSV-Datei:
r_regionkey,r_name,r_nations 0,AFRICA,"[{""n_nationkey"":11,""n_name"":""ALGERIA""},{""n_nationkey"":5,""n_name"":""ETHIOPIA""},{""n_nationkey"":14,""n_name"":""KENYA""}]" 1,AMERICA,"[{""n_nationkey"":1,""n_name"":""ARGENTINA""},{""n_nationkey"":2,""n_name"":""BRAZIL""}]" 2,ASIA,"[{""n_nationkey"":8,""n_name"":""INDIA""}]"
Beispiel für einen COPY-Befehl:
# CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_nations super ); # COPY region_nations FROM 's3://<S3 path to the CSV file>' IAM_ROLE '<IAM role>' FORMAT CSV IGNOREHEADER 1; # SELECT * FROM region_nations; r_regionkey | r_name | r_nations -------------+---------+------------------------------------------------------------------------------------------------------------------- 0 | AFRICA | [{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}] 1 | AMERICA | [{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}] 2 | ASIA | [{"n_nationkey":8,"n_name":"INDIA"}] (3 rows)
Verwende den INSERT-Befehl und die JSON_PARSE-Funktion
Die Funktion JSON_PARSE analysiert Daten im JSON-Format und wandelt sie in den SUPER-Datentyp um, den du mit dem INSERT-Befehl verwenden kannst.
Beispielbefehl:
# CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_nations super ); # INSERT INTO region_nations VALUES(0,'AFRICA',json_parse('[{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}]')); # INSERT INTO region_nations VALUES(1,'AMERICA',json_parse('[{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}]')); # INSERT INTO region_nations VALUES(2,'ASIA',json_parse('[{"n_nationkey":8,"n_name":"INDIA"}]')); # SELECT * FROM region_nations; r_regionkey | r_name | r_nations -------------+---------+------------------------------------------------------------------------------------------------------------------- 0 | AFRICA | [{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}] 1 | AMERICA | [{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}] 2 | ASIA | [{"n_nationkey":8,"n_name":"INDIA"}] (3 rows)
SUPER-Daten mit PartiQL abfragen
Amazon Redshift verwendet die Sprache PartiQL für den SQL-kompatiblen Zugriff auf relationale, halbstrukturierte und verschachtelte Daten. Weitere Informationen findest du unter Abfragen von halbstrukturierten Daten.
Beispielabfrage:
# SELECT * FROM region_nations; r_regionkey | r_name | r_nations -------------+---------+------------------------------------------------------------------------------------------------------------------- 0 | AFRICA | [{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}] 1 | AMERICA | [{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}] 2 | ASIA | [{"n_nationkey":8,"n_name":"INDIA"}] (3 rows) # SELECT region_nations.r_nations[1].n_name FROM region_nations; n_name ------------ "ETHIOPIA" "BRAZIL" (3 rows) # SELECT rn.r_regionkey, rn.r_name, n FROM region_nations rn, rn.r_nations n; r_regionkey | r_name | n -------------+---------+---------------------------------------- 0 | AFRICA | {"n_nationkey":11,"n_name":"ALGERIA"} 0 | AFRICA | {"n_nationkey":5,"n_name":"ETHIOPIA"} 0 | AFRICA | {"n_nationkey":14,"n_name":"KENYA"} 1 | AMERICA | {"n_nationkey":1,"n_name":"ARGENTINA"} 1 | AMERICA | {"n_nationkey":2,"n_name":"BRAZIL"} 2 | ASIA | {"n_nationkey":8,"n_name":"INDIA"} (6 rows)
SUPER-Daten in eine JSON-Datei entladen
Verwende den Befehl UNLOAD, um Daten aus dem SUPER-Datentyp zu extrahieren und in S3 als JSON-Dokument zu speichern.
Beispielbefehl:
# SELECT * FROM region_nations; r_regionkey | r_name | r_nations -------------+---------+------------------------------------------------------------------------------------------------------------------- 0 | AFRICA | [{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}] 1 | AMERICA | [{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}] 2 | ASIA | [{"n_nationkey":8,"n_name":"INDIA"}] (3 rows) # UNLOAD ('SELECT * FROM region_nations') TO 's3://<S3 path>' IAM_ROLE '<IAM role>' FORMAT JSON;
Beispiel für ein JSON-Dokument:
{"r_regionkey":0,"r_name":"AFRICA","r_nations":[{"n_nationkey":11,"n_name":"ALGERIA"},{"n_nationkey":5,"n_name":"ETHIOPIA"},{"n_nationkey":14,"n_name":"KENYA"}]} {"r_regionkey":1,"r_name":"AMERICA","r_nations":[{"n_nationkey":1,"n_name":"ARGENTINA"},{"n_nationkey":2,"n_name":"BRAZIL"}]} {"r_regionkey":2,"r_name":"ASIA","r_nations":[{"n_nationkey":8,"n_name":"INDIA"}]}
- Themen
- Analytics
- Tags
- Amazon Redshift
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr