我正在使用Google Big Query,并且我正在尝试从公共示例数据集中获取透视结果.
对现有表的简单查询是:
SELECT *
FROM publicdata:samples.shakespeare
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
此查询返回以下结果集.

现在我要做的是,从表中获得结果,如果单词是勇敢的,选择"BRAVE"作为column_1,如果单词出席,选择"ATTENDED"作为column_2,并聚合单词计数对于这2.
这是我正在使用的查询.
SELECT
(CASE WHEN word = 'brave' THEN 'BRAVE' ELSE '' END) AS column_1,
(CASE WHEN word = 'attended' THEN 'ATTENDED' ELSE '' END) AS column_2,
SUM (word_count)
FROM publicdata:samples.shakespeare
WHERE (word = 'brave' OR word = 'attended')
GROUP BY column_1, column_2
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
但是,此查询返回数据

我在寻找的是

我知道这个数据集的这个数据集没有意义.但我只是以此为例来解释这个问题.如果你可以为我提供一些指示,那将是很棒的.
编辑:我还提到了如何使用BigQuery模拟数据透视表?它似乎也有我在这里提到的相同问题.
比方说,我有一个给定的一天音乐视频播放统计数据表格mydataset.stats(3B行,1M用户,6K艺术家).简化的架构是:UserGUID String,ArtistGUID String
我需要从行列枢轴/转的艺术家,这样的模式将是:
UserGUID字符串,Artist1诠释,Artist2诠释,... Artist8000诠释
与艺术家通过各自的用户播放次数
在如何将行转换为具有BigQuery/SQL中大量数据的列中的方法中提出了一种方法?以及如何在Google BigQuery中为数千个类别创建虚拟变量列?但看起来它不能扩展我的例子中的数字
我的例子可以缩放这种方法吗?
我有一个包含两列的简单表:UserID和Category,每个UserID可以重复几个类别,如下所示:
UserID Category
------ --------
1 A
1 B
2 C
3 A
3 C
3 B
Run Code Online (Sandbox Code Playgroud)
我想“虚拟化”该表:即创建一个输出表,该表的每个列都有由虚拟变量组成的唯一类别(0/1,取决于UserID是否属于该特定类别):
UserID A B C
------ -- -- --
1 1 1 0
2 0 0 1
3 1 1 1
Run Code Online (Sandbox Code Playgroud)
我的问题是我有数千个类别(在此示例中不只是3个类别),因此无法使用CASE WHEN语句有效地完成此操作。
所以我的问题是:
1)有没有一种方法可以在不使用数千个CASE WHEN语句的情况下“虚拟化” Google BigQuery中的Category列。
2)这是UDF功能正常工作的情况吗?看起来确实是这样,但是我对BigQuery中的UDF不够了解,无法解决此问题。有人可以帮忙吗?
谢谢。
我在将BigQuery(15亿行)中的大量数据表从行转换为列时遇到问题.我可以弄清楚如何在硬编码时使用少量数据来完成它,但是这个数量很大.表的快照如下所示:
+--------------------------+
| CustomerID Feature Value |
+--------------------------+
| 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中执行此操作?
提前致谢.