gpt4 book ai didi

python - BigQuery JSON 架构验证

转载 作者:太空狗 更新时间:2023-10-30 01:37:50 24 4
gpt4 key购买 nike

是否有任何工具可以根据 BigQuery 架构验证 JSON 字符串?我想将有效的加载到 BQ,并重新处理无效的。

我知道您可以使用(例如)python 的 jsonschema 针对标准 JSON 模式进行验证,BQ 模式是否有类似的东西?


关于 Pentium10 的评论,我可以想象许多 ETL 场景,其中必须组装来自多个来源的数据,以便它匹配 BQ 模式 - 目前我需要 2 个数据模式,一个 JSON 模式和一个 BQ 模式 -我根据 JSON 模式进行验证,并希望这足以满足提交时的 BQ 模式。


具体来说:在这种情况下,我有从 javascript 前端到达的 JSON,并作为字符串输入到 BQ 中。我想处理这个字段,并将它作为一个单独的表添加到 BQ,以便我可以搜索它。

JSON(或多或少)属于 2 个“模式”,但它的类型很差(即数字被视为字符串,长度为 1 的列表是字符串,而不是列表...)。我想要一种快速的方法来查看某个字段是否会进入表中,我有一个 BQ 表模式似乎有点傻,但无法对其进行验证 - 相反,我还必须为理想化数据创建一个 JSON 模式,并且必须对此进行检查。

最佳答案

我建议您将 JSON 架构用作 Python 中的 JSON 对象,这样您就可以尝试使用 BigQuery 的库来验证架构。

1 - 从 BigQuery 表中请求架构(然后应该动态实现):

from google.cloud import bigquery
client = bigquery.Client(project='your_project')
dataset_ref = client.dataset('your_dataset')
table_ref = dataset_ref.table('your_table_name')
table_helper = client.get_table(table_ref)

2 - 获取架构并将其格式化为 JSON,之后您应该能够比较这两个架构。

您现在拥有的是一个包含 SchemaField() 的列表

your_schema = table_helper.schema

您可以尝试格式化列表,然后将其转储到 JSON 对象中......

formatted_list_schema = ["'{0}','{1}','{2}',{3},{4}".format(schema.name,schema.field_type,schema.mode,schema.description,schema.fields) for schema in table_helper.schema]

json_bq_schema = json.dumps(formatted_list_schema)

您可以尝试格式化 BQ-JSON-Schema,以便在此处进行比较:How to compare two JSON objects with the same elements in a different order equal?

我知道这不是一个易于实现的解决方案,但我想如果您将其调整得足够好,它就会很稳健并且可以解决您的问题。随时问我是否可以为您提供更多帮助...

检查有关模式的更多信息 https://cloud.google.com/bigquery/docs/schemas

关于python - BigQuery JSON 架构验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com