似乎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"。
这种行为是出于设计,可以改变吗,还是有更好的方法来做我正在做的事情?
答案 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字段中。