【问题标题】:Bigquery multiple unnest in a single select一次选择中的 Bigquery 多个 unnest
【发布时间】:2017-08-08 04:41:15
【问题描述】:

跟进此事 - Bigquery combining repeated fields from 2 different tables

@ElliottBrossard 提供的上述解决方案正是我所寻找的。谢谢!我需要从上面 UNNEST 字段以获取学生的聚合。比如说,有一个额外的成本字段(每门课程)例如假设上面的输出在 student_courses 表中,我需要做类似的事情,

SELECT
  COUNT(DISTINCT phone.number),
  COUNT(DISTINCT courses.Id),
  SUM(courses.Cost)
FROM
  student_courses,
  UNNEST(phone),
  UNNEST(courses)

我从上面得到的预期答案是 3、4、800 美元(假设 4 门课程每门花费 200 美元)。上面的查询最终表现得像一个交叉连接。是否可以使用单个 Select 从多个嵌套中获取聚合?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    这是一个想法,虽然有点冗长:

    #standardSQL
    SELECT
      (SELECT COUNT(DISTINCT number)
       FROM UNNEST(numbers) AS number),
      (SELECT COUNT(DISTINCT course_id)
       FROM UNNEST(course_ids) AS course_id),
      course_sum
    FROM (
      SELECT
        ARRAY_CONCAT_AGG(
          ARRAY(SELECT number FROM UNNEST(phone))
        ) AS numbers,
        ARRAY_CONCAT_AGG(
          ARRAY(SELECT id FROM UNNEST(courses))
        ) AS course_ids,
        SUM((SELECT SUM(cost) FROM UNNEST(courses))) AS course_sum
      FROM YourTable
    );
    

    参考资料:

    【讨论】:

    • 感谢@Elliott 的快速回复,这很有帮助。我可能应该添加一些上下文。我们正在尝试构建像上面这样的数据结构,以支持使用 Tableau 的即席报告。鉴于使用嵌套结构的建议,我们正在尝试替换我们的非规范化/扁平化模型,而不会从最终用户的角度影响其简单性。由于我们有 100 种措施,从实施的角度来看,上述措施可能不可行。
    • 澄清一下,您有数百个独立重复的字段,您想对其执行不同的计数?我为你提出的问题写了一个答案……不是你没有交流的那个。
    • 因此我的澄清:)
    • 因此我的澄清:)。我们使用 bigquery 作为我们的仓储解决方案,并试图通过整合来突破极限。一个简单的例子是客户跟踪。客户产生收入,在我们的网站上有多个接触点,并独立维护着我们的多个帐户。对于希望对客户进行行为分析的业务用户,他们希望跟踪访问次数、产生的收入以及他们的帐户如何影响留存率,我们正在尝试评估嵌套结构是否适合我们。
    • 在这种情况下,请提交一个包含所有相关要求的不同问题。
    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多