[英]spit JSON object column values into new columns on snowflake ( SQL )
因此,使用此 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.