我如何在Google BigQuery中pivot数据集



我有一个庞大的数据集,这个模式:

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

我需要得到结果集,其中每个客户将只在一行中,他/她的下一步将在列中,如下所示:

Customer | CategoryID | CategoryName | ProjectStage | NextStep1ID | NextStep1Name | NextStep2ID | NextStep2Name |…等。

我试着玩BigQuery的第n个函数,但它只适用于第一次出现的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脚本"pivot"结果,但是当数据集变大时,计算时间超过了所有限制…

提前感谢!:)

函数NTH适用于repeat字段,它选择第n个重复元素(错误消息可以改进)。因此,第一步是从NextStepID中构建repeat字段,这可以通过NEST聚合函数来完成。然后可以使用n作为作用域聚合函数:

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)

最新更新