是否存在支持读取Google Spanner JSON字段的Apache Beam版本?
Apache Beam读取Spanner JSON类型(类型编码11)解决方案
Python侧处理方案
- 优先升级依赖版本:
apache_beam[gcp]2.40.0及以上版本已经更新了Spanner底层依赖,原生支持类型编码11的JSON字段解析,直接执行安装命令升级即可:pip install apache_beam[gcp]>=2.40.0,升级后读取到的JSON字段会自动映射为Python字典类型。
注意:你之前尝试的字段强制类型转换属于DDL修改操作,确实为非法操作,下述SQL函数转换是Spanner官方允许的合法操作 - 若业务侧限制无法升级Beam版本,可修改查询语句通过内置函数做转换:查询时不要直接读取JSON字段,改为
TO_JSON_STRING(你的JSON字段名) AS 别名,该函数会将JSON内容转换为标准字符串返回,你拿到返回结果后调用json.loads()自行解析即可。 - 若无法修改查询语句,可自定义Spanner读取的结果解析逻辑:继承Beam的Spanner Read transform,重写类型解析分支,匹配到类型编码11时直接读取对应二进制内容转换为字符串,再做JSON解析即可。
Java侧依赖情况
- Apache Beam 2.39.0及以上版本绑定的Spanner Java客户端版本已经≥6.16.1,原生支持JSON类型读取,读取到的JSON字段会自动映射为
com.google.gson.JsonObject类型,无需额外适配。 - 若使用低于2.39.0的Beam版本,也可以参考Python侧的处理逻辑,在查询语句中调用
TO_JSON_STRING函数转换为字符串后,使用Gson、Jackson等JSON工具类自行解析即可,无需完整搭建复杂的Java测试环境做版本验证。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

