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
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