假设我在BigQuery中有一个包含2列的表.第一列表示名称,第二列是任意长度的分隔值列表.例:
Name | Scores
-----+-------
Bob |10;20;20
Sue |14;12;19;90
Joe |30;15
Run Code Online (Sandbox Code Playgroud)
我想转换为第一个是名称的列,第二个是单个得分值,如下所示:
Name,Score
Bob,10
Bob,20
Bob,20
Sue,14
Sue,12
Sue,19
Sue,90
Joe,30
Joe,15
Run Code Online (Sandbox Code Playgroud)
这可以单独在BigQuery中完成吗?
Fel*_*ffa 11
大家好消息!BigQuery现在可以SPLIT()了!
查看" 查找出现在数据集中多行中的所有两个单词短语 ".
目前没有分割()BigQuery中的值来从字符串生成多行的方法,但您可以使用正则表达式查找逗号并查找第一个值.然后运行类似的查询以查找第二个值,依此类推.它们都可以使用上例中显示的模式(UNION通过逗号)合并为一个查询.
如果有人还在寻找答案
select Name,split(Scores,';') as Score
from (
# replace the inner custome select with your source table
select *
from
(select 'Bob' as Name ,'10;20;20' as Scores),
(select 'Sue' as Name ,'14;12;19;90' as Scores),
(select 'Joe' as Name ,'30;15' as Scores)
);
Run Code Online (Sandbox Code Playgroud)
试图用Standart SQL 重写Elad Ben Akoune的答案,查询变成这样;
WITH name_score AS (
SELECT Name, split(Scores,';') AS Score
FROM (
(SELECT * FROM (SELECT 'Bob' AS Name ,'10;20;20' AS Scores))
UNION ALL
(SELECT * FROM (SELECT 'Sue' AS Name ,'14;12;19;90' AS Scores))
UNION ALL
(SELECT * FROM (SELECT 'Joe' AS Name ,'30;15' AS Scores))
))
SELECT name, score
FROM name_score
CROSS JOIN UNNEST(name_score.score) AS score;
Run Code Online (Sandbox Code Playgroud)
这个输出;
+------+-------+
| name | score |
+------+-------+
| Bob | 10 |
| Bob | 20 |
| Bob | 20 |
| Sue | 14 |
| Sue | 12 |
| Sue | 19 |
| Sue | 90 |
| Joe | 30 |
| Joe | 15 |
+------+-------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11687 次 |
| 最近记录: |