snowflake json 检索具有特定值的标签
snowflake json retrieve tags with specific value
雪花中的值 table 像这样:
{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555"
"some_id": "000987",
"plus_tag": "yes"
}
从此标签中,需要检索其中包含“ID”的所有键,寻找如下结果:
"_my_id1": "111",
"_my_id2": "123",
"some_id": "000987"
结果可以是json或字符串
使用以下数据 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select * from data_cte;
+-------------------------------+
| COLUMN1 |
|-------------------------------|
| { |
| "value": "0", |
| "_my_id1": "111", |
| "_my_id2": "123", |
| "some_tag": "random", |
| "something_else": "random1", |
| "seg": "123,234,234,444,555", |
| "some_id": "000987", |
| "plus_tag": "yes" |
| } |
+-------------------------------+
查询以获取所有带 ID 键的信息 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select key,value from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+---------+----------+
| KEY | VALUE |
|---------+----------|
| _my_id1 | "111" |
| _my_id2 | "123" |
| some_id | "000987" |
+---------+----------+
从上面的输出构造回 JSON 作为 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select to_json(object_construct(key,value)) as col from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+----------------------+
| COL |
|----------------------|
| {"_my_id1":"111"} |
| {"_my_id2":"123"} |
| {"some_id":"000987"} |
+----------------------+
输出为字符串 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select '{'||listagg(key||':'||value,',')||'}' as col from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+------------------------------------------+
| COL |
|------------------------------------------|
| {_my_id1:111,_my_id2:123,some_id:000987} |
+------------------------------------------+
雪花中的值 table 像这样:
{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555"
"some_id": "000987",
"plus_tag": "yes"
}
从此标签中,需要检索其中包含“ID”的所有键,寻找如下结果:
"_my_id1": "111",
"_my_id2": "123",
"some_id": "000987"
结果可以是json或字符串
使用以下数据 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select * from data_cte;
+-------------------------------+
| COLUMN1 |
|-------------------------------|
| { |
| "value": "0", |
| "_my_id1": "111", |
| "_my_id2": "123", |
| "some_tag": "random", |
| "something_else": "random1", |
| "seg": "123,234,234,444,555", |
| "some_id": "000987", |
| "plus_tag": "yes" |
| } |
+-------------------------------+
查询以获取所有带 ID 键的信息 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select key,value from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+---------+----------+
| KEY | VALUE |
|---------+----------|
| _my_id1 | "111" |
| _my_id2 | "123" |
| some_id | "000987" |
+---------+----------+
从上面的输出构造回 JSON 作为 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select to_json(object_construct(key,value)) as col from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+----------------------+
| COL |
|----------------------|
| {"_my_id1":"111"} |
| {"_my_id2":"123"} |
| {"some_id":"000987"} |
+----------------------+
输出为字符串 -
with data_cte as
(
select column1 from values('{
"value": "0",
"_my_id1": "111",
"_my_id2": "123",
"some_tag": "random",
"something_else": "random1",
"seg": "123,234,234,444,555",
"some_id": "000987",
"plus_tag": "yes"
}')
)
select '{'||listagg(key||':'||value,',')||'}' as col from data_cte,
lateral flatten(input=>parse_json(column1))
where key like '%id%';
+------------------------------------------+
| COL |
|------------------------------------------|
| {_my_id1:111,_my_id2:123,some_id:000987} |
+------------------------------------------+