Example #1
0
def add_operation(op, func_name, db):
    """
    Registers the given operation within the Ibis SQL translation toolchain

    Parameters
    ----------
    op: operator class
    name: used in issuing statements to SQL engine
    database: database the relevant operator is registered to
    """
    full_name = f'{db}.{func_name}'
    # TODO
    # if op.input_type is rlz.listof:
    #     translator = comp.varargs(full_name)
    # else:
    arity = len(op.__signature__.parameters)
    translator = fixed_arity(full_name, arity)

    ImpalaExprTranslator._registry[op] = translator
Example #2
0
 ops.ExtractMonth:
 _extract_field("month"),
 ops.ExtractDay:
 _extract_field("day"),
 ops.ExtractHour:
 _extract_field("hour"),
 ops.ExtractMinute:
 _extract_field("minute"),
 ops.ExtractSecond:
 _extract_field("second"),
 ops.ExtractMillisecond:
 _extract_field("millisecond"),
 ops.Hash:
 _hash,
 ops.StringReplace:
 fixed_arity("REPLACE", 3),
 ops.StringSplit:
 fixed_arity("SPLIT", 2),
 ops.StringConcat:
 _string_concat,
 ops.StringJoin:
 _string_join,
 ops.StringAscii:
 _string_ascii,
 ops.StringFind:
 _string_find,
 ops.Substring:
 _string_substring,
 ops.StrRight:
 _string_right,
 ops.Repeat:
Example #3
0

_operation_registry = {
    **operation_registry,
}
_operation_registry.update(
    {
        ops.ExtractYear: _extract_field("year"),
        ops.ExtractMonth: _extract_field("month"),
        ops.ExtractDay: _extract_field("day"),
        ops.ExtractHour: _extract_field("hour"),
        ops.ExtractMinute: _extract_field("minute"),
        ops.ExtractSecond: _extract_field("second"),
        ops.ExtractMillisecond: _extract_field("millisecond"),
        ops.Hash: _hash,
        ops.StringReplace: fixed_arity("REPLACE", 3),
        ops.StringSplit: fixed_arity("SPLIT", 2),
        ops.StringConcat: _string_concat,
        ops.StringJoin: _string_join,
        ops.StringAscii: _string_ascii,
        ops.StringFind: _string_find,
        ops.Substring: _string_substring,
        ops.StrRight: _string_right,
        ops.Repeat: fixed_arity("REPEAT", 2),
        ops.RegexSearch: _regex_search,
        ops.RegexExtract: _regex_extract,
        ops.RegexReplace: _regex_replace,
        ops.GroupConcat: reduction("STRING_AGG"),
        ops.IfNull: fixed_arity("IFNULL", 2),
        ops.Cast: _cast,
        ops.StructField: _struct_field,
Example #4
0
        raise com.UnsupportedOperationError(
            '{!r} value not supported for arbitrary in Spark SQL'.format(how))


def _day_of_week_name(translator, expr):
    arg = expr.op().arg
    return 'date_format({}, {!r})'.format(translator.translate(arg), 'EEEE')


operation_registry = {**operation_registry}

operation_registry.update({
    ops.IsNan:
    unary('isnan'),
    ops.IfNull:
    fixed_arity('ifnull', 2),
    ops.StructField:
    _struct_field,
    ops.MapValueForKey:
    _map_value_for_key,
    ops.ArrayLength:
    unary('size'),
    ops.Round:
    _round,
    ops.HLLCardinality:
    reduction('approx_count_distinct'),
    ops.StrRight:
    fixed_arity('right', 2),
    ops.StringSplit:
    fixed_arity('SPLIT', 2),
    ops.RegexSearch: