PQL 快速入门
PQL基础
数据流转
输出文件
PQL 中的语句
分支和循环
更优雅的数据操作
PQL 高级特性
系统函数
自定义函数
扩展操作
其他语言相关
附录
PUT 语句用于将缓冲区的数据更新或保存到目标数据源,由于是批量操作,对于关系型数据库来说,PUT 的效率非常高。
以上示例中,将 GET 得到的数据 PUT 了三次,分别在两个库中执行了删除、插入和更新操作,三次更新都是使用的同样的数据。PUT 语句在批量更新时,将数据自动以每 1000 行分批入库,这个数字经过作者多次测试,可以达到最佳性能。
PUT 语句支持 3 种格式的数据占位符,分别说明如下:
?
:要求 PUT 语句中问号占位符的数量和位置顺序必须与 GET 得到的数据的列数和字段顺序一致,自动判断数据类型。如上面示例语句要求第一个问号是name
,第二个问题是score
,须与 GET 得到的数据字段的位置和数量对应。问号占位符是 JDBC 原生支持的占位符类型。#
+字段名:这种占位符不要求字段顺序和数量对应,但是不会自动判断数据类型,如遇字符串或时间等数据类型,需要自已添加引号。如上面示例中第一条 PUT 语句和第三条 PUT 语句。井号占位符由于最简单,所以可以保证最大的灵活性,甚至可以非字段位置输入,如 PUT # UPDATE table_#name SET score=#score
。这个场景在分库分表时会经常用到。&
+字段名:这种占位符也不要求字段顺序和数量对应,而且会自动判断数据类型,如遇字符串或时间等数据类型,会自动添加单引号。UPDATE table SET name='#name_123', value='#分数'
,这种情况下只能识别成#name_123
,不能正确识别成#name
和#分数
。解决办法是在字段名两端加小括号,修改成UPDATE table SET name='#(name)_123', value='#(分数)'
。虽然 PQL 提供了解决方案,如非特别需要,仍建议在 SELECT 语句中使用 AS 将字段名命名为英文。#
和与号&
与变量名冲突时,请使用特殊字符的编码替换,其中#
替换为~u0023
,&
替换为~u0026
。在有的数据库中,如 MySQL,支持在 INSERT 语句中的 VALUES 后面附加多组值,用这种方式将数据一次性插入到数据库,例如:
这种操作在大数据量下会极大的提高插入性能,PUT 语句也支持设置这种串接操作。语法如下:
是的,不需要输出 VALUES 及后面的内容,但要求字段顺序和数量一致,可以理解为是省略了问号点位符的 INSERT 语句。
@AFFECTED_ROWS_OF_LAST_PUT
最后一次 PUT 影响目标数据库的行数。@TOTAL_AFFECTED_ROWS_OF_RECENT_PUT
最近所有 PUT 影响目标数据库的行数。BATCH 是 PUT 语句的多线程版本。如果获取数据使用的是 PAGE 或 BLOCK 语句,需要将百万级甚至千万级的数据流转到目标数据库,由于 PUT 是单线程的,性能很难满足如此大的数据量要求。这种场景下可以使用 BATCH 语句 代替 PUT。
参考链接