Datafusion-Funktionen JSON
v0.43.0 2024-11-13
Hinweis: Dies ist keine offizielle Version der Apache Software Foundation, siehe datafusion-contrib/datafusion-functions-json#5.
Diese Kiste bietet eine Reihe von Funktionen zum Abfragen von JSON-Strings in DataFusion. Die Funktionen sind als Skalarfunktionen implementiert, die in SQL-Abfragen verwendet werden können.
Um diese Funktionen zu nutzen, müssen Sie nur Folgendes aufrufen:
datafusion_functions_json :: register_all ( & mut ctx ) ? ;
Um die folgenden JSON-Funktionen in Ihrem SessionContext
zu registrieren.
-- Create a table with a JSON column stored as a string
CREATE TABLE test_table (id INT , json_col VARCHAR ) AS VALUES
( 1 , ' {} ' ),
( 2 , ' { "a": 1 } ' ),
( 3 , ' { "a": 2 } ' ),
( 4 , ' { "a": 1, "b": 2 } ' ),
( 5 , ' { "a": 1, "b": 2, "c": 3 } ' );
-- Check if each document contains the key 'b'
SELECT id, json_contains(json_col, ' b ' ) as json_contains FROM test_table;
-- Results in
-- +----+---------------+
-- | id | json_contains |
-- +----+---------------+
-- | 1 | false |
-- | 2 | false |
-- | 3 | false |
-- | 4 | true |
-- | 5 | true |
-- +----+---------------+
-- Get the value of the key 'a' from each document
SELECT id, json_col - > ' a ' as json_col_a FROM test_table
-- +----+------------+
-- | id | json_col_a |
-- +----+------------+
-- | 1 | {null=} |
-- | 2 | {int=1} |
-- | 3 | {int=2} |
-- | 4 | {int=1} |
-- | 5 | {int=1} |
-- +----+------------+
json_contains(json: str, *keys: str | int) -> bool
– true, wenn eine JSON-Zeichenfolge einen bestimmten Schlüssel hat (wird für den ?
-Operator verwendet) json_get(json: str, *keys: str | int) -> JsonUnion
– Ruft einen Wert aus einem JSON-String anhand seines „Pfads“ ab. json_get_str(json: str, *keys: str | int) -> str
– Holen Sie sich einen String-Wert aus einem JSON-String über seinen „Pfad“ json_get_int(json: str, *keys: str | int) -> int
– Ruft einen ganzzahligen Wert aus einem JSON-String über seinen „Pfad“ ab. json_get_float(json: str, *keys: str | int) -> float
– Holen Sie sich einen Float-Wert aus einem JSON-String über seinen „Pfad“ json_get_bool(json: str, *keys: str | int) -> bool
– Einen booleschen Wert aus einem JSON-String über seinen „Pfad“ abrufen json_get_json(json: str, *keys: str | int) -> str
– Ruft einen verschachtelten rohen JSON-String aus einem JSON-String anhand seines „Pfads“ ab. json_as_text(json: str, *keys: str | int) -> str
– Holen Sie sich einen beliebigen Wert aus einem JSON-String anhand seines „Pfads“, dargestellt als String (wird für den ->>
Operator verwendet). json_length(json: str, *keys: str | int) -> int
– ermittelt die Länge eines JSON-Strings oder -Arrays ->
Operator – Alias für json_get
->>
Operator – Alias für json_as_text
?
Operator – Alias für json_contains
Mit json_get
umgewandelte Ausdrücke werden in die entsprechende Methode umgeschrieben, z
select * from foo where json_get(attributes, ' bar ' )::string = ' ham '
Wird umgeschrieben in:
select * from foo where json_get_str(attributes, ' bar ' ) = ' ham '
json_keys(json: str, *keys: str | int) -> list[str]
– ruft die Schlüssel eines JSON-Strings ab json_is_obj(json: str, *keys: str | int) -> bool
– true, wenn der JSON ein Objekt ist json_is_array(json: str, *keys: str | int) -> bool
– true, wenn der JSON ein Array ist json_valid(json: str) -> bool
– true, wenn der JSON gültig ist