简体   繁体   English

如何从雪花中的变体列创建子集?

[英]How to create a subset from a variant column in snowflake?

For example, suppose my variant column "xyz" consists of data like this:例如,假设我的变量列“xyz”包含如下数据:

{
  "post_new_visits": "Repeat",
  "post_new1_week": "Thursday",
  "post_new2_appt": "Weekday",
  "post_new3_site": "12:50AM",
  "post_new4_channel": "5.0",
  "pre_new2_appt": "Weekday",
  "pre_new3_site": "12:50AM",
  "pre_new4_channel": "5.0"
}

I want a new variant column from above variant column, which should only have "post*" key values, something like below,output should be like this.我想从上面的变量列中创建一个新的变量列,它应该只有“post*”键值,如下所示,output 应该是这样的。

{
  "post_new_visits": "Repeat",
  "post_new1_week": "Thursday",
  "post_new2_appt": "Weekday",
  "post_new3_site": "12:50AM",
  "post_new4_channel": "5.0",
}

Is there any way i can acheive this?有什么办法可以实现吗?

Maybe you can flatten and re-construct the JSON.也许您可以展平并重新构建 JSON。 For example:例如:

create table tmp ( v variant )
as 
select
    parse_json(
        '{  "post_new_visits": "Repeat",
          "post_new1_week": "Thursday",
          "post_new2_appt": "Weekday",
          "post_new3_site": "12:50AM",
          "post_new4_channel": "5.0",
          "pre_new2_appt": "Weekday",
          "pre_new3_site": "12:50AM",
          "pre_new4_channel": "5.0"}'
    )
union all                              
select
    parse_json(
        '{  "post_new_visits": "New",
          "post_new1_week": "Friday",
          "post_new2_appt": "Weekday",
          "post_new3_site": "13:50AM",
          "post_new4_channel": "4.0",
          "pre_new2_appt": "Weekday",
          "pre_new3_site": "14:50AM",
          "pre_new4_channel": "2.0"}'
    );                                      




select
    OBJECT_AGG(v2.key, v2.value)
from
    tmp,
    lateral flatten(input => v) v2
where
    v2.key like 'post%'
group by
    v2.seq;

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

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