【问题标题】:Trying to UNNEST timestamp array field, but need to GROUP BY尝试 UNNEST 时间戳数组字段,但需要 GROUP BY
【发布时间】:2019-10-21 11:14:06
【问题描述】:

我在 BigQuery 表中有一个 TIMESTAMP 类型的重复字段。我正在尝试 UNNEST 这个字段。但是,我必须按顺序对字段进行分组或聚合。我不熟悉 SQL,所以我可以使用一些帮助。代码 sn-p 是更大查询的一部分,当将 subscription.future_renewal_dates 替换为 GENERATE_TIMESTAMP_ARRAY

subscription.future_renewal_dates 是 ARRAY

TIMESTAMP 数组是唯一的(定期订阅),无法使用 GENERATE_TIMESTAMP_ARRAY 生成,因此我必须在上传到 BigQuery 之前生成日期。 UDF 太多了。

SELECT
   subscription.amount AS subscription_amount,
   subscription.status AS subscription_status,
   "1" AS analytic_name,
   ARRAY ( 
   SELECT
      AS STRUCT FORMAT_TIMESTAMP("%x", days) AS type_value, subscription.amount AS analytic_name 
   FROM
      UNNEST(subscription.future_renewal_dates) as days 
   WHERE
      (
         days >= TIMESTAMP("2019-06-05T19:30:02+00:00") 
         AND days <= TIMESTAMP("2019-08-01T03:59:59+00:00") 
      )
) AS forecast 
   FROM
      `mydataset.subscription` AS subscription 
   GROUP BY
      subscription_amount,
      subscription_status,
      analytic_name

无法弄清楚如何成功取消订阅 subscription.future_renewal_dates 而不会出现错误“UNNEST 表达式引用了既不分组也不聚合的订阅.future_renewal_dates”

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    当您执行 GROUP BY 时 - SELECT 中的所有表达式(除了 GROUP BY 列表中的列)都应与某些聚合函数一起使用 - 您显然没有。因此,您需要决定通过该分组在此处实际尝试实现的目标是什么

    以下是我认为您想到的选项 - 尽管它可能会有所不同 - 但至少您对如何解决它有一个想法

    SELECT
       subscription.amount AS subscription_amount,
       subscription.status AS subscription_status,
       "1" AS analytic_name,
       ARRAY_CONCAT_AGG( ARRAY ( 
       SELECT
          AS STRUCT FORMAT_TIMESTAMP("%x", days) AS type_value, subscription.amount AS analytic_name 
       FROM
          UNNEST(subscription.future_renewal_dates) as days 
       WHERE
          (
             days >= TIMESTAMP("2019-06-05T19:30:02+00:00") 
             AND days <= TIMESTAMP("2019-08-01T03:59:59+00:00") 
          )
    )) AS forecast 
       FROM
          `mydataset.subscription` AS subscription 
       GROUP BY
          subscription_amount,
          subscription_status,
          analytic_name
    

    【讨论】:

    • 你太棒了!我不知道该怎么感谢你才足够!你也帮助了很多人解决其他问题。我怎么给你买啤酒?
    • 来洛杉矶就行了:o)
    • @Ryan - 但与此同时,您可以投票赞成答案:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多