bigQuery ANY_VALUE是否不确定?

时间:2019-04-17 13:57:49

标签: sql google-bigquery

bigQuery是否具有ANY_VALUE确定性?我有一个查询,产生约200,000行结果,但是如果我在查询后过滤掉重复的条目,它们会减少到约500。为了解决查询本身的问题,我添加了GROUP BY,然后将所有属性都包装为`ANY_VALUE(tN.fieldX)作为tN_fieldX。排序后的输出保存为.csv并执行了多次,返回的结果是相同的md5sum文件。

这是否意味着ANY_VALUE解决了我的重复条目问题,因为由于bigQuery中的不确定性,每次都会给出不同的值吗?

2 个答案:

答案 0 :(得分:1)

我认为这在documentation中很清楚:

  

ANY_VALUE

ANY_VALUE(expression)  [OVER (...)]
     

说明

     

从输入返回任何值;如果输入行为零,则返回NULL。返回的值是不确定的,这意味着每次使用此功能时,您可能会收到不同的结果。

如果您依赖于返回的特定值,则可能会在某些时候不起作用。

我反而建议使用窗口功能:

select t.* except (seqnum)
from (select t.*,
             row_number() over (partition by . . . order by . . . ) as seqnum
      from t
     ) t
where seqnum = 1;

这保证所有值都来自相同行,并且您可以控制它们来自哪一行-假设您有可以唯一标识每一行的内容。

答案 1 :(得分:1)

很显然,ANY_VALUE是不确定的-但是如果您对GROUP'ed BY值应用函数-从某种意义上说它是确定性的,即它从一组相同的值中随机选择值。因此,是的-有助于解决像您这样的情况下的重复问题