BigQuery 中的字段可以具有 NULLABLE 和 REPEATED 模式吗?

Posted

技术标签:

【中文标题】BigQuery 中的字段可以具有 NULLABLE 和 REPEATED 模式吗?【英文标题】:Can a field have mode NULLABLE and REPEATED in BigQuery? 【发布时间】:2017-10-21 19:56:35 【问题描述】:

BigQuery 中的字段可以有 NULLABLE REPEATED 模式吗?例如表示一个字符串数组,其中一些字符串可能为 NULL。

【问题讨论】:

【参考方案1】:

BigQuery 中的字段可以有 NULLABLE 和 REPEATED 模式吗?

不。一个或另一个

ARRAYs cannot be NULL.   
NULL ARRAY elements cannot persist to a table.   

在Data Types 中查看更多信息

例如表示一个字符串数组,其中一些字符串可能为 NULL。

下面的简单示例显示Array cannot have a null element;

#standardSQL
WITH test AS (
  SELECT ['abc', NULL, 'xyz']  
)
SELECT *
FROM test  

【讨论】:

【参考方案2】:

要表示具有 NULLABLE 元素的数组,您可以使用结构来包装它们。例如,您可以有一个列,例如:

nullable_arr ARRAY<STRUCT<value INT64>>

更进一步,您可以使用另一个间接级别来表示一个可能为 null 的数组,其中包含可能为 null 的元素:

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&lt;INT64&gt;的名为arr的列的总和可以表示为:

SELECT (SELECT SUM(elem) FROM UNNEST(arr) AS elem) AS array_sum
FROM MyTable;

【讨论】:

以上是关于BigQuery 中的字段可以具有 NULLABLE 和 REPEATED 模式吗?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:仅当字段具有特定值时才获取表中的最新行

是否可以在 bigQuery 表中插入具有不同字段的行?

BigQuery 将查询结果附加到具有必填字段的表中

BigQuery:对具有不同字段顺序的重复字段进行联合

如何在 bigquery 中转储具有未知内容的 json?

BigQuery - 加载具有空值的 JSON 字段