从雪花表中获取数据并将 JSON 值插入到另一个雪花表中的 VARIANT 列

时间:2021-05-11 03:27:35

标签: json snowflake-cloud-data-platform

我正在尝试从 Snowflake 表 Employee 中获取数据,并以 JSON 格式将值插入到另一个雪花表的 VARIANT 列中。

<头>
EMP_ID EMP_NAME 薪水 位置
1 ABC 100 工程师
2 DEF 300 经理
3 GHI 500 总监

预期的 JSON 格式:

{
"EMP_ID":"1",
"EMP_NAME":"ABC",
"SALARY":"100",
"POSITION":"ENGINEER"
}
{
"EMP_ID":"2",
"EMP_NAME":"DEF",
"SALARY":"300",
"POSITION":"MANAGER"
}
{
"EMP_ID":"3",
"EMP_NAME":"GHI",
"SALARY":"500",
"POSITION":"DIRECTOR"
}


上述 JSON 格式的数据应加载到表 EMP_JSON(load_data VARIANT, load_date TIMESTAMP_LTZ)。

我尝试对值进行硬编码。但我想动态获取值。

INSERT INTO EMP_JSON
SELECT PARSE_JSON('{"EMP_ID":"1", "EMP_NAME":"ABC", "SALARY":"100", "POSITION":"ENGINEER"}'), CURRENT_TIMESTAMP AS LOAD_DATE ;

您能告诉我如何将这样的 JSON 值加载到 Snowflake 中的变体列吗?

2 个答案:

答案 0 :(得分:1)

@vvazza,使用 object_construct 函数从表中选择数据,它返回一个 JSON 对象,可以转到变体列。

答案 1 :(得分:1)

正如前面提到的,您可以使用 object_construct 来生成 JSON 对象。重要的一点是,您可以使用 * 参数调用 object_construct 来动态读取所有列(您不需要指定列)并生成 JSON:

create table emp( EMP_ID number, EMP_NAME varchar, SALARY number, POSITION varchar );
INSERT INTO emp(EMP_ID,EMP_NAME,SALARY,POSITION) VALUES (1,'ABC',100,'ENGINEER');
INSERT INTO emp(EMP_ID,EMP_NAME,SALARY,POSITION) VALUES (2,'DEF',300,'MANAGER');
INSERT INTO emp(EMP_ID,EMP_NAME,SALARY,POSITION) VALUES (3,'GHI',500,'DIRECTOR');

create table EMP_JSON(load_data VARIANT, load_date TIMESTAMP_LTZ);

insert into EMP_JSON select object_construct(*), current_timestamp from emp;

select * from EMP_JSON;

如果要选择特定列:

insert into EMP_JSON select select object_construct('EMP_ID',EMP_ID, 'EMP_NAME', EMP_NAME), current_timestamp from emp;

OBJECT_CONSTRUCT https://docs.snowflake.com/en/sql-reference/functions/object_construct.html