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'), ops.ArrayConcat: _array_concat, ops.ArrayIndex: _array_index, ops.ArrayLength: unary('ARRAY_LENGTH'), ops.HLLCardinality: _reduction('APPROX_COUNT_DISTINCT'), ops.Log: _log, ops.Sign: unary('SIGN'), ops.Modulus: fixed_arity('MOD', 2), ops.Date:
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: fixed_arity('STRING_AGG', 2), ops.IfNull: fixed_arity('IFNULL', 2), ops.Cast: _cast, ops.StructField: _struct_field, ops.ArrayCollect: unary('ARRAY_AGG'), ops.ArrayConcat: _array_concat, ops.ArrayIndex: _array_index, ops.ArrayLength: unary('ARRAY_LENGTH'), # BigQuery doesn't have these operations built in. # ops.ArrayRepeat: _array_repeat, # ops.ArraySlice: _array_slice, ir.Literal: _literal, }) _invalid_operations = { ops.Translate, ops.FindInSet, ops.Capitalize, ops.IsNan,
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: fixed_arity('STRING_AGG', 2), ops.IfNull: fixed_arity('IFNULL', 2), ops.Cast: _cast, ops.StructField: _struct_field, ops.ArrayCollect: unary('ARRAY_AGG'), ops.ArrayConcat: _array_concat, ops.ArrayIndex: _array_index, ops.ArrayLength: unary('ARRAY_LENGTH'), ops.HLLCardinality: _reduction('APPROX_COUNT_DISTINCT'), ops.Log: _log, ops.Sign: unary('SIGN'), ops.Modulus: fixed_arity('MOD', 2), ops.Date: unary('DATE'), # BigQuery doesn't have these operations built in. # ops.ArrayRepeat: _array_repeat, # ops.ArraySlice: _array_slice, ops.Literal: _literal,
def _round(translator, expr): op = expr.op() 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 = impala_compiler._operation_registry.copy() _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:
ops.RegexSearch: _regex_search, ops.RegexExtract: _regex_extract, ops.RegexReplace: _regex_replace, ops.GroupConcat: fixed_arity('STRING_AGG', 2), ops.IfNull: fixed_arity('IFNULL', 2), ops.Cast: _cast, ops.StructField: _struct_field, ops.ArrayCollect: unary('ARRAY_AGG'), ops.ArrayConcat: _array_concat, ops.ArrayIndex: _array_index, ops.ArrayLength: unary('ARRAY_LENGTH'), ops.Log: _log, ops.Modulus: fixed_arity('MOD', 2), ops.Date: unary('DATE'), # BigQuery doesn't have these operations built in. # ops.ArrayRepeat: _array_repeat,
def _extract_epoch_seconds(translator, expr): return 'CAST({} AS BIGINT)'.format( unary('unix_timestamp')(translator, expr))
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: fixed_arity('STRING_AGG', 2), ops.IfNull: fixed_arity('IFNULL', 2), ops.Cast: _cast, ops.StructField: _struct_field, ops.ArrayCollect: unary('ARRAY_AGG'), ops.ArrayConcat: _array_concat, ops.ArrayIndex: _array_index, ops.ArrayLength: unary('ARRAY_LENGTH'), ops.HLLCardinality: _reduction('APPROX_COUNT_DISTINCT'), ops.Log: _log, ops.Sign: unary('SIGN'), ops.Modulus: fixed_arity('MOD', 2), ops.Date: unary('DATE'), # BigQuery doesn't have these operations built in. # ops.ArrayRepeat: _array_repeat, # ops.ArraySlice: _array_slice, ops.Literal: _literal, ops.Arbitrary: _arbitrary, ops.TimestampTruncate: _truncate('TIMESTAMP', _timestamp_units), ops.DateTruncate: _truncate('DATE', _date_units),