为何将Parquet文件加载到BigQuery后表中显示乱码值?
BigQuery加载Parquet后BYTES字段显示异常的原因
核心逻辑:二进制数据的存储与展示规则差异
- 你看到的
MDE=这类值,是BigQuery对BYTES类型数据的默认可视化形式:原始二进制字节会被自动转成Base64字符串,方便在界面中展示(毕竟二进制数据无法直接打印可读字符),并非数据损坏或编码异常。 - 当你用
cast(字段名 AS STRING)转换时,BigQuery会按照UTF-8编码把字节序列解码为原始文本——这说明你的Parquet文件里的BYTES字段,本质是用UTF-8编码的文本内容,只是被以二进制类型存储了。
类型映射的底层原因
- Parquet的
BYTE_ARRAY类型在BigQuery中会被默认映射为BYTES类型,BigQuery不会自动判断二进制内容是否是文本。如果Parquet的生成方把文本数据以二进制格式写入(未指定为STRING类型),BigQuery就会严格按二进制类型处理。 - 这种行为是符合类型规范的:BYTES类型本身就是用来存储原始字节流的,Base64是通用的二进制转文本的编码方式,所以展示出来的是编码后的字符串,而非异常值。
补充说明
如果希望加载后直接得到可读的STRING类型,你可以在加载Parquet时手动指定字段类型为STRING,或者开启Schema自动检测的文本识别规则,避免后续手动转换。
内容的提问来源于stack exchange,提问作者Fares DAOUD
相关产品推荐
相关产品推荐

