Expression Evaluation Module Introduction¶
Module descritption¶
Expression evaluation module could do computation for Project/Filter expressions effectively. It provides a runtime expression evaluation API which accepts Substrait based expression representation and Apache Arrow based column format data representation.
SDK API¶
// validate expression can be evaluated by Cider
bool is_supported = ExpressionValidator::validate(extended_expression);
// compile and prepare runtime context
auto expr_evaluator = std::make_shared<ExpressionEvaluator>(extended_expression, std::make_shared<ExprEvaluatorContext>(allocator));
// return computation result in arrow-array format
struct ArrowArray output_array;
struct ArrowSchema output_schema;
expr_evaluator::eval(input_array, input_schema, output_array, output_schema);
// schema check API for input array
bool is_matched = expr_evaluator::schemaCheck(input_schema, substrait_schema);
Please refer ExpressionEvalExample for detailed usage.
Supported functions¶
Here is a list of all scalar functions supported in expression evaluation.
Scalar Functions | |||||
---|---|---|---|---|---|
plus | minus | multiply | devide | mod | gt |
lt | equal | not_equal | gte | lte | cast |
in | is_distinct_from | is_not_distinct_from | is_null | is_not_null | and |
or | not | lower | upper | trim | substring |
regexp_replace | regexp_substring | char_length | ltrim | rtrim | split |
extract | concat | like | regex_like |
For other SQL syntax support, like case…when…, coalesce, IF, time ± intervals, etc, you can refer details under feature.