コード例 #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 = '{0}.{1}'.format(db, func_name)
    # TODO
    # if op.input_type is rlz.listof:
    #     translator = comp.varargs(full_name)
    # else:
    arity = len(op.signature)
    translator = fixed_arity(full_name, arity)

    comp._operation_registry[op] = translator
コード例 #2
0
ファイル: compiler.py プロジェクト: zbrookle/ibis
    arg_formatted = translator.translate(arg)

    if digits is not None:
        digits_formatted = translator.translate(digits)
        return 'bround({}, {})'.format(arg_formatted, digits_formatted)
    return 'bround({})'.format(arg_formatted)


_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:
コード例 #3
0
    arg, digits = op.args

    arg_formatted = translator.translate(arg)

    if digits is not None:
        digits_formatted = translator.translate(digits)
        return 'bround({}, {})'.format(arg_formatted, digits_formatted)
    return 'bround({})'.format(arg_formatted)


_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: fixed_arity('rlike', 2),
        ops.StringConcat: _string_concat,
        ops.ArrayConcat: fixed_arity('concat', 2),
        ops.GroupConcat: _group_concat,
        ops.Cast: _cast,
        ops.ExtractYear: unary('year'),
        ops.ExtractMonth: unary('month'),
        ops.ExtractDay: unary('day'),
コード例 #4
0
ファイル: compiler.py プロジェクト: LeeTZ/ibis
 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.ExtractEpochSeconds:
 _extract_field('epochseconds'),
 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.StrRight:
 _string_right,
 ops.Repeat:
 fixed_arity('REPEAT', 2),
 ops.RegexSearch:
コード例 #5
0
ファイル: compiler.py プロジェクト: esparig/ibis
 ops.Uppercase:
 unary('upper'),
 ops.Reverse:
 unary('reverse'),
 ops.Strip:
 unary('trim'),
 ops.LStrip:
 unary('ltrim'),
 ops.RStrip:
 unary('rtrim'),
 ops.Capitalize:
 unary('initcap'),
 ops.Substring:
 _substring,
 ops.StrRight:
 fixed_arity('strright', 2),
 ops.Repeat:
 fixed_arity('repeat', 2),
 ops.StringFind:
 _string_find,
 ops.Translate:
 fixed_arity('translate', 3),
 ops.FindInSet:
 _find_in_set,
 ops.LPad:
 fixed_arity('lpad', 3),
 ops.RPad:
 fixed_arity('rpad', 3),
 ops.StringJoin:
 _string_join,
 ops.StringSQLLike:
コード例 #6
0
 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.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.StrRight:
 _string_right,
 ops.Repeat:
 fixed_arity("REPEAT", 2),
 ops.RegexSearch:
コード例 #7
0
 _reduction('max'),
 ops.Min:
 _reduction('min'),
 ops.Sum:
 _reduction('sum'),
 ops.Mean:
 _reduction('avg', 'float64'),
 # string methods
 ops.LStrip:
 unary(sa.func.ltrim),
 ops.Lowercase:
 unary(sa.func.lower),
 ops.RStrip:
 unary(sa.func.rtrim),
 ops.Repeat:
 fixed_arity(sa.func.replicate, 2),
 ops.Reverse:
 unary(sa.func.reverse),
 ops.StringFind:
 _string_find,
 ops.StringLength:
 unary(sa.func.length),
 ops.StringReplace:
 fixed_arity(sa.func.replace, 3),
 ops.Strip:
 unary(sa.func.trim),
 ops.Substring:
 _substr,
 ops.Uppercase:
 unary(sa.func.upper),
 # math
コード例 #8
0
    return sa.func.regexp_substr(sa_arg, sa_expr, sa_group)


_operation_registry.update(
    {
        ops.Literal: _literal,
        # We override this here to support time zones
        ops.TableColumn: _table_column,
        # types
        ops.Cast: _cast,
        ops.TypeOf: _typeof,
        # Floating
        ops.IsNan: _is_nan,
        ops.IsInf: _is_inf,
        # null handling
        ops.IfNull: fixed_arity(sa.func.coalesce, 2),
        # boolean reductions
        ops.Any: unary(sa.func.bool_or),
        ops.All: unary(sa.func.bool_and),
        ops.NotAny: unary(lambda x: sa.not_(sa.func.bool_or(x))),
        ops.NotAll: unary(lambda x: sa.not_(sa.func.bool_and(x))),
        # strings
        ops.Substring: _substr,
        ops.StringFind: _string_find,
        ops.GroupConcat: _string_agg,
        ops.Capitalize: unary(sa.func.initcap),
        ops.RegexSearch: _regex_search,
        ops.RegexReplace: _regex_replace,
        ops.RegexExtract: _regex_extract,
        ops.Translate: fixed_arity('translate', 3),
        ops.StringSplit: fixed_arity(sa.func.string_to_array, 2),
コード例 #9
0
_operation_registry = {
    **base_sql.operation_registry,
    **impala_compiler._operation_registry,
}
_operation_registry.update(
    {
        ops.ExtractYear: _extract_field('year'),
        ops.ExtractQuarter: _extract_field('quarter'),
        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.ExtractEpochSeconds: _extract_field('epochseconds'),
        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.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,
        ops.ArrayCollect: unary('ARRAY_AGG'),