Presto unnest json
folgende Frage: wie cross join unnest ein json-array in presto
Ich habe versucht zu laufen, das Beispiel aber
Ich bekommen und Fehler dabei
den SQL-Befehl:
select x.n
from
unnest(cast(json_extract('{"payload":[{"type":"b","value":"9"},
{"type":"a","value":"8"}]}','$.payload') as array<varchar>)) as x(n)
die Fehler, die ich bekam:
Value cannot be cast to array<varchar>
java.lang.RuntimeException: java.lang.NullPointerException: string is null
Du musst angemeldet sein, um einen Kommentar abzugeben.
SELECT JSON_EXTRACT('{"payload":[{"type":"b","value":"9"}, {"type":"a","value":"8"}]}','$.payload')
gibt:
[{"type":"b","value":"9"}, {"type":"a","value":"8"}]
ist
ARRAY<MAP<VARCHAR,VARCHAR>>
.Sie können ändern Sie Ihre Abfrage:
SELECT x.n
FROM
UNNEST (CAST(JSON_EXTRACT('{"payload":[{"type":"b","value":"9"},{"type":"a","value":"8"}]}','$.payload') AS ARRAY<MAP<VARCHAR, VARCHAR>>)) AS x(n)
Eine mögliche interpretation der Rückgabe-Datentyp ist folgende:
aber den Nachteil hat, dass der Zugriff auf Werte in einer Karte können nicht direkt über die Punkt-notation.
Alternative Datentyp zu übernehmen, wäre dies:
ARRAY(ROW(type VARCHAR, value VARCHAR))
Ähnelt
ARRAY<STRUCT<
Hive-Datentyp entspricht.Massive Exkurs hier>> JSON ist ein bisschen zweideutig.
Welches ist das richtige? Ein JSON-Objekt ist eine Darstellung einer Landkarte ( hashmap, dictionary, key-value-Paare, was auch immer Ihre Sprache nennt) oder ist es mehr wie ein struct-Objekt (Objekt, Klasse, eine Tasche von Namen von Eigenschaften, was auch immer Ihre Sprache nennt)? Es stammt aus der JavaScript-Objekt-Notation) soll gerecht für arrays, Objekte und primitive Typen, aber weiter verbreitete Verwendung bedeutet, dass es mehrdeutige Zuordnung (ha) in anderen Sprachen. Vielleicht funktionell gleichwertig, aber in der Theorie der
MAP
sollte schneller für random reads/writes und dieROW
wahrscheinlich noch einige zusätzliche objektorientierten overhead, aber das ist alles in Java implementiert, wo alles ist ein Objekt, das sowieso, so dass ich keine Antwort habe. Verwenden Sie, was Sie möchten. << ich schweife ab.Sie fand das ein bisschen ausführlich:
Hier ist die alternative
Es ist nur so ausführlich; die Namen der Spalten sind nur verschoben, um die CAST-Ausdruck, aber vielleicht (subjektiv!) einfacher zu betrachten ist.
Können Sie JSON_EXTRACT,der BESETZUNG und schließlich UNNEST zu jeweiligen Spalten
gibt die Ausgabe wie unten