我有一个庞大的数据集,这个模式:
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)