datafusion functions json
v0.43.0 2024-11-13
Nota: Esta no es una versión oficial de Apache Software Foundation; consulte datafusion-contrib/datafusion-functions-json#5.
Esta caja proporciona un conjunto de funciones para consultar cadenas JSON en DataFusion. Las funciones se implementan como funciones escalares que se pueden utilizar en consultas SQL.
Para usar estas funciones, solo necesitarás llamar:
datafusion_functions_json :: register_all ( & mut ctx ) ? ;
Para registrar las siguientes funciones JSON en su 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
- verdadero si una cadena JSON tiene una clave específica (usada para el operador ?
) json_get(json: str, *keys: str | int) -> JsonUnion
- Obtiene un valor de una cadena JSON por su "ruta" json_get_str(json: str, *keys: str | int) -> str
- Obtiene un valor de cadena de una cadena JSON por su "ruta" json_get_int(json: str, *keys: str | int) -> int
- Obtiene un valor entero de una cadena JSON por su "ruta" json_get_float(json: str, *keys: str | int) -> float
- Obtiene un valor flotante de una cadena JSON por su "ruta" json_get_bool(json: str, *keys: str | int) -> bool
- Obtiene un valor booleano de una cadena JSON por su "ruta" json_get_json(json: str, *keys: str | int) -> str
- Obtiene una cadena JSON sin formato anidada a partir de una cadena JSON por su "ruta" json_as_text(json: str, *keys: str | int) -> str
- Obtiene cualquier valor de una cadena JSON por su "ruta", representada como una cadena (usada para el operador ->>
) json_length(json: str, *keys: str | int) -> int
- obtiene la longitud de una cadena o matriz JSON ->
operador - alias para json_get
->>
operador - alias para json_as_text
?
operador - alias para json_contains
Las expresiones de conversión con json_get
se reescriben en el método apropiado, por ejemplo
select * from foo where json_get(attributes, ' bar ' )::string = ' ham '
Se reescribirá como:
select * from foo where json_get_str(attributes, ' bar ' ) = ' ham '
json_keys(json: str, *keys: str | int) -> list[str]
- obtiene las claves de una cadena JSON json_is_obj(json: str, *keys: str | int) -> bool
- verdadero si el JSON es un objeto json_is_array(json: str, *keys: str | int) -> bool
- verdadero si JSON es una matriz json_valid(json: str) -> bool
- verdadero si el JSON es válido