【问题标题】:Pivot data in BigQuery SQL? [duplicate]在 BigQuery SQL 中透视数据? [复制]
【发布时间】:2016-05-12 11:26:09
【问题描述】:

我正在使用 BigQuery。我有两张桌子:

organisations:
  org_code STRING
  name STRING

spending:
  org STRING
  month DATE
  quantity INTEGER
  code STRING

然后是一个相当复杂的查询,以按月按每个组织获取结果:

SELECT
  organisations.org_code AS org,
  num.month AS month,
  (num.quantity / denom.quantity) AS ratio_quantity
FROM (
  SELECT
    org_code, name
  FROM
    [mytable.organisations]) AS organisations
LEFT OUTER JOIN EACH (
  SELECT
    org,
    month,
    SUM(quantity) AS quantity
  FROM
    [mytable.spending]
  GROUP BY
    org,
    month) AS denom
ON
  denom.org = organisations.org_code
LEFT OUTER JOIN EACH (
  SELECT
    org,
    month,
    SUM(quantity) AS quantity
  FROM
    [hscic.spending]
  WHERE
    code LIKE 'XXXX%'
  GROUP BY
    org,
    month) AS num
ON
  denom.month = num.month
  AND denom.org = num.org
ORDER BY org, month

我的最终结果如下所示,每个组织/月组合一行:

org,month,ratio_quantity
A81001,2015-10-01 00:00:00 UTC,28
A82001,2015-11-01 00:00:00 UTC,43
A82002,2015-10-01 00:00:00 UTC,16

现在我想将结果转为如下所示,每月一行,每个组织一列:

month,items.A81001,items.A82002...
2015-10-01 00:00:00 UTC,28,16
2015-11-01 00:00:00 UTC,43,...

这可以在同一个 BigQuery 调用中实现吗?或者我应该创建一个新表并从那里旋转它?还是应该只用 Python 进行整形?

更新:大约有 500,000 个结果,仅供参考。

【问题讨论】:

标签: sql google-bigquery


【解决方案1】:

问。这可能在同一个 BigQuery 调用中吗?或者我应该创建一个新的 表并从那里旋转它?

通常,您可以将该“复杂查询”用作子查询,以便将额外逻辑应用于当前结果。 所以,这绝对是可行的。但是代码很快就会变得难以管理或难以管理——因此您可以考虑将此结果写入新表中,然后从那里进行旋转

如果您坚持执行枢轴的方向(您在问题中描述的方式) - 请查看下面的链接以查看有关如何在 BigQuery 中实现枢轴的详细介绍。
How to scale Pivoting in BigQuery?
请注意 - 每个表有 10K 列的限制 - 因此您只能使用 10K 个组织。
您还可以将下面的示例视为简化示例(如果上面的示例过于复杂/冗长):
How to transpose rows to columns with large amount of the data in BigQuery/SQL?
How to create dummy variable columns for thousands of categories in Google BigQuery?
Pivot Repeated fields in BigQuery

问。还是我应该只在 Python 中进行重塑?

如果上述方法不适合您 - 以客户端为中心始终是一种选择,但现在您应该考虑客户端限制

希望这有帮助!

【讨论】:

猜你喜欢
  • 2022-01-07
  • 2019-03-08
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多