繁体   English   中英

将 JSON object 列值吐到雪花上的新列中(SQL)

[英]spit JSON object column values into new columns on snowflake ( SQL )

我想将具有多个值的 json 列拆分为新列,如下图所示。 我正在使用雪花,因为那是数据所在的位置。

例如,我想要namepredictedlevelscore全部作为新列。

JSON 列内容

因此,使用此 CTE 来提供输入/数据:

with data as (
SELECT '---
- trackingId: 0
  name: English
  predicated: 6
  level: higher
  score: 6' as subjects
)

让我们把它分成几部分:

select d.*
    ,s.seq
    ,s.value as raw
    ,trim(trim(s.value,'-'),' ') as trimmed 
    ,split(trimmed,':') as parts
    ,trim(parts[0]) as key
    ,trim(parts[1]) as val
    ,iff(key='name', val,null) as name
    ,iff(key='predicated', val,null) as predicated
    ,iff(key='level', val,null) as level
    ,iff(key='score', val,null) as score
from data as d,
table(split_to_table(d.subjects, '\n')) s
where trimmed <> ''

给出:

科目 序列号 生的 修剪过的 部分 钥匙 名称 预测的 等级 分数
--- - trackingId: 0 名称: English predicated: 6 level: higher score: 6 1个 - 跟踪 ID:0 追踪编号:0 [ "trackingId", " 0" ] 跟踪号码 0
--- - trackingId: 0 名称: English predicated: 6 level: higher score: 6 1个 名称:英文 名称:英文 [ "姓名", "英文" ] 名称 英语 英语
--- - trackingId: 0 名称: English predicated: 6 level: higher score: 6 1个 预测:6 预测:6 [“预测”,“6”] 预测的 6个 6个
--- - trackingId: 0 名称: English predicated: 6 level: higher score: 6 1个 等级:较高 等级:较高 [“水平”,“更高”] 等级 更高 更高
--- - trackingId: 0 名称: English predicated: 6 level: higher score: 6 1个 分数:6 分数:6 [“得分”,“6”] 分数 6个 6个

所以我们可以将其回滚:

select seq
    ,max(name) as name
    ,max(predicated) as predicated
    ,max(level) as level
    ,max(score) as score
from (
    select d.*
        ,s.seq
        ,trim(trim(s.value,'-'),' ') as trimmed 
        ,split(trimmed,':') as parts
        ,trim(parts[0]) as key
        ,trim(parts[1]) as val
        ,iff(key='name', val,null) as name
        ,iff(key='predicated', val,null) as predicated
        ,iff(key='level', val,null) as level
        ,iff(key='score', val,null) as score
    from data as d,
    table(split_to_table(d.subjects, '\n')) s
    where trimmed <> ''
)
group by seq;

给予:

序列号 名称 预测的 等级 分数
1个 英语 6个 更高 6个

您可以使用DOC将 JSON 数据展平到不同的列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM