如何从 SnowFlake 中的 JSON 字符串解析特定数据?

Posted

技术标签:

【中文标题】如何从 SnowFlake 中的 JSON 字符串解析特定数据?【英文标题】:How to parse a specific data from a JSON string in SnowFlake? 【发布时间】:2020-05-26 23:34:42 【问题描述】:

我对 SnowFlake 很陌生,我正在尝试处理数据集。我感兴趣的专栏有多个反馈以 JSON 格式合并为一个,我只想挖掘相关的键。这是让我们说 Column_X 的快照:

寻找一种方法来解析这些数据,使我有一个新列,如“riskIndicator”和“riskIndicator”,其值为 27、74 作为两个新行。我正在尝试像下面的代码一样进行解析,但这不起作用。看过 javascript/UDF 方法,但这篇文章看起来很复杂。

,get_path(parse_json("riskIndicatorLNInstantID"),'riskCode') as riskIndicator

我将感谢您在这里提供任何形式的帮助/建议。 谢谢。

【问题讨论】:

【参考方案1】:

因此,如果您遇到的问题是分解 json,您将需要使用 FLATTEN

with data as (
    select parse_json('["description":"unable to paste json", "riskCode":"27","seq":1,"description":"typing in json is painful", "riskCode":"74","seq":2]') as json
)
select d.json
    ,f.value:riskCode as riskIndicator
from data d
 ,lateral flatten(input=>d.json) f;

给予:

JSON                                       RISKINDICATOR
[ "description": "unable to paste j...    "27"
[ "description": "unable to paste j...    "74"

【讨论】:

非常感谢@Simeon。这真的很有帮助而且很干净。非常感谢您的快速响应。【参考方案2】:

Lateral flatten 可以帮助提取 JSON 对象的字段,并且是使用相应名称逐个提取它们的非常好的替代方法。但是,有时 JSON 对象可以嵌套,通常提取这些嵌套对象需要知道它们的名称

文档参考:https://community.snowflake.com/s/article/Dynamically-extract-multi-level-JSON-object-using-lateral-flatten

【讨论】:

以上是关于如何从 SnowFlake 中的 JSON 字符串解析特定数据?的主要内容,如果未能解决你的问题,请参考以下文章

在我们将其解析为 JSON 之前,Snowflake 如何转义对象数组字符串中的所有特殊字符?

如何从 Snowflake Stage 加载大型 JSON 文件?

从 Snowflake 中的字符串中删除非 ASCII 字符

如何在 Snowflake 中的嵌套 JSON 中获取值(基于相同 JSON 中存在的值)

从 JSON 数组中的字符串中提取字段

如何防止 Snowflake Python 连接器在 ARRAY/OBJECT/VARIANT 类型列上进行 json 格式设置?