我们是一家游戏公司,可以将事件(每天最多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使用逗号语法来指示表联合,而不是联接。这意味着您可以使用兼容的!?架构对多个表运行查询,如下所示:
答案 0 :(得分:5)
您应该能够修改旧表的表模式以添加列,然后联合应该匹配。请注意,您只能添加列,而不能删除它们。您可以使用tables.patch()方法执行此操作,或bq update --schema
此外,只要新字段未标记为REQUIRED,它们应被视为兼容。但是,如果情况并非如此,那将是一个错误 - 如果您正在体验这一点,请告诉我们。