根据BigQuery中的字符拆分列

时间:2018-04-17 15:20:03

标签: google-bigquery

我在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组合做了一个新行。

1 个答案:

答案 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