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

Scala写入BigQuery时Record类型字段插入为null的问题排查

问题原因及解决方案

核心原因

BigQuery的Java客户端(google-cloud-bigquery)无法直接识别并序列化Scala的case class实例为BigQuery的RECORD类型。你在AvailabilityRecord.toMap()里直接把NestedRecord实例放入Java HashMap,客户端不知道如何解析这个Scala类,因此将其视为null插入。

修复步骤

  1. 给NestedRecord添加转Java Map的方法
case class NestedRecord(from: String, to: String) {
  def toMap(): java.util.Map[String, Any] = {
    val map = new java.util.HashMap[String, Any]()
    map.put("from", from)
    map.put("to", to)
    map
  }
}
  1. 修改AvailabilityRecord.toMap(),将nestedField转成Java Map后再放入
case class AvailabilityRecord(nestedField: NestedRecord, timezone: String) {
  def toMap(): java.util.Map[String, Any] = {
    val map = new java.util.HashMap[String, Any]()
    map.put("nestedField", nestedField.toMap()) // 关键:调用nestedField的toMap方法
    map.put("timezone", timezone)
    map
  }
}

额外检查项

  • 确认BigQuery表的Schema中,nestedField的类型是RECORD,且内部包含from和to两个STRING类型的字段,字段名与case class完全一致(BigQuery字段名大小写敏感)
  • 验证插入的AvailabilityRecord实例中,nestedField本身不为null(比如JSON解析时是否正确绑定了嵌套字段)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:10:13