处理不断发展的架构

时间:2013-09-04 08:38:57

标签: google-bigquery

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

现在我们的问题。

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

即。 events_app1_v2_201308 events_app1_v2_201308

如果我们在9月添加包含新列类型的事件,我们也会获得 events_app1_v3_201309

我们编写的代码可以找到所涉及的表(对于日期范围),并将它们联合起来为'bigquery的逗号separeted FROM子句。

但我刚刚意识到,当我们在不同版本的事件表上建立工会时,这将无效。

任何有智能解决方案的人如何解决这个问题??

目前我们正在调查JSON结构是否可以帮助我们。目前的解决方案只是扁平柱。 [timestamp,eventId,value,value,value,...]

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

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

1 个答案:

答案 0 :(得分:5)

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

此外,只要新字段未标记为REQUIRED,它们应被视为兼容。但是,如果情况并非如此,那将是一个错误 - 如果您正在体验这一点,请告诉我们。