Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在BigQuery/SQL中,如何将具有大量数据的行转换为列?_Mysql_Sql_Sql Server_Google Bigquery_Transpose - Fatal编程技术网

Mysql 在BigQuery/SQL中,如何将具有大量数据的行转换为列?

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| | .. .. ..

我在将BigQuery中的大量数据表(15亿行)从行转换到列时遇到了一个问题。在硬编码时,我可以找出如何使用少量数据,但使用如此大量的数据。表的快照如下所示:

+--------------------------+
|自定义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-有关解决“查询执行期间超出资源”的更多建议,请参阅。错误