【问题标题】:How to remove null value in array for BigQuery?如何删除 BigQuery 数组中的空值?
【发布时间】:2020-07-21 22:05:49
【问题描述】:

我有一个关于 BigQuery 的疑问, 请看下面的例子:

SELECT SPLIT(path, '/')[OFFSET(0)] part1,
   SPLIT(path, '/')[OFFSET(1)] part2,
   SPLIT(path, '/')[OFFSET(2)] part3,
   SPLIT(path, '/')[OFFSET(3)] part4,
   ARRAY_LENGTH(SPLIT(path, '/')),
   SPLIT(path, '/') 
FROM (SELECT "/a/b/" path)

如下所示,结果是这样的。 问题是,如何删除第 1 部分和第 4 部分数据, 并将 f0_ 设为 2 而不是 4?

【问题讨论】:

    标签: arrays split google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT ARRAY_LENGTH(arr) arr_length, arr
    FROM (
      SELECT 
         ARRAY(SELECT * FROM UNNEST(SPLIT(path, '/')) part WHERE part != '') arr
      FROM `project.dataset.table`
    )  
    

    您可以使用来自您问题的示例数据进行测试,如下例所示

    #standardSQL
    WITH `project.dataset.table` AS (
      SELECT "/a/b/" path
    )
    SELECT ARRAY_LENGTH(arr) arr_length, arr
    FROM (
      SELECT 
         ARRAY(SELECT * FROM UNNEST(SPLIT(path, '/')) part WHERE part != '') arr
      FROM `project.dataset.table`
    )    
    

    结果

    Row arr_length  arr  
    1   2           a    
                    b      
    

    这是我看到的你所期望的壁橱

    【讨论】:

    • 您好,谢谢,在这种情况下,如何将 SELECT "/a/b/" 路径替换为 SELECT FROM 查询?谢谢
    • 只需删除 WITH 部分 - 它只是供您测试 - 请参阅我的答案中的更新
    • SELECT ARRAY_LENGTH(arr) arr_length, arr FROM ( SELECT ARRAY(SELECT * FROM UNNEST(SPLIT(SELECT page_urlpath FROM test, '/')) part WHERE part != '') arr FROM project.dataset.table ) page_urlpath 类似于“\customer\path\”...谢谢
    • 如果有帮助,请考虑对答案进行投票。这在 SO 上很重要
    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2017-06-16
    • 2019-09-11
    • 2021-04-10
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多