我在BigQuery上有一个表格如下所示
Name | Score
Tim | 63 > 89 > 90
James| 67 > 44
我想将Score
列拆分为N
个单独的列,其中N是整个表格中的最大得分长度。我希望该表如下。
Name| Score_1 | Score_2 | Score_3
Tim | 63 | 89 | 90
James| 67 | 44 | 0 or NA
我尝试了Split
命令,但我最终为每个Name-Score组合做了一个新行。
答案 0 :(得分:2)
对于BigQuery Standard SQL
以下是简单的案例,并假设您事先知道预期的最高分数长度(下例中为3)
#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 'Tim' name, '63 > 89 > 90' score UNION ALL
SELECT 'James', '67 > 44'
)
SELECT
name,
score[SAFE_OFFSET(0)] AS score_1,
score[SAFE_OFFSET(1)] AS score_2,
score[SAFE_OFFSET(2)] AS score_3
FROM (
SELECT name, SPLIT(score, ' > ') score
FROM `project.dataset.your_table`
)
结果
Row name score_1 score_2 score_3
1 Tim 63 89 90
2 James 67 44 null
当然,上述方法意味着 - 如果你有很多分数 - 比如10或20或更多 - 你需要添加相应数量的额外行,如下所示
score[SAFE_OFFSET(20)] AS score_21
所以,上面给出了你想要的输出观点模式
与此同时,下面对我来说更有意义,在大多数实际情况中更好,更优化:
#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 'Tim' name, '63 > 89 > 90' score UNION ALL
SELECT 'James', '67 > 44'
)
SELECT name, score
FROM `project.dataset.your_table`, UNNEST(SPLIT(score, ' > ')) score
结果
Row name score
1 Tim 63
2 Tim 89
3 Tim 90
4 James 67
5 James 44