Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 如何使用Google BigQuery制定有状态查询_Google Bigquery - Fatal编程技术网

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

Google bigquery 如何使用Google BigQuery制定有状态查询,google-bigquery,Google Bigquery,我希望使用GoogleBigQuery作为一个框架,在这个框架中,我预计必须经常运行有状态查询。有状态查询是指查询在运行时使用与行关联的状态 例如,对于给定的顺序,采用列X的第一行的查询,其中列xflag被设置为1,并从列Y的第一行减去它,该列的yflag被设置为1 我运行这些查询的方法是创建中间表。在上面的示例中,使用firstx或firsty标志标记这两种类型的“first”行,然后在两个单独的查询中计算它们的差异。这相当麻烦。有更简单的方法吗?< p>您可以考虑使用子查询,而不是中间表,

我希望使用GoogleBigQuery作为一个框架,在这个框架中,我预计必须经常运行有状态查询。有状态查询是指查询在运行时使用与行关联的状态

例如,对于给定的顺序,采用列
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)请考虑!