6

我们是一家将事件(每天最多 1 个千兆事件)存储到 bigquery 的游戏公司。事件按月和应用程序进行分片,以降低查询成本。

现在到我们的问题。

我们当前的解决方案支持添加新类型的事件,从而导致新版本的表模式。此版本也已添加到表格中。

events_app1_v2_201308events_app1_v2_201308

如果我们在 9 月添加具有新列类型的事件,我们还将获得events_app1_v3_201309

我们已经编写了代码来找出涉及的表(对于一个日期范围),并将它们合并为一个大查询的逗号分隔的 FROM 子句。

但是我刚刚意识到,当我们对不同版本的事件表进行联合时,这将不起作用。

任何人都有一个聪明的解决方案来解决这个问题!?

现在我们正在研究 JSON 结构是否可以帮助我们。当前的解决方案只是平柱。[时间戳,eventId,值,值,值,...]

来自https://developers.google.com/bigquery/query-reference#from

注意:与许多其他基于 SQL 的系统不同,BigQuery 使用逗号语法来表示表联合,而不是联合。这意味着您可以在兼容的多个表上运行查询!?架构如下:

4

1 回答 1

6

您应该能够修改旧表的表模式以添加列,然后联合应该匹配。请注意,您只能添加列,不能删除它们。您可以使用 tables.patch() 方法来执行此操作,或者bq update --schema

此外,只要新字段没有标记为 REQUIRED,它们就应该被认为是兼容的。但是,如果不是这种情况,那将是一个错误 - 让我们知道您是否遇到了这种情况。

于 2013-09-04T14:53:32.883 回答