Exemple #1
0
        def parse_schema(big_query_schema, jx_path, nested_path, es_path):
            output = OrderedDict()

            if any(ApiName(e.name) == REPEATED for e in big_query_schema):
                big_query_schema = [e for e in big_query_schema if ApiName(e.name) == REPEATED]

            for e in big_query_schema:
                json_type = bq_type_to_json_type[e.field_type]
                name = unescape_name(ApiName(e.name))
                full_name = jx_path + (name,)
                full_es_path = es_path + (e.name,)

                if e.field_type == "RECORD":
                    if e.mode == "REPEATED":
                        output[name] = parse_schema(
                            e.fields, full_name, (jx_path,) + nested_path, full_es_path
                        )
                    else:
                        output[name] = parse_schema(
                            e.fields, full_name, nested_path, full_es_path
                        )
                else:
                    if e.mode == "REPEATED":
                        output[name] = {NESTED_TYPE: json_type}
                    else:
                        output[name] = json_type
            return output
Exemple #2
0
def _untype_dict(value):
    output = None

    for k, v in value.items():
        k = unescape_name(ApiName(k))
        if k == NESTED_TYPE:
            return _untype_list(v)
        elif k in typed_to_bq_type:
            vv = _untype_value(v)
            if vv is not None:
                # WE ASSUME A PRIMITIVE VALUE, NOT SOME GREATER STRUCTURE
                return vv
        else:
            new_v = _untype_value(v)
            if new_v is not None:
                if output is None:
                    output = {k: new_v}
                else:
                    output[k] = new_v
    return output