fonctions de fusion de données json
v0.43.0 2024-11-13
Remarque : il ne s'agit pas d'une version officielle d'Apache Software Foundation, voir datafusion-contrib/datafusion-functions-json#5.
Cette caisse fournit un ensemble de fonctions pour interroger les chaînes JSON dans DataFusion. Les fonctions sont implémentées sous forme de fonctions scalaires pouvant être utilisées dans les requêtes SQL.
Pour utiliser ces fonctions, il vous suffira d'appeler :
datafusion_functions_json :: register_all ( & mut ctx ) ? ;
Pour enregistrer les fonctions JSON ci-dessous dans votre SessionContext
.
-- 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 si une chaîne JSON a une clé spécifique (utilisée pour l'opérateur ?
) json_get(json: str, *keys: str | int) -> JsonUnion
- Récupère une valeur d'une chaîne JSON par son "chemin" json_get_str(json: str, *keys: str | int) -> str
- Récupère une valeur de chaîne à partir d'une chaîne JSON par son "chemin" json_get_int(json: str, *keys: str | int) -> int
- Récupère une valeur entière à partir d'une chaîne JSON par son "chemin" json_get_float(json: str, *keys: str | int) -> float
- Récupère une valeur flottante à partir d'une chaîne JSON par son "chemin" json_get_bool(json: str, *keys: str | int) -> bool
- Récupère une valeur booléenne à partir d'une chaîne JSON par son "chemin" json_get_json(json: str, *keys: str | int) -> str
- Récupère une chaîne JSON brute imbriquée à partir d'une chaîne JSON par son "chemin" json_as_text(json: str, *keys: str | int) -> str
- Récupère n'importe quelle valeur d'une chaîne JSON par son "chemin", représenté sous forme de chaîne (utilisée pour l'opérateur ->>
) json_length(json: str, *keys: str | int) -> int
- obtient la longueur d'une chaîne ou d'un tableau JSON ->
opérateur - alias pour json_get
->>
opérateur - alias pour json_as_text
?
opérateur - alias pour json_contains
Les expressions cast avec json_get
sont réécrites dans la méthode appropriée, par exemple
select * from foo where json_get(attributes, ' bar ' )::string = ' ham '
Sera réécrit en :
select * from foo where json_get_str(attributes, ' bar ' ) = ' ham '
json_keys(json: str, *keys: str | int) -> list[str]
- récupère les clés d'une chaîne JSON json_is_obj(json: str, *keys: str | int) -> bool
- true si le JSON est un objet json_is_array(json: str, *keys: str | int) -> bool
- true si le JSON est un tableau json_valid(json: str) -> bool
- vrai si le JSON est valide