BigQuery 中的字段可以具有可为空和重复模式吗?例如,表示字符串数组,其中某些字符串可能为 NULL。
BigQuery 中的字段可以具有 NULLABLE 和 REPEAT 模式吗?
不。一个或另一个
ARRAYs cannot be NULL. NULL ARRAY elements cannot persist to a table.
在数据类型中查看更多信息
例如,表示字符串数组,其中某些字符串可能为 NULL。
下面的简单示例显示Array cannot have a null element;
#standardSQL
WITH test AS (
SELECT ['abc', NULL, 'xyz']
)
SELECT *
FROM test
若要表示具有 NULLABLE 元素的数组,可以使用结构来包装它们。例如,您可以有如下列:
nullable_arr ARRAY<STRUCT<value INT64>>
更进一步,您可以使用另一个间接级别来表示一个可能为空的数组,其中包含可能为空的元素:
nullable_arr STRUCT<value ARRAY<STRUCT<value INT64>>>
当然,缺点是查询需要更多的语法。如果要获取使用后一种类型定义的数组中元素的总和,则必须执行以下操作:
SELECT (SELECT SUM(elem.value) FROM UNNEST(nullable_arr.value) AS elem) AS array_sum
FROM MyTable;
为了进行比较,取定义为ARRAY<INT64>
的名为arr
的列的总和可以表示为:
SELECT (SELECT SUM(elem) FROM UNNEST(arr) AS elem) AS array_sum
FROM MyTable;