Snowflake如何同时插入默认值与OBJECT_CONSTRUCT构造的对象?
解决Snowflake插入默认IDENTITY值与构造对象的问题
方案1:省略IDENTITY列直接插入
因为id是IDENTITY(1,1)类型,插入时如果不指定该列,Snowflake会自动生成递增数值,无需显式传入DEFAULT。可以用以下两种写法:
使用VALUES子句
INSERT INTO scenarios (information) VALUES (object_construct('type','new','size','medium'));
使用SELECT子句
INSERT INTO scenarios (information) SELECT object_construct('type','new','size','medium');
方案2:显式指定IDENTITY列的兼容写法
如果必须显式写出id列,可以通过子查询允许使用DEFAULT的特性,结合主查询构造OBJECT数据:
INSERT INTO scenarios (id, information) SELECT v.id, object_construct('type','new','size','medium') FROM VALUES(DEFAULT) v(id);
这种写法既满足了id列使用默认值的需求,又能正常调用object_construct函数生成OBJECT类型数据。
验证结果
执行上述语句后,查询表数据:
SELECT * FROM scenarios;
会得到如下类似结果:
| ID | INFORMATION |
|---|---|
| 1 | { "type": "new", "size": "medium" } |
内容的提问来源于stack exchange,提问作者slothish1
相关产品推荐
相关产品推荐

