BigQuery SPLIT() 忽略空值

BigQuery SPLIT() ignores empty values

似乎 SPLIT() 将空值视为根本不存在,这会产生意想不到的结果。

例如:

SELECT
  NTH(3, SPLIT(values, ","))
FROM
  (SELECT "a,b,,d,e" as values)

returns "d",而我希望它为 return NULL。您可以看到这对于多行以逗号分隔的文本会有什么问题。人们会期望以下查询为 return NULL 和 "c",但事实并非如此:

SELECT
  NTH(3, SPLIT(values, ","))
FROM
  (SELECT "a,b,,d,e" as values),
  (SELECT "a,,c,d,e" as values)

相反,它 returns "d" 和 "d"。

这种行为是设计使然的吗?可以更改吗?或者是否有更好的方法来完成我正在做的事情?

这是设计使然的行为,它并非特定于 SPLIT 函数,而是一般的 REPEATED 字段。 BigQuery REPEATED 字段不能存储 NULL(与协议缓冲区中的行为相同),因此 SPLIT 所做的任何事情都不能使 NULL 出现在 REPEATED 字段中。

正如 Mosha 所解释的,从 SPLIT() 操作中获取 NULL 是不可能的。作为替代方案,让空格成为一种选择吗?

SELECT
  NTH(7, SPLIT(values, ","))
FROM
(SELECT REGEXP_REPLACE(values, ',,', ', ,') values FROM
  (SELECT "a,b,,d,e,,g" as values),
  (SELECT "a,,c,d,e,f,g" as values),
  (SELECT "a,,c,d,e,f,," as values),
  (SELECT "a,,c,d,e,f," as values),
)

Row f0_  
1   g    
2   g    
3        
4   null