Google bigquery 如何使用Google BigQuery制定有状态查询
我希望使用GoogleBigQuery作为一个框架,在这个框架中,我预计必须经常运行有状态查询。有状态查询是指查询在运行时使用与行关联的状态 例如,对于给定的顺序,采用列Google bigquery 如何使用Google BigQuery制定有状态查询,google-bigquery,Google Bigquery,我希望使用GoogleBigQuery作为一个框架,在这个框架中,我预计必须经常运行有状态查询。有状态查询是指查询在运行时使用与行关联的状态 例如,对于给定的顺序,采用列X的第一行的查询,其中列xflag被设置为1,并从列Y的第一行减去它,该列的yflag被设置为1 我运行这些查询的方法是创建中间表。在上面的示例中,使用firstx或firsty标志标记这两种类型的“first”行,然后在两个单独的查询中计算它们的差异。这相当麻烦。有更简单的方法吗?< p>您可以考虑使用子查询,而不是中间表,
X
的第一行的查询,其中列xflag
被设置为1
,并从列Y
的第一行减去它,该列的yflag
被设置为1
我运行这些查询的方法是创建中间表。在上面的示例中,使用
firstx
或firsty
标志标记这两种类型的“first”行,然后在两个单独的查询中计算它们的差异。这相当麻烦。有更简单的方法吗?< p>您可以考虑使用子查询,而不是中间表,
- SQL可能是一个不错的选择,它允许您多次引用子查询数据,简化了基于特定列和行值的逻辑 你也可以考虑使用或
- SQL可能是一个不错的选择,它允许您多次引用子查询数据,简化了基于特定列和行值的逻辑 你也可以考虑使用或
- 考虑以下“一次性”选项
它适用于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`
注意-它假定用于确定给定顺序的字段是xpos
和ypos
。还要注意9999的使用-在您的情况下,该值应与上述xpos
和ypos
的类型相同,并且该值必须大于表中这些字段的任何可能值-这确保只考虑xflag=1和yflag-1行
通常,此类位置字段为时间戳类型,因此您可以使用类似于CURRENT\u timestamp()
的内容,例如考虑下面的“一次性”选项
它适用于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`
注意-它假定用于确定给定顺序的字段是xpos
和ypos
。还要注意9999的使用-在您的情况下,该值应与上述xpos
和ypos
的类型相同,并且该值必须大于表中这些字段的任何可能值-这确保只考虑xflag=1和yflag-1行
通常,此类位置字段为时间戳类型,因此您可以使用类似于
CURRENT\u timestamp()
的内容,例如重要信息,因此-您可以通过使用投票下方已发布答案左侧的勾号标记接受答案
。看看为什么它很重要!对答案进行投票也很重要。投票选出有帮助的答案。。。当有人回答你的问题时,你可以检查一下该做什么。遵循这些简单的规则,你可以提高自己的声望得分,同时让我们有动力来回答你的问题:O)请考虑!重要提示-您可以使用投递答案左侧投票下方的勾号标记接受答案
。看看为什么它很重要!对答案进行投票也很重要。投票选出有帮助的答案。。。当有人回答你的问题时,你可以检查一下该做什么。遵循这些简单的规则,你可以提高自己的声望得分,同时让我们有动力来回答你的问题:O)请考虑!