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

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

【问题讨论】:

    标签: google-bigquery


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2019-01-26
        • 2016-10-23
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多