如何转换雪花中的数组对象
How to convert array object in snowflake
我想将下面的对象数组转换成另一种形式(varname 被忽略,因为它不是必需的,key 和 value 用于生成输出形式)。任何线索将不胜感激
输入数组:
[
{
“键”:“string_U6”,
“值”:“大马车”,
“varname”:“pagenameplate”
},
{
“键”:“string_U13”,
“价值”:“2021”,
“变量名”:“年份”
}
]
输出
[
{
"string_U6": "老爷车"
},
{
"string_U13": "2021"
}
]
您可以尝试使用 map 如下:
var input = [ { "key": "string_U6", "value": "grandwagoneer", "varname": "pagenameplate" }, { "key": "string_U13", "value": "2021", "varname": "year" } ];
var output = input.map(function(entry){
let obj = {};
obj[entry.key] = entry.value;
return obj;
});
console.log(output);
由于问题询问如何在 snowflake 中转换数组对象,我想分享 Snowflake 的实现方式:
-- SQL to create a sample table with data
create table sample_table (v variant )
as select parse_json(' [ { "key": "string_U6", "value": "grandwagoneer", "varname": "pagenameplate" },
{ "key": "string_U13", "value": "2021", "varname": "year" } ]');
-- query to parse the variant and create the array:
select ARRAY_AGG( OBJECT_CONSTRUCT(i.value:key::varchar, i.value:value::varchar) )
from sample_table,
lateral flatten ( sample_table.v ) i;
它将产生您想要的精确输出。
我想将下面的对象数组转换成另一种形式(varname 被忽略,因为它不是必需的,key 和 value 用于生成输出形式)。任何线索将不胜感激
输入数组: [ { “键”:“string_U6”, “值”:“大马车”, “varname”:“pagenameplate” }, { “键”:“string_U13”, “价值”:“2021”, “变量名”:“年份” } ]
输出
[ { "string_U6": "老爷车" }, { "string_U13": "2021" } ]
您可以尝试使用 map 如下:
var input = [ { "key": "string_U6", "value": "grandwagoneer", "varname": "pagenameplate" }, { "key": "string_U13", "value": "2021", "varname": "year" } ];
var output = input.map(function(entry){
let obj = {};
obj[entry.key] = entry.value;
return obj;
});
console.log(output);
由于问题询问如何在 snowflake 中转换数组对象,我想分享 Snowflake 的实现方式:
-- SQL to create a sample table with data
create table sample_table (v variant )
as select parse_json(' [ { "key": "string_U6", "value": "grandwagoneer", "varname": "pagenameplate" },
{ "key": "string_U13", "value": "2021", "varname": "year" } ]');
-- query to parse the variant and create the array:
select ARRAY_AGG( OBJECT_CONSTRUCT(i.value:key::varchar, i.value:value::varchar) )
from sample_table,
lateral flatten ( sample_table.v ) i;
它将产生您想要的精确输出。