我正在尝试从 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 中的变体列吗?
答案 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