【问题标题】:How to GROUP BY a foreign key in BigQuery?如何在 BigQuery 中按外键分组?
【发布时间】:2016-01-15 11:38:20
【问题描述】:

我在 BigQuery 中工作。我有三个表:分支、区域(分支的集合)和按月按分支的支出。

CREATE TABLE region (
    id integer NOT NULL,
    name varchar NOT NULL
);
CREATE TABLE branch (
    id integer NOT NULL,
    name varchar NOT NULL,
    region integer NOT NULL 
);
CREATE TABLE spend (
   branch integer NOT NULL
   amount float,
   month timestamp,
   item_code int
);

我怎样才能得到按月按地区的总支出?

我有这个按月按分行的总支出:

SELECT branch, 
       month, 
       SUM(amount) AS total_amount
FROM [mytable]
GROUP BY branch, 
         month

但我不知道如何按地区分组。我想我需要一个IN 子句?

这也是一个相当大的数据集(spend 表中的 150GB/500m 行),因此大型 JOIN 可能无法工作。

【问题讨论】:

  • 你说你有 3 张桌子,但你从 4:th 中选择...
  • 对不起,应该是FROM spend——只是BQ语法略有不同(FROM [mydataset.spend])。
  • 不管怎样,BQ 擅长连接,尤其是在大表和小/中型表之间(但即使大/大也可以正常工作)。我只是试一试!

标签: sql google-bigquery


【解决方案1】:

大概,你想要一个连接和聚合,我很确定 Bigquery 支持:

SELECT b.region, s.month,  SUM(s.amount) AS total_amount
FROM spend s join
     branch b
     ON s.branch = b.id
GROUP BY b.region, s.month;

【讨论】:

    【解决方案2】:
    SELECT r.name as region, [month], SUM(total_amount) AS total_amount 
    FROM (
      SELECT branch, [month], SUM(amount) AS total_amount
      FROM [mydataset.spend]
      GROUP EACH BY branch, [month]
    ) AS s
    JOIN [mydataset.branch] AS b ON s.branch = b.id
    JOIN [mydataset.region] AS r ON b.region = r.id
    GROUP BY 1, 2
    

    GROUP EACH BY 和子选择中的预分组在这里用于解决您的问题:large JOINs may not work

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 2019-12-21
      • 1970-01-01
      • 2021-01-06
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多