Snowflake cloud data platform 使用数组和对象从多个值插入雪花表
我正试图通过一条SQL语句在Snowflake中插入多个带有数组和结构的行。 要在列中插入值数组,我使用的是Snowflake cloud data platform 使用数组和对象从多个值插入雪花表,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正试图通过一条SQL语句在Snowflake中插入多个带有数组和结构的行。 要在列中插入值数组,我使用的是ARRAY\u CONSTRUCT函数,要插入结构/字典/对象,我使用的是OBJECT\u CONSTRUCT函数 例如 插入到“我的数据库”、“我的模式”、“我的表格” (“ID”、“TS”、“TEXT”、“DATEONLY”、“ARRAY”、“OBJ”、“BOOL”、“DOUBLE”、“INT”、“DEC_18_9”) 价值观 ('id1','2020-11-26 14:01:27.8
ARRAY\u CONSTRUCT
函数,要插入结构/字典/对象,我使用的是OBJECT\u CONSTRUCT
函数
例如
插入到“我的数据库”、“我的模式”、“我的表格”
(“ID”、“TS”、“TEXT”、“DATEONLY”、“ARRAY”、“OBJ”、“BOOL”、“DOUBLE”、“INT”、“DEC_18_9”)
价值观
('id1','2020-11-26 14:01:27.868','19','2020-11-26',
数组构造(0,1,2),对象构造('this','is','my','OBJECT','query',',
对象构造('field1','one','field2',数组构造('field2a','two'),
“field3”,数组构造(3,4,5)),假,178482300.96318725,912345619.876543190),
('id2','2020-11-26 14:01:27.868','19','2020-11-26',
数组构造(0,1,2),对象构造('this','is','my','OBJECT','query',',
对象构造('field1','one','field2',数组构造('field2a','two'),
“field3”,数组构造(3,4,5)),假,178482300.96318725,912345619.87654390)
;
这将导致一个例外:
SQL编译错误:VALUES子句中的表达式[ARRAY_CONSTRUCT(0,1,2)]无效
使用以下语法插入一行:
插入到“我的数据库”、“我的模式”、“我的表格”
(“ID”、“TS”、“TEXT”、“DATEONLY”、“ARRAY”、“OBJ”、“BOOL”、“DOUBLE”、“INT”、“DEC_18_9”)
选择“id1”、“2020-11-26 14:01:27.868”、“19”、“2020-11-26”,
数组构造(0,1,2),对象构造('this','is','my','OBJECT','query',',
对象构造('field1','one','field2',数组构造('field2a','two'),
“field3”,数组构造(3,4,5)),假,178482300.96318725,912345619.876543190
;
然而,目前尚不清楚这是否以及如何用于插入多行
表定义为:
创建或替换临时表“MY_DB”、“MY_架构”、“MY_表”
(“ID”字符串不为空,“TS”时间戳不为空,“文本”字符串,
“DATEONLY”日期,“ARRAY”数组,“OBJ”对象,“BOOL”布尔值,
“DOUBLE”DOUBLE,“INT”BIGINT,“DEC_18_9”数字(18,9)
);
正确的方法是什么?
(我是否需要将数据溢出到一个文件中并从该文件加载,或者是否有直接的方法来完成此操作?)
我只在一封信中提到了这一点
为了澄清,我将数据插入到一个临时表中,并从中合并到另一个表中,因为我找不到通过SQL语句从值(即不从表)合并数据的方法。值不支持数组构造表达式,这就是为什么会出现“无效表达式”错误: 大多数简单的算术表达式和字符串函数都可以 在编译时求值,但大多数其他表达式不能 您可以使用SELECT+UNION ALL而不是值:
insert into "MY_DB"."MY_SCHEMA"."MY_TABLE"
("ID", "TS", "TEXT", "DATEONLY", "ARRAY", "OBJ", "BOOL", "DOUBLE", "INT", "DEC_18_9")
SELECT 'id1', '2020-11-26 14:01:27.868', '19', '2020-11-26',
ARRAY_CONSTRUCT(0, 1, 2), OBJECT_CONSTRUCT('this', 'is', 'my', 'object', 'query',
OBJECT_CONSTRUCT('field1', 'one', 'field2', ARRAY_CONSTRUCT('field2a', 'two')),
'field3', ARRAY_CONSTRUCT(3, 4, 5)), FALSE, 178482300.96318725, 9, 12345619.876543190
UNION ALL
SELECT 'id2', '2020-11-26 14:01:27.868', '19', '2020-11-26',
ARRAY_CONSTRUCT(0, 1, 2), OBJECT_CONSTRUCT('this', 'is', 'my', 'object', 'query',
OBJECT_CONSTRUCT('field1', 'one', 'field2', ARRAY_CONSTRUCT('field2a', 'two')),
'field3', ARRAY_CONSTRUCT(3, 4, 5)), FALSE, 178482300.96318725, 9, 12345619.876543190;
值不支持数组_构造表达式,这就是为什么会出现“无效表达式”错误: 大多数简单的算术表达式和字符串函数都可以 在编译时求值,但大多数其他表达式不能 您可以使用SELECT+UNION ALL而不是值:
insert into "MY_DB"."MY_SCHEMA"."MY_TABLE"
("ID", "TS", "TEXT", "DATEONLY", "ARRAY", "OBJ", "BOOL", "DOUBLE", "INT", "DEC_18_9")
SELECT 'id1', '2020-11-26 14:01:27.868', '19', '2020-11-26',
ARRAY_CONSTRUCT(0, 1, 2), OBJECT_CONSTRUCT('this', 'is', 'my', 'object', 'query',
OBJECT_CONSTRUCT('field1', 'one', 'field2', ARRAY_CONSTRUCT('field2a', 'two')),
'field3', ARRAY_CONSTRUCT(3, 4, 5)), FALSE, 178482300.96318725, 9, 12345619.876543190
UNION ALL
SELECT 'id2', '2020-11-26 14:01:27.868', '19', '2020-11-26',
ARRAY_CONSTRUCT(0, 1, 2), OBJECT_CONSTRUCT('this', 'is', 'my', 'object', 'query',
OBJECT_CONSTRUCT('field1', 'one', 'field2', ARRAY_CONSTRUCT('field2a', 'two')),
'field3', ARRAY_CONSTRUCT(3, 4, 5)), FALSE, 178482300.96318725, 9, 12345619.876543190;
通过反复试验,我找到了以下解决方案:
插入到“我的数据库”、“我的模式”、“我的表格”
选择$1、$2、$3、$4、PARSE_JSON($5)、PARSE_JSON($6)、$7、$8、$9、$10
从价值观
('id1','2020-11-26 14:01:27.868','19','2020-11-26','[0,1,2]',
{“this”:“is”,“my”:“object”,
“查询”:{“字段1”:“一”,“字段2”:[“字段2a”,“两”],“字段3”:[3,4,5]},
假,178482300.96318725,912345619.876543190),,
('id2','2020-11-26 14:01:27.868','19','2020-11-26','[0,1,2]',
{“this”:“is”,“my”:“object”,
“查询”:{“字段1”:“一”,“字段2”:[“字段2a”,“两”],“字段3”:[3,4,5]},
假,178482300.96318725,92345619.87654390)
;
仅供参考,通过一个简短的测试,Snowflake在JSON中识别
NaN
、-inf
和inf
,而周围没有引号作为浮点值,例如{“my_field”:NaN}
,通过反复试验,我找到了以下解决方案:
插入到“我的数据库”、“我的模式”、“我的表格”
选择$1、$2、$3、$4、PARSE_JSON($5)、PARSE_JSON($6)、$7、$8、$9、$10
从价值观
('id1','2020-11-26 14:01:27.868','19','2020-11-26','[0,1,2]',
{“this”:“is”,“my”:“object”,
“查询”:{“字段1”:“一”,“字段2”:[“字段2a”,“两”],“字段3”:[3,4,5]},
假,178482300.96318725,912345619.876543190),,
('id2','2020-11-26 14:01:27.868','19','2020-11-26','[0,1,2]',
{“this”:“is”,“my”:“object”,
“查询”:{“字段1”:“一”,“字段2”:[“字段2a”,“两”],“字段3”:[3,4,5]},
假,178482300.96318725,92345619.87654390)
;
仅供参考,通过一个简短的测试,Snowflake在JSON中识别NaN
、-inf
和inf
,而周围没有引号作为浮点值,例如{“my_field”:NaN}