我有一个包含此架构的大量数据集:
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脚本的结果,但是当数据集变大时,计算时间超出了所有限制......
提前致谢! :)
答案 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)