BigQuery SPLIT() 忽略空值

Mic*_*mes 5 google-bigquery

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

例如:

SELECT
  NTH(3, SPLIT(values, ","))
FROM
  (SELECT "a,b,,d,e" as values)
Run Code Online (Sandbox Code Playgroud)

返回“d”,当我希望它返回 NULL 时。您可以看到这对于多行逗号分隔的文本会有什么问题。人们会期望以下查询返回 NULL 和“c”,但它不会:

SELECT
  NTH(3, SPLIT(values, ","))
FROM
  (SELECT "a,b,,d,e" as values),
  (SELECT "a,,c,d,e" as values)
Run Code Online (Sandbox Code Playgroud)

相反,它返回“d”和“d”。

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

Mos*_*sky 1

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