dao - 如何使用 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 或字符串,以帮助我解决此问题。
解决方案
答案见黄建生的评论:
INSERT INTO T SELECT parse_json(:flag);
推荐阅读
- python - 当我通过 FCGI 运行 Flask 时的循环重定向
- python - Python 模式匹配联合
- vb.net - VB计算最大跳跃
- python - 我试图运行一个 python 脚本,但得到 ImportError:尝试相对导入,没有已知的父包
- loops - 已收到符文,但未从 chan 收到 struct
- javascript - REACTJS:我如何在一个 Web 应用程序上拥有多个用户?
- swift - 如何使 mapView 和 segmentedControl 相对于 AdMob 自适应横幅移动
- spring-boot - Spring webclient POST方法 - 错误处理
- bash - macOS 11.2.3 bashrc 没有重新识别常见标志
- python-3.x - 在 jupyter notebook 中循环传入类似终端的命令的值