Google bigquery 当模式不断变化时,如何使用Python在Bigquery中创建表?

Google bigquery 当模式不断变化时,如何使用Python在Bigquery中创建表?,google-bigquery,Google Bigquery,我的数据源基于第三方工具中发生的事件。例如:-customer.created,customer.updated,customer.plan.updated。每个事件都有不同的jsonschema。甚至可能是相同的事件,例如:customer.updated可能与以前的customer.updated事件具有不同的模式 我计划将此数据加载到BigQuery中,但似乎BigQuery不支持动态模式。我正在构建一个数据仓库,希望将与客户相关的所有事件存储在同一个表中 bigquery是处理此类数据的

我的数据源基于第三方工具中发生的事件。例如:-
customer.created
customer.updated
customer.plan.updated
。每个事件都有不同的
json
schema。甚至可能是相同的事件,例如:
customer.updated
可能与以前的
customer.updated
事件具有不同的模式

我计划将此数据加载到
BigQuery
中,但似乎
BigQuery
不支持动态模式。我正在构建一个数据仓库,希望将与客户相关的所有事件存储在同一个表中


bigquery
是处理此类数据的正确工具吗?对于此类数据,GCP bigtable/云数据存储/云sql等中是否有其他更好的选项?其中一个要求是,如果可能的话,非技术人员可以轻松地查询数据,他们可以进行简单的
select
join
查询。

当您可以将数据放入定义良好的列中时,您将在BigQuery中获得最佳结果,但是,如果您只存储作为字符串存储的JSON对象,也会得到很好的结果

例如,请参见如何:

  • GitHub归档存储许多类型的GitHub事件。它们中的大多数都有相同的属性集,因此我们可以将它们存储在预定义的列中
  • 某些GitHub事件模式对于每种类型的事件都是不同的,并且它们也会随着时间的推移而不断变化。我们不处理模式更改,而是将它们存储为JSON字符串,并实时查询它们


是否有任何架构具有不兼容的类型?例如,一个事件的
customer.id
是字符串,而另一个事件的
customer.id
是整数?如果它们都兼容,则可以在大型模式中包含所有事件类型。这与和表的功能类似。不,类型将相同。什么是“大模式”?你的意思是将整个json放在bigquery表的一个单元格中吗?你知道如何将整个json对象转储到一列中吗?我的json看起来是这样的:{code>{data:{type:“notification\u event\u data”,“item:{”type:“user”,“id:“xxxxxxxx”,“user\u id:”null,“anonymous:”false,“email:”ma8151-当我执行
table.insert\u data(json.loads(data))
时,我只得到
{
在表中。不知何故,整个json没有被插入到表列中。您是出于某种原因将数据流化进来,还是会为您进行批处理?这是一项业务需求。这又有什么关系呢?如果我拉“事件”,数据仍然是相同的“通过API。只是想知道是否可以选择<代码>表。”
#standardSQL
SELECT JSON_EXTRACT_SCALAR(payload, '$.pull_request.base.repo.language') lang
  , COUNT(*) c 
FROM `githubarchive.month.201612`
WHERE type='PullRequestEvent'
GROUP BY lang 
HAVING lang IS NOT null
ORDER BY c DESC
LIMIT 10