使用fastavro生成的AVRO文件导入Google BigQuery报错求助
错误原因与解决方案
核心原因
这个错误的本质是fastavro生成的Avro文件中,联合类型(Union)的分支索引存在非法溢出值:
- 错误里的
18446744073709551567是uint64的最大值,实际对应int64的-1被强制转为无符号整数的结果 - 当fastavro处理联合类型时,如果错误写入了负数索引(比如用
-1表示缺失值,但不符合Avro规范),BigQuery的Avro解析器会将其当作无符号数解析,就会触发"无效分支索引"的报错(错误里的leaves size is:2说明该联合类型只有2个分支,合法索引只能是0或1)
解决步骤
- 检查fastavro代码,确保处理联合类型时,索引值是合法的非负整数,且不超过对应联合类型的分支数量
- 若处理允许为null的可选字段,严格遵循Avro规范:将null作为联合类型的第一个分支,写入时用0表示null、1表示实际值类型
- 重新生成Avro文件时,开启fastavro的严格模式(
strict=True),强制校验写入的索引值是否符合规范,避免非法值被写入 - 若已有生成的文件,可使用
avro-tools等工具检查文件的Schema和数据,定位具体有问题的字段与记录
内容的提问来源于stack exchange,提问作者TX412
相关产品推荐
相关产品推荐

