Skip to content

alamb/datafusion-functions-json

 
 

Repository files navigation

datafusion-functions-json

CI Crates.io

Note: This is not an official Apache Software Foundation release, see datafusion-contrib/datafusion-functions-json#5.

This crate provides a set of functions for querying JSON strings in DataFusion. The functions are implemented as scalar functions that can be used in SQL queries.

To use these functions, you'll just need to call:

datafusion_functions_json::register_all(&mut ctx)?;

To register the below JSON functions in your SessionContext.

Done

  • json_contains(json: str, *keys: str | int) -> bool - true if a JSON string has a specific key (used for the ? operator)
  • json_get(json: str, *keys: str | int) -> JsonUnion - Get a value from a JSON string by its "path"
  • json_get_str(json: str, *keys: str | int) -> str - Get a string value from a JSON string by its "path"
  • json_get_int(json: str, *keys: str | int) -> int - Get an integer value from a JSON string by its "path"
  • json_get_float(json: str, *keys: str | int) -> float - Get a float value from a JSON string by its "path"
  • json_get_bool(json: str, *keys: str | int) -> bool - Get a boolean value from a JSON string by its "path"
  • json_get_json(json: str, *keys: str | int) -> str - Get a nested raw JSON string from a JSON string by its "path"
  • json_as_text(json: str, *keys: str | int) -> str - Get any value from a JSON string by its "path", represented as a string (used for the ->> operator)
  • json_length(json: str, *keys: str | int) -> int - get the length of a JSON string or array

Cast expressions with json_get are rewritten to the appropriate method, e.g.

select * from foo where json_get(attributes, 'bar')::string='ham'

Will be rewritten to:

select * from foo where json_get_str(attributes, 'bar')='ham'

TODO (maybe, if they're actually useful)

  • json_keys(json: str, *keys: str | int) -> list[str] - get the keys of a JSON string
  • json_is_obj(json: str, *keys: str | int) -> bool - true if the JSON is an object
  • json_is_array(json: str, *keys: str | int) -> bool - true if the JSON is an array
  • json_valid(json: str) -> bool - true if the JSON is valid

About

JSON support for DataFusion (unofficial)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%