数据融合函数 json
v0.43.0 2024-11-13
注意:这不是 Apache 软件基金会的官方版本,请参阅 datafusion-contrib/datafusion-functions-json#5。
该包提供了一组用于在 DataFusion 中查询 JSON 字符串的函数。这些函数被实现为可在 SQL 查询中使用的标量函数。
要使用这些功能,您只需调用:
datafusion_functions_json :: register_all ( & mut ctx ) ? ;
在SessionContext
中注册以下 JSON 函数。
-- 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
- 如果 JSON 字符串具有特定键(用于?
运算符),则为 true json_get(json: str, *keys: str | int) -> JsonUnion
- 通过“路径”从 JSON 字符串获取值json_get_str(json: str, *keys: str | int) -> str
- 通过“路径”从 JSON 字符串获取字符串值json_get_int(json: str, *keys: str | int) -> int
- 通过“路径”从 JSON 字符串获取整数值json_get_float(json: str, *keys: str | int) -> float
- 通过“路径”从 JSON 字符串获取浮点值json_get_bool(json: str, *keys: str | int) -> bool
- 通过“路径”从 JSON 字符串获取布尔值json_get_json(json: str, *keys: str | int) -> str
- 通过“路径”从 JSON 字符串获取嵌套的原始 JSON 字符串json_as_text(json: str, *keys: str | int) -> str
- 通过“路径”从 JSON 字符串获取任何值,表示为字符串(用于->>
运算符) json_length(json: str, *keys: str | int) -> int
- 获取 JSON 字符串或数组的长度->
运算符 - json_get
的别名->>
运算符 - json_as_text
的别名?
运算符 - json_contains
的别名使用json_get
的转换表达式被重写为适当的方法,例如
select * from foo where json_get(attributes, ' bar ' )::string = ' ham '
将被重写为:
select * from foo where json_get_str(attributes, ' bar ' ) = ' ham '
json_keys(json: str, *keys: str | int) -> list[str]
- 获取 JSON 字符串的键json_is_obj(json: str, *keys: str | int) -> bool
- 如果 JSON 是对象则为 true json_is_array(json: str, *keys: str | int) -> bool
- 如果 JSON 是数组则为 true json_valid(json: str) -> bool
- 如果 JSON 有效则为 true