雪花无法使用插入到具有 md5 字段的插入多行

时间:2021-02-25 11:01:53

标签: sql sql-insert snowflake-cloud-data-platform bulkinsert

我使用 INSERT INTO table VALUES 添加多行,如下所示:

insert into hub values 
 (md5(md5('test1')) as enc,  CURRENT_TIMESTAMP() as ct, 'DATA_SOURCE_1', 'test1'),
 (md5(md5('test2')) as enc,  CURRENT_TIMESTAMP() as ct, 'DATA_SOURCE_1', 'test2')
;

我收到以下错误:

<块引用>

SQL 编译错误:位置 19 处的语法错误第 2 行意外 '作为'。位置 28 处的语法错误第 2 行意外 'CURRENT_TIMESTAMP'。位置 50 处的语法错误第 2 行意外 ''DATA_SOURCE_1''。位置 19 处的语法错误第 3 行意外的“as”。句法 位置 28 处的第 3 行错误“CURRENT_TIMESTAMP”。句法 位置 50 处的错误行 3 意外“DATA_SOURCE_1”。

我尝试从子查询中删除 as,但出现以下错误:

<块引用>

SQL 编译错误:VALUES 中的表达式无效 [MD5(MD5('test'))] 条款

我知道 md5 应该返回一个值而不是表达式,这就是我使用 AS 但它不起作用的原因。

1 个答案:

答案 0 :(得分:2)

这对我来说似乎是一个错误,它有点类似于 this question。您可以以不同的方式编写插入内容,但可以达到相同的结果:

insert into hub
    select md5(md5('test1')), CURRENT_TIMESTAMP(), 'DATA_SOURCE_1', 'test1'
union all
    select md5(md5('test2')), CURRENT_TIMESTAMP(), 'DATA_SOURCE_1', 'test2'

或者像下面这样,如果 VALUE 部分中有很多行,它可能会更简洁:

insert into hub
select
    md5(md5(column1)),
    column2,
    column3,
    column4
from
values
       ('test1', CURRENT_TIMESTAMP(), 'DATA_SOURCE_1', 'test1'),
       ('test2', CURRENT_TIMESTAMP(), 'DATA_SOURCE_1', 'test2')