2016-01-19 56 views
1

由于我们的BigQuery解决方案的一部分,我们有哪些检查数据集中创建的最新表,将创造更多的cron作业,如果这个表是出date.This检查与下面的查询当查询表时BigQuery缓存会提供不同的结果?

SELECT table_id FROM [dataset.__TABLES_SUMMARY__] WHERE table_id LIKE 'table_root%' ORDER BY creation_time DESC LIMIT 1

做的

我们的集成测试最近一直在抛出错误,因为即使对基础表运行查询也会提供不同的结果,但该查询正在触击Bigquery的内部缓存。如果我在Google云端控制台的Web界面中执行此查询,也会发生此缓存。

如果我指定的查询不使用

queryRequest.setUseQueryCache(false) 

标志代码,然后测试通过正确缓存。

我的理解是,如果对基础表运行查询将提供不同的结果,则不会发生Bigquery自动缓存。在这种情况下,我是否错误地发生了这种情况?或者这是一个错误?

+0

这听起来像是BigQuery中的一个错误。当查询结果不同时,BQ不应该缓存。我会在内部提交一个错误并进行调查。 –

+0

非常感谢,如果有帮助,我们会在1月18日第一次注意到测试投掷错误。 – Masith

+0

该错误已被识别,应在约1周内公开BigQuery中修复。 –

回答

1

那么你的问题的答案是:你在做概念上的错误。如果您不需要缓存数据,则始终需要设置no缓存参数。即使在网络用户界面上也有需要使用的选项。默认是使用缓存版本。

但是,从根本上需要改变的过程,并使用最新功能:
自动创建表使用模板表

流数据的一个常见的使用模式到BigQuery是一个逻辑表拆分成多用于创建更小的数据集(例如按日期或用户ID)或可扩展性(例如,流量超过每秒100,000行的当前限制)。要将表分成许多较小的表而不添加复杂的客户端代码,请使用BigQuery模板表功能让BigQuery为您创建表。

要通过对BigQuery API使用模板表,templateSuffix参数添加到您的insertAll要求

通过使用模板表,您避免单独创建每个表,并指定每个表的模式的开销。您只需创建一个模板,并提供不同的后缀,以便BigQuery可以为您创建新表格。 BigQuery将表放置在同一个项目和数据集中。模板还使更新模式更容易,因为您只需更新模板表。

通过模板表创建的表通常在几秒钟内可用。

这样你就不需要有cron,因为它会自动创建缺少的表。

更多此处的信息:https://cloud.google.com/bigquery/streaming-data-into-bigquery#template-tables

+0

感谢我对模板表不知道的答案,听起来像是一个更好的方法。 – Masith

+0

注意:模板表仅适用于流场景 –