如何在架构不断变化时使用Python在Bigquery中创建表?

时间:2017-07-11 14:28:29

标签: google-bigquery

我的数据源基于第三方工具中发生的事件。例如: - customer.createdcustomer.updatedcustomer.plan.updated。每个事件都有不同的json架构。并且甚至可能是同一事件,例如:customer.updated可能具有与先前customer.updated事件不同的模式。

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

bigquery是否适合此类数据?对于此类数据,GCP bigtable / cloud数据存储区/云sql等还有其他更好的选择吗?其中一项要求是,如果可能,非技术人员可以轻松查询数据,他们可以执行简单的selectjoin查询。

1 个答案:

答案 0 :(得分:2)

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

例如,请参阅https://www.githubarchive.org/如何做到:

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

enter image description here

#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

enter image description here