【问题标题】:Snowflake Unable to insert multiple rows using insert into having md5 field雪花无法使用插入到具有 md5 字段的多行
【发布时间】:2021-05-27 17:41:41
【问题描述】:

我正在使用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”。句法 第 3 行错误,位置 50 出人意料的 ''DATA_SOURCE_1''。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这对我来说似乎是一个错误,它有点类似于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')
    

    【讨论】:

    • merge into一样吗?
    • 没有尝试过合并,但应该不会太难测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-07-22
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多