如何结合Logger在Snowflake Event Table中将Python字典转换为JSON对象
如何结合Logger在Snowflake Event Table中将Python字典转换为JSON对象
我明白你现在碰到的问题啦——用Snowpark的Logger把Python字典写入Snowflake事件表时,结果VALUE列里存的是普通字符串,不是我们想要的结构化JSON对象。这是因为默认的logging机制会直接把字典转成字符串格式,Snowflake没法自动识别成JSON结构,咱们稍微调整一下代码就能搞定~
为啥会变成字符串?
默认情况下,Python的logging模块输出字典时,会直接调用字典的__str__方法,把它转成类似{'abc': '123', 'cdf': '345'}的字符串,这种格式Snowflake只会当成普通文本存在事件表里,不会自动解析成JSON结构。
怎么转成JSON对象?
我们只需要先把Python字典序列化为标准的JSON字符串,再传给Logger输出,Snowflake的事件表(只要VALUE列是VARIANT类型,这也是Snowflake事件表的默认配置哦)就会自动把它解析成结构化的JSON对象。具体操作分两步:
- 第一步:导入Python自带的
json模块,专门用来处理字典和JSON字符串的转换; - 第二步:把原来直接传入字典的日志语句,改成先通过
json.dumps()把字典转成标准JSON字符串,再传给Logger。
修改后的完整代码
import snowflake.snowpark as snowpark import logging import json # 新增导入json模块 def main(session: snowpark.Session): LOGGER = logging.getLogger('snowflake.snowpark.session') dict1 = {"abc": "123", "cdf": "345"} # 把字典序列化为JSON字符串后再输出日志 LOGGER.info(json.dumps(dict1)) return 'Testing the Logging'
改完后效果咋样?
修改完代码运行后,你再去查看Snowflake事件表的VALUE列,就会发现原来的普通字符串已经变成可展开的JSON对象了!之后还能直接用Snowflake的JSON查询语法来访问里面的具体字段,比如用下面的SQL就能取出字典里abc对应的值:
SELECT VALUE:abc FROM YOUR_EVENT_TABLE_NAME;
内容来源于stack exchange
相关产品推荐
相关产品推荐

