Bigquery SQL 中的拆分函数

Posted

技术标签:

【中文标题】Bigquery SQL 中的拆分函数【英文标题】:Split function in Bigquery SQL 【发布时间】:2019-01-21 21:41:35 【问题描述】:

我正在 Bigquery SQL 中尝试简单的拆分函数并尝试获取数组元素(从 hive SQL 获取的查询)。但是 Bigquery SQL 拆分功能使字段可重复并且没有给出预期的结果。有人可以帮助在 Bigquery #standardSQL 中创建类似的查询

-- Hive 查询 选择层次结构,hier_array,hier_array[0] 作为 level0,hier_array[1] 作为 level1,hier_array[2] 作为 level2 来自 ( 选择层次结构,拆分(层次结构,'-')作为hier_array 来自 gcs_publish.cr_party_dnm_gu_rel ) z 限制 10 个;

--想要的输出

hierarchy   hier_array  level0  level1
10000-211817-26510-25429    ["10000","211817","26510","25429"]  10000   211817
10019-10369 ["10019","10369"]   10019   10369
10021   ["10021"]   10021   
10022-17256 ["10022","17256"]   10022   17256
10033   ["10033"]   10033   
10037-3098187   ["10037","3098187"] 10037   3098187
10042   ["10042"]   10042   
10050-11038-211637808-34880075  ["10050","11038","211637808","34880075"]    10050   11038
10052   ["10052"]   10052   
10053   ["10053"]   10053   

【问题讨论】:

欢迎来到 ***,请访问 tour 并阅读 how to ask a question。如果对您有用,请接受答案。 【参考方案1】:

以下是 BigQuery 标准 SQL 并帮助您入门

#standardSQL
SELECT 
  hierarchy, 
  hier_array, 
  hier_array[SAFE_OFFSET(0)] AS level0,  
  hier_array[SAFE_OFFSET(1)] AS level1, 
  hier_array[SAFE_OFFSET(2)] AS level2
FROM (
  SELECT hierarchy, SPLIT(hierarchy,'-') AS hier_array  
  FROM `gcs_publish.cr_party_dnm_gu_rel`
) z  
LIMIT 10   

结果如下所示

Row hierarchy                   hier_array  level0  level1  level2   
1   10000-211817-26510-25429    10000       10000   211817  26510    
                                211817               
                                26510                
                                25429                
2   10019-10369                 10019       10019   10369   null     
                                10369                
3   10021                       10021       10021   null    null       

如果你要检查这个结果的 JSON 表示(以第一行为例)

  
    "hierarchy": "10000-211817-26510-25429",
    "hier_array": [
      "10000",
      "211817",
      "26510",
      "25429"
    ],
    "level0": "10000",
    "level1": "211817",
    "level2": "26510"
  ,  

在我看来和你期望的一样

【讨论】:

以上是关于Bigquery SQL 中的拆分函数的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery SQL 中跨多个字段的拆分函数

BigQuery:无效日期错误

BigQuery/SQL - 特定变体的拆分值

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

BigQuery 隐藏 UDF 实现

Big Query 或 SQL 重塑数据