暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

高效数据加载工具:pw_bulkload

原创 wzg 2024-02-24
444

租户进行数据导入,使用pw_bulkload操作时遇到如下两类问题:

  • 提示找不到vbbl这个schema
  • 提示vbbl这个schema没有权限

提示的文本信息如下:

NOTICE: BULK LOAD START
ERROR: query failed: ERROR:  schema "vbbl" does not exist
DETAIL: query was: SELECT * FROM vbbl.pw_bulkload($1)
NOTICE: BULK LOAD START
ERROR: query failed: ERROR:  permission denied for schema vbbl
DETAIL:  N/A
DETAIL: query was: SELECT * FROM vbbl.pw_bulkload($1)

对应的截图如下:

image.png

image.png

带着上面两个问题,本文进行pw_bulkload工具的使用介绍。

pw_bulkload简介

pw_bulkload是PanWeiDB提供的一款批量加载数据的工具,使用该工具可以提升加载的效率和性能。相比copy命令速度更快,能够跳过shared buffer、wal buffer直接写文件。

同时该工具还提供了出错清理功能,数据导入出错之后,本次导入的数据都要进行回滚,所以需要将本次导入数据清理,防止这些数据被访问,造成查询、执行计划不准确等问题。

pw_bulkload示例

1.首先在db下使用管理员权限账号创建pw_bulkload扩展

CREATE EXTENSION pw_bulkload;

通常连接默认管理库postgres,如果在其他db下使用,也需要在相应的db下执行该操作,否则会出现上面的第1个错误:找不到vbbl这个schema

2.在db下对普通用户赋予vbbl模式的usage权限,使其可调用后续的接口函数

GRANT usage ON SCHEMA vbbl TO admin;

如果不执行该步骤,会出现上面的第2个错误:提示vbbl这个schema没有权限

3.使用pw_bulkload的命令项加载数据
创建测试表

CREATE TABLE test_bulkload(id INT, name VARCHAR);

创建txt文件,写入10个W数据:

$ seq 100000| awk '{print $0"|bulkload"}' > bulkload_output.txt

最后执行如下命令:

$ pw_bulkload \ --input=./bulkload_output.txt \ --output="admin.test_bulkload" \ --option="TYPE=csv" --option="DELIMITER=|" \ --option="ERROR_RECOVERY=YES" \ --port=17700 --dbname=postgres --username=admin --password

注意:
1.连接到哪个db进行操作,就需要在哪个db下创建扩展
2.output参数表名要加模式前缀
3.设置ERROR_RECOVERY=YES,在导入出错时清理本次导入数据。

成功导入的截图如下:
image.png

查看数据:

image.png

4.使用pw_bulkload的控制文件加载数据
可以先清空导入的数据

TRUNCATE TABLE test_bulkload ;

编写.ctl文件

INPUT=/home/panwei/bulkload_output.txt
OUTPUT = admin.test_bulkload
TYPE = CSV
DELIMITER = |
ERROR_RECOVERY=YES

执行命令:

$ pw_bulkload ./my.ctl \ --port=1521 --dbname=postgres --username=admin --password
最后修改时间:2024-02-26 14:05:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论