如何在Google BigQuery中透视数据集?

时间:2015-05-18 10:30:00

标签: sql pivot google-bigquery

我有一个包含此架构的大量数据集:

Customer    INTEGER
CategoryID  INTEGER
CategoryName    STRING
ProjectStage    INTEGER
NextStepID  INTEGER
NextStepName    STRING
NextStepIsAnchor    BOOLEAN

我注意得到结果集,其中每个客户只有一行,他/她的下一步将在这样的柱子中:

客户| CategoryID | CategoryName | ProjectStage | NextStep1ID | NextStep1Name | NextStep2ID | NextStep2Name | ......等等。

我尝试使用BigQuery的NTH函数,但它仅适用于第一次出现的NextStepID:

SELECT 
customer, 
nth(1, NextStepID)
FROM [2015_05.customers_wunique_nextsteps] 
group by customer

但是当我尝试添加更多列时:

SELECT 
customer, 
nth(1, NextStepID),
nth(2, NextStepID)
FROM [2015_05.customers_wunique_nextsteps] 
group by customer

我收到此错误:

  

错误:功能' NTH(2,[NextStepID])'不能用于分布式   查询时,只能为查询正确计算此函数   在单个节点上运行。

有什么想法吗? 现在我"枢轴"使用Excel和小型VBA脚本的结果,但是当数据集变大时,计算时间超出了所有限制......

提前致谢! :)

1 个答案:

答案 0 :(得分:3)

函数NTH适用于REPEATED字段,它选择第n个重复元素(可以改进错误消息)。因此,第一步是从NextStepID构建REPEATED字段,并且可以使用NEST聚合函数完成。然后您可以使用NTH作为范围聚合函数:

SELECT
  Customer,
  NTH(1, NextStepID) WITHIN RECORD AS NextStepID1,
  NTH(2, NextStepID) WITHIN RECORD AS NextStepID2,
  NTH(3, NextStepID) WITHIN RECORD AS NextStepID3
FROM (
SELECT Customer, NEST(NextStepID) AS NextStepID
FROM [2015_05.customers_wunique_nextsteps] GROUP BY Customer)