BigQuery的结果不一致:相同的查询,不同的行数

时间:2016-07-27 17:57:21

标签: google-bigquery

我今天注意到我的查询结果不一致:每次运行它都会返回不同的行数(缓存停用)。 基本上查询看起来像这样:

SELECT  * 
FROM mydataset.table1 AS t1
LEFT JOIN EACH mydataset.table2 AS t2
  ON t1.deviceId=t2.deviceId
LEFT JOIN EACH mydataset.table3 AS t3
  ON t2.email=t3.email
WHERE  t3.email IS NOT NULL
AND (t3.date IS NULL OR DATE_ADD(t3.date, 5000, 'MINUTE')<TIMESTAMP('2016-07-27 15:20:11') )

每个查询之间不会更新表。所以我想知道你是否也注意到了这种行为。

我通常会生成返回大量行(&gt; 1000)的查询,因此这里有一些缺少的行,并且几乎没有引起注意。但是这个查询会返回几行,并且每次都会在10到20行之间变化: - /

如果Google工程师正在阅读此内容,则此处有两个具有不同结果的同一查询的作业ID: 万年青-INT:bquijob_400dd739_1562d7e2410 万年青-INT:bquijob_304f4208_1562d7df8a2

1 个答案:

答案 0 :(得分:1)

除非我遗漏了某些内容,否则您提供的查询完全是确定性的,因此每次执行时都应该给出相同的结果。但你说它基本上是&#34;&#34;与您的真实查询相同,所以这可能是由于您更改了某些内容。

你可以做几件事来试图找到原因:

  • 通过表格中明确选择的字段替换select *(唯一确定每一行的字段组合)
  • 按这些字段对表格进行排序,以便每次执行查询时订单都相同
  • 简化您的查询。在上面的查询中,您可以删除第一个条件并将两个左外连接转换为内连接并获得相同的结果。之后,您可以逐个删除表格和条件。

在每个步骤之后,检查您是否仍然获得不同的结果集。然后,当您找到关键步骤时,尝试了解它为什么会导致您的问题。 (或者在这里问。)