BigQuery SPLIT()忽略空值

时间:2015-06-07 05:46:10

标签: google-bigquery

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

例如:

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

返回" d",当我希望它返回NULL时。您可以看到这对于逗号分隔的几行文本有何问题。可以预期以下查询返回NULL和" c",但它不会:

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

相反,它返回" d"和" d"。

这种行为是出于设计,可以改变吗,还是有更好的方法来做我正在做的事情?

2 个答案:

答案 0 :(得分:2)

正如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    

答案 1 :(得分:1)

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