我今天注意到我的查询结果不一致:每次运行它都会返回不同的行数(缓存停用)。 基本上查询看起来像这样:
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
答案 0 :(得分:1)
除非我遗漏了某些内容,否则您提供的查询完全是确定性的,因此每次执行时都应该给出相同的结果。但你说它基本上是&#34;&#34;与您的真实查询相同,所以这可能是由于您更改了某些内容。
你可以做几件事来试图找到原因:
select *
(唯一确定每一行的字段组合)在每个步骤之后,检查您是否仍然获得不同的结果集。然后,当您找到关键步骤时,尝试了解它为什么会导致您的问题。 (或者在这里问。)