我在将 BigQuery 中的大量数据表(15 亿行)从行转换为列时遇到问题。我可以弄清楚如何在硬编码时使用少量数据来做到这一点,但是有这么大的数据量。该表的快照如下所示:
+------------------------+
| CustomerID 特征值 |
+--------------------------+
| 1 A123 3 |
| 1 F213 7 |
| 1 F231 8 |
| 1 B789 9.1 |
| 2 A123 4 |
| 2 U123 4 |
| 2 B789 12 |
| .. .. |
| .. .. |
| 400000 A123 8 |
| 400000 U123 7 |
| 400000 R231 6 |
+------------------------+
所以基本上有大约 400,000 个不同的 customerID 和 3000 个特征,并不是每个 customerID 都具有相同的特征,所以一些 customerID 可能有 2000 个特征而有些有 3000 个。我想要得到的最终结果表是每一行呈现一个不同的 customerID,并具有 3000 列来呈现所有功能。像这样:
CustomerID Feature1 Feature2 ... Feature3000
所以有些单元格可能有缺失值。
有人知道如何在 BigQuery 或 SQL 中执行此操作吗?
提前致谢。
最佳答案
STEP #1
在下面的查询中,将 yourTable
替换为您表的真实名称并执行/运行它
SELECT 'SELECT CustomerID, ' +
GROUP_CONCAT_UNQUOTED(
'MAX(IF(Feature = "' + STRING(Feature) + '", Value, NULL))'
)
+ ' FROM yourTable GROUP BY CustomerID'
FROM (SELECT Feature FROM yourTable GROUP BY Feature)
因此,您将获得一些要在下一步中使用的字符串!
STEP #2
获取从第 1 步获得的字符串并将其作为查询执行
输出是您在问题中询问的 Pivot
关于mysql - 如何在 BigQuery/SQL 中将行转置为具有大量数据的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798244/