使用Snowflake SQL解析JSON

时间:2018-08-27 19:40:54

标签: sql json snowflake-datawarehouse

我有一个以怪异方式编写的JSON对象。

> {"custom": [ { "name": "addressIdNum", "valueNum": 12345678},  {
> "name": "cancelledDateAt", "valueAt": "2017-02-30T01:43:04.000Z" }] }

不确定如何解析这样的内容。密钥是addressIdNum和cancelledDateAt,值分别是12345678和2017-02-30T01:43:04.000Z。

如何使用Snowflake SQL对此进行解析?

感谢您的所有帮助!

最好, Preet Rajdeo

1 个答案:

答案 0 :(得分:1)

如果您的输入始终是这种形式(数组中的两个元素,同一元素中的相同字段),则可以结合使用PARSE_JSON函数和path access

只需尝试一下:

with input as (
  select parse_json(
    '{"custom": [ { "name": "addressIdNum", "valueNum": 12345678},  {"name": "cancelledDateAt", "valueAt": "2017-02-30T01:43:04.000Z" }] }') 
  as json) 
select json:custom[0].valueNum::integer, json:custom[1].valueAt::timestamp from input;
----------------------------------+-----------------------------------+
 JSON:CUSTOM[0].VALUENUM::INTEGER | JSON:CUSTOM[1].VALUEAT::TIMESTAMP |
----------------------------------+-----------------------------------+
 12345678                         | 2017-03-01 17:43:04               |
----------------------------------+-----------------------------------+

但是,如果您的数据结构可能不同(例如,数组中的元素可能具有不同的顺序),则最好在Snowflake中编写JavaScript UDF,以将此类混乱的数据转换为更简单的数据。