funções de fusão de dados json
v0.43.0 2024-11-13
Nota: Esta não é uma versão oficial da Apache Software Foundation, consulte datafusion-contrib/datafusion-functions-json#5.
Esta caixa fornece um conjunto de funções para consultar strings JSON no DataFusion. As funções são implementadas como funções escalares que podem ser usadas em consultas SQL.
Para usar essas funções, você só precisa chamar:
datafusion_functions_json :: register_all ( & mut ctx ) ? ;
Para registrar as funções JSON abaixo em seu 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 se uma string JSON tiver uma chave específica (usada para o operador ?
) json_get(json: str, *keys: str | int) -> JsonUnion
- Obtenha um valor de uma string JSON pelo seu "caminho" json_get_str(json: str, *keys: str | int) -> str
- Obtenha um valor de string de uma string JSON por seu "caminho" json_get_int(json: str, *keys: str | int) -> int
- Obtenha um valor inteiro de uma string JSON por seu "caminho" json_get_float(json: str, *keys: str | int) -> float
- Obtenha um valor float de uma string JSON por seu "caminho" json_get_bool(json: str, *keys: str | int) -> bool
- Obtenha um valor booleano de uma string JSON por seu "caminho" json_get_json(json: str, *keys: str | int) -> str
- Obtenha uma string JSON bruta aninhada de uma string JSON por seu "caminho" json_as_text(json: str, *keys: str | int) -> str
- Obtém qualquer valor de uma string JSON pelo seu "caminho", representado como uma string (usado para o operador ->>
) json_length(json: str, *keys: str | int) -> int
- obtém o comprimento de uma string ou array JSON ->
operador - alias para json_get
->>
operador - alias para json_as_text
?
operador - alias para json_contains
Expressões convertidas com json_get
são reescritas no método apropriado, por exemplo
select * from foo where json_get(attributes, ' bar ' )::string = ' ham '
Será reescrito para:
select * from foo where json_get_str(attributes, ' bar ' ) = ' ham '
json_keys(json: str, *keys: str | int) -> list[str]
- obtém as chaves de uma string JSON json_is_obj(json: str, *keys: str | int) -> bool
- true se o JSON for um objeto json_is_array(json: str, *keys: str | int) -> bool
- true se o JSON for um array json_valid(json: str) -> bool
- true se o JSON for válido