Google bigquery 使用第一个或最后一个分区表会返回不一致的值
在运行多个表的查询中使用LAST或FIRST时,返回的结果不一致。再次执行同一查询将每次返回不同的结果 返回的值与查询中某个表的正确最后和第一个值匹配。然而,在每种情况下使用的表格似乎是随机选择的 例如,下面的查询:Google bigquery 使用第一个或最后一个分区表会返回不一致的值,google-bigquery,Google Bigquery,在运行多个表的查询中使用LAST或FIRST时,返回的结果不一致。再次执行同一查询将每次返回不同的结果 返回的值与查询中某个表的正确最后和第一个值匹配。然而,在每种情况下使用的表格似乎是随机选择的 例如,下面的查询: SELECT FIRST(timestamp) as first_ts, FROM TABLE_DATE_RANGE([some_table]_, timestamp('2016-07-21'), timestamp('2016-07-22')) 将返回: first_t
SELECT
FIRST(timestamp) as first_ts,
FROM TABLE_DATE_RANGE([some_table]_, timestamp('2016-07-21'), timestamp('2016-07-22'))
将返回:
first_ts
2016-07-22 07:35:30 UTC
第一次运行,并且:
first_ts
2016-07-21 23:16:26 UTC
下一次运行。等等
预期结果是2016-07-21 23:16:26
。但是,值2016-07-22 07:35:30 UTC
是表[some_table]\u 20160722
的第一个时间戳,因此我认为它发生的是BigQuery不允许您在跨表查询时对表进行排序。结果,第一个和最后一个变得不可靠,因为表的顺序未知。请注意,“最大”和“最小”在各个表中都能很好地工作
这不仅在使用传统SQL时是正确的,而且在使用新SQL和函数FIRST_VALUE和LAST_VALUE时也是正确的(因为不再支持FIRST和LAST。可能相关?),请参见下面使用新SQL的示例
SELECT
FIRST_VALUE(timestamp) OVER (ORDER BY event_sequence ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) first_ts,
FROM `some_table_*`
WHERE _TABLE_SUFFIX BETWEEN '20160721' AND '20160722'
此外(这可以被视为一个单独的问题),在查询一个表时,如果数据被多次附加到该表,则会观察到类似的行为。第一次和最后一次的结果变得不一致。加载的每个数据子集都作为一个分区
在我看来,这就像一只虫子,除非有人知道怎么做。谷歌Bigquery团队,我们爱你的产品。但是你能帮我修一下吗?我们不能以可靠的方式使用第一个和最后一个聚合,这对我们来说是一件大事。谢谢
我们不能以可靠的方式使用第一个和最后一个聚合,这是错误的
对我们来说是一件大事
我认为这里没有虫子
从文件:
第一(expr)返回函数作用域中的第一个连续值 表本身不被视为有序的序列。BigQuery不保证输出行的顺序,除非您提供一些提示,例如ORDERBY 因此,在您的示例中,您应该使用下面的。这将为您提供可靠的预期结果
SELECT
FIRST(timestamp) AS first_ts
FROM (
SELECT *
FROM TABLE_DATE_RANGE([some_table]_, TIMESTAMP('2016-07-21'), TIMESTAMP('2016-07-22'))
ORDER BY timestamp
)
注意:最大值和最小值当然起作用,因为它们不关心顺序对,这是有意义的。谢谢很高兴知道,
表本身不被视为有序序列
。这就是我们目前正在使用的解决方案,但是对于我们必须查询的数据量,我们得到了一个资源超出的解决方案!提供更多的细节,我们可能会提供帮助:o)我建议你为这篇文章发布新的问题。行。谢谢重要信息:因此,您可以使用投票下方张贴答案左侧的勾号标记接受答案。看看为什么它很重要。还有更多。。。当有人回答你的问题时,你可以检查一下该做什么。