如何使用Google BigQuery制定有状态查询

时间:2018-02-11 15:45:54

标签: google-bigquery

我希望将Google BigQuery用于我预计必须经常运行有状态查询的框架。通过有状态查询,我的意思是查询使用在运行时与行关联的状态。

例如,针对给定订单的第X列的第一行查询,其中列xflag设置为1并从第一行中减去Yyflag的列firstx设置为1。

我运行这些查询的方法是创建中间表。在上面的示例中,标记" first"两种类型的行都带有firstyActiveSheet.TextBox1.Value = 5 标志,然后在两个单独的查询中计算它们的差异。这非常麻烦。有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用子查询,而不是中间表,

答案 1 :(得分:1)

考虑下面的“一次性”选项

适用于bigquery标准sql

#standardSQL
SELECT 
  ARRAY_AGG(x ORDER BY IF(xflag = 1, xpos, 9999) LIMIT 1)[SAFE_OFFSET(0)] -
  ARRAY_AGG(y ORDER BY IF(yflag = 1, ypos, 9999) LIMIT 1)[SAFE_OFFSET(0)] diff  
FROM `yourproject.yourdataset.yourtable`

注意 - 它假定您用于确定given order的字段为xposypos。另请注意使用9999 - 在您的情况下,此值应与上述xposypos的类型相同,并且该值必须大于表格中这些字段的任何可能值 - 这样才能确保只计算xflag = 1和yflag - 1行

通常这样的位置字段是时间戳类型,因此您可以使用类似CURRENT_TIMESTAMP()的内容