Mysql 在BigQuery/SQL中,如何将具有大量数据的行转换为列?
我在将BigQuery中的大量数据表(15亿行)从行转换到列时遇到了一个问题。在硬编码时,我可以找出如何使用少量数据,但使用如此大量的数据。表的快照如下所示:Mysql 在BigQuery/SQL中,如何将具有大量数据的行转换为列?,mysql,sql,sql-server,google-bigquery,transpose,Mysql,Sql,Sql Server,Google Bigquery,Transpose,我在将BigQuery中的大量数据表(15亿行)从行转换到列时遇到了一个问题。在硬编码时,我可以找出如何使用少量数据,但使用如此大量的数据。表的快照如下所示: +--------------------------+ |自定义ID特征值| +--------------------------+ |1 A123 3| |1 F213 7| |1 F2318| |1 B789 9.1| |2 A123 4| |2 U123 4| |2 B789 12| | .. .. ..
+--------------------------+
|自定义ID特征值|
+--------------------------+
|1 A123 3|
|1 F213 7|
|1 F2318|
|1 B789 9.1|
|2 A123 4|
|2 U123 4|
|2 B789 12|
| .. .. .. |
| .. .. .. |
|400000A1238|
|400000 U1237|
|400000 R2316|
+--------------------------+
因此,基本上有大约400000个不同的customerID和3000个特性,并且不是每个customerID都有相同的特性,所以有些customerID可能有2000个特性,而有些则有3000个特性。我想要得到的最终结果表是,每一行表示一个不同的customerID,3000列表示所有特性。像这样:
CustomerID功能1功能2。。。功能3000
因此,某些单元格可能缺少值
有人知道如何在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中得到的字符串,并将其作为查询执行输出是您在问题中提出的轴心点Hi@Jade我之前发布了一篇文章。从@MikhailBerlyant那里得到了一个非常有用的(类似的)答案。值得一提的是,在我的例子中,我有大约4000个特性需要dummify,并且还遇到了“查询执行期间超出资源”的错误
我认为这种类型的大规模数据转换(而不是查询)最好留给其他更适合此任务的工具(如Spark) 非常感谢!我已经试过了,但是,当我从第2步运行查询时,我得到一个错误,说“查询执行期间超出了资源”。我想这可能是由于GROUP BY占用了大量内存。是否有解决方法?我建议从限制/减少功能数量开始。您可以在第1步的子查询中控制这一点。如果GROUP BY给您带来麻烦,请尝试每个GROUPBY@Jade-有关解决“查询执行期间超出资源”的更多建议,请参阅。错误