You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载Avro到BigQuery时如何保留数组中的null元素?

问题描述

我正在处理一个包含数组字段的Avro文件,该数组的每个元素可为null或long类型,对应的Avro Schema如下:

{
  "name": "myArray",
  "type": {
    "type": "array",
    "items": ["null", "long"]
  }
}

在BigQuery加载任务中,数组中的null元素会被自动过滤。我需要保留文件中原有的这些null值,但不想修改原始Avro文件。请问是否有办法在加载时保留数组中的null元素?是否有配置选项、变通方案、JSON转换方式或默认值设置可用?

解决方案

方案1:加载时指定自定义Schema

BigQuery默认会过滤Avro数组中的null元素,你可以通过手动指定目标表的Schema来强制保留这些值:

  • 自定义Schema需将数组元素包装为可空的结构体,示例如下:
{
  "fields": [
    {
      "name": "myArray",
      "type": "array",
      "mode": "REPEATED",
      "fields": [
        {
          "name": "value",
          "type": "INT64",
          "mode": "NULLABLE"
        }
      ]
    }
  ]
}
  • 加载时选择「手动输入Schema」(控制台操作)或通过API指定该Schema,原Avro数组中的null元素会被映射为结构体中value字段为null的项,从而保留下来。
  • 若需要还原为原始数组形式,可通过BigQuery SQL提取:
ARRAY(SELECT value FROM UNNEST(myArray)) AS myArray_with_nulls

方案2:转换为JSON格式后加载

由于BigQuery加载JSON文件时会保留数组中的null元素,你可以先将Avro文件转换为JSON行格式再加载:

  • 使用avro-tools工具完成格式转换(需提前安装Apache Avro工具包):
avro-tools tojson input.avro > output.jsonl
  • 直接将生成的output.jsonl文件加载到BigQuery,无需额外配置,数组中的null元素会被完整保留。

内容的提问来源于stack exchange,提问作者AndrewM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:16:06