首页 > 解决方案 > 如何使用 DAO 插入雪花变体字段?

问题描述

我有以下代码:

@RegisterMapper(MyEntity.ResultMapper.class)
@UseStringTemplate3StatementLocator
public interface MyDao {

    @Transaction(TransactionIsolationLevel.SERIALIZABLE)
    @SqlBatch("INSERT INTO mySchema.myTable (" +
        " id, entity_type, entity_id, flags " +
        " ) VALUES " +
        "(" +
        " :stepId , :entityType , :entityId,parse_json(:flags) " +
        ")")
    @BatchChunkSize(500)
    Object create( @BindBean List<MyEntity> entities );
}

如您所见,我正在使用此 DAO 将实体列表批量插入到我的雪花表中。

问题是我无法插入标志列,这是一个变体。我已经尝试过to_variant(:flags)并且目前parse_json(:flags),但 JDBI 不断抛出以下错误:

net.snowflake.client.jdbc.SnowflakeSQLException: SQL 
compilation error:
Invalid expression [PARSE_JSON(?)] in VALUES clause 
[statement:"INSERT INTO mySchema.myTable ( id, entity_type, 
entity_id, flags  ) VALUES ( :stepId , :entityType , :entityId,
parse_json(:flags) )", located:"null", rewritten:"null",
arguments:{ positional:{}, named:{timeStamp:'null', 
entityType:MYENTITY,
flags:'{"client":"myClient","flow":"myFlow"}',stepId:null, 
entityId:'189643357241513', class:class myOrg.MyEntity}, finder:[]}]

我应该如何传递标志列中的值?有没有人尝试过这个?MyEntity 中的flags字段由我控制,我可以将其保留为 POJO 或字符串,以帮助我解决此问题。

标签: daojdbisnowflake-cloud-data-platform

解决方案


答案见黄建生的评论

INSERT INTO T SELECT parse_json(:flag);

推荐阅读