如何删除 BigQuery 数组中的空值?

Posted

技术标签:

【中文标题】如何删除 BigQuery 数组中的空值?【英文标题】:How to remove null value in array for 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?

【问题讨论】:

【参考方案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 上很重要

以上是关于如何删除 BigQuery 数组中的空值?的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL函数去除数组中的0值和空值

PHP 删除数组中的空值

删除数组中的空值

如何从列类型列表中删除 pandas DataFrame 中的空值

如何使用无点递归实现使用 Ramda 删除对象中的空值?

数据清洗--DataFrame中的空值处理