pgloader将各类来源的数据加载到PostgreSQL中。它能够转换动态读取的数据,并在加载先后提交原始SQL。
它使用COPY PostgreSQL协议将数据流式传输到服务器,并经过填充一对reject.dat和reject.log文件来管理错误
pgloader 的操做,可使用命令行参数,或者经过读取文件中定义的dsl
格式:html
pgloader commands.load
或者使用参数:mysql
pgloader SOURCE TARGET
pgloader参数能够根据须要加载文件,也能够是特定输入文件的几个链接字符串。git
格式:sql
format:///absolute/path/to/file.ext
format://./relative/path/to/file.ext
format
能够是 csv, fixed, copy, dbf, db3 或者ixf数据库
db://user:pass@host:port/dbname
db
能够是sqlite、mysql、mssql
当使用基于文件的源格式时,pgloader还支持从http位置本地获取文件并在须要时解压缩存档。
在这种状况下,必须使用-type选项指定文件的预期格式
另请注意,某些文件格式须要描述一些实现细节,例如要读取的列和分隔符以及从csv加载时的引用。
对于更复杂的加载方案,您须要使用本文档后面描述的语法编写完整的fledge加载命令。json
对于目标字符串会在后边详细介绍服务器
-h,-help 显示命令用法摘要并退出。
-V,-version 显示pgloader版本字符串并退出。
-E,-list-encodings 列出此版本的pgloader中的已知编码。
-U,-upgrade-config 使用pgloader版本2.x中使用的INI语法将命令行中的给定文件解析为pgloader.conf文件 ,并在标准输出上输出pgloader的新命令语法。
这些选项用于在加载数据时调整pgloader行为架构
-v,-verbose 显示比较可用信息
-q,-quiet 退出
-d,-debug 显示调试级别信息消息。
-D,-root-dir 设置根工做目录(默认为“/ tmp / pgloader”)。
-L,-logfile 设置pgloader日志文件(默认为“/tmp/pgloader/pgloader.log”)。
–log-min-messages 日志消息进入日志文件所需的最低级别的详细程度。关键,日志,错误,警告,通知,信息或调试之一。
–client-min-messages 日志消息进入控制台所需的最低级别详细程度。关键,日志,错误,警告,通知,信息或调试之一。
-S,-summary 用于复制摘要输出的文件名。相对时,文件名扩展为* root-dir *。
文件名的格式默认为人类可读。经过指定扩展名为resp的文件名,可使用机器友好格式(如CSV, COPY(PostgreSQL自带的COPY格式)或JSON)输出。的.csv,.copy或以.json。
-l <file>, - load-lisp-file <file>
在读取命令以前指定lisp <file>进行编译并加载到pgloader映像中,容许定义额外的转换函数。这些函数应该在pgloader.transforms包中定义。此选项可在命令行中出现屡次。
-dry-run
容许测试.load文件而不实际尝试加载任何数据。调试它直到它没问题是有用的,特别是修复链接字符串。
-on-error-stop
改变pgloader行为:而不是试图聪明地处理错误处理并继续加载好的数据,分离掉坏的数据,只要PostgreSQL拒绝发送给它的任何东西就中止。用于调试数据处理,转换功能和特定类型转换。
-self-upgrade <directory>
指定一个<directory>在哪里找到pgloader源,这样它所作的第一件事就是动态加载(并编译成机器代码)另外一个版本的自身,一般是一个像最新的git checkout这样的新版本。
–no-ssl-cert-verification
使用OpenSSL选项接受本地颁发的服务器端证书,避免如下错误消息:
SSL verify error: 20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
解决SSL问题的正确方法是使用可信证书。有时虽然在修复信任证书链的同时使用pgloader设置取得进展是有用的,但也许是由另外一个团队。这个选项颇有用。
参数仅在,使用命令行运行数据加载操做时生效并发
–with "option"
容许从命令行设置选项。您能够根据须要屡次使用该选项。option参数必须遵循SOURCE规范 的源类型的WITH子句
–set "guc_name='value'"
容许从命令行设置PostgreSQL配置。请注意,选项解析与从SET命令子句中使用时相同,特别是必须使用单引号将guc值括起来
–field "…"
容许设置源字段定义。字段按命令行中给出的顺序累积。能够 在源文件中的每一个字段使用-field选项,或者用逗号分隔字段定义,就像在HAVING FIELDS子句中那样
–cast "…"
容许设置特定的强制转换规则以加载数据。
–type csv|fixed|db3|ixf|sqlite|mysql|mssql
若是SOURCE解析不满意,则容许强制源类型。
–encoding <encoding>
设置源文件的编码以从中加载数据。
–before <filename>
解析SQL查询的给定文件名,并在从源加载数据以前对目标数据库运行它们。查询由pgloader自己解析:它们须要以分号(;)结束,文件可能包含i或ir命令以包含另外一个文件
–after <filename>
解析SQL查询的给定文件名,并在从源加载数据后对目标数据库运行它们。查询的解析方式与-before选项相同
要将数据加载到PostgreSQL,pgloader使用COPY流协议。虽然这是加载数据的更快方式,但COPY有一个重要的缺点:
一旦PostgreSQL发送任何数据发送到它的错误,不管出现什么问题,PostgreSQL都会拒绝整个数据集
为了解决这个问题,pgloader将数据分红每批 25000行,这样当出现问题时,它只影响那么多行数据。当COPY流发生时,
每一个批处理都保存在内存中,以便可以在某些状况发生时处理错误
当PostgreSQL拒绝整个批处理时,pgloader会记录错误消息,而后经过以较小批量重试批处理行来将坏行与已接受的行隔离。
为此,pgloader 从失败的COPY中解析CONTEXT错误消息,由于消息包含批处理中发现错误的行号,格式以下:函数
CONTEXT: COPY errors, line 3, column b: "2006-13-11"
使用该信息,pgloader将在错误以前从新加载批处理中的全部行,将错误的行记录为拒绝,而后尝试在单次尝试中加载剩余的批次,
这可能包含或可能不包含其余错误数据。
在包含被拒绝行的加载结束时,您将在root-dir位置找到两个文件,这两个文件位于与安装程序的目标数据库相同的目录下。文件名是目标表,
对于被拒绝的数据,它们的扩展名为.dat;对于包含有关被拒绝数据的完整PostgreSQL客户端日志的文件,它们的扩展名为.log。
可使用如下WITH选项来控制pgloader批处理行为:
on error stop, on error resume next
是SQLite,MySQL和MS SQL源类型的默认值。它使用的基本架构是旧的Unix管道模型,其中一个线程负责加载数据(读取CSV文件,查询MySQL等)并将预处理的数据填充到队列中。
另外一个线程从队列中提取,对输入数据应用更多转换,并使用COPY协议将最终结果传输到PostgreSQL。
pgloader使用几个并发任务来处理正在加载的数据:
worker
同时在单个表的上下文中同时处于活动状态。单个工做单元由几种worker
组成:reader
从源头获取原始数据,worker
准备并将数据发送到PostgreSQL。 worker
能够同时活跃。 pgloader实现了一种特定于域的语言,容许设置复杂的数据加载脚本,处理计算列和输入数据的动态清理。对于更复杂的数据加载方案,
须要了解DSL的语法
语法规则:
LOAD <source-type>
FROM <source-url>
[ HAVING FIELDS <source-level-options> ]
INTO <postgresql-url>
[ TARGET TABLE [ "<schema>" ]."<table name>" ]
[ TARGET COLUMNS <columns-and-options> ]
[ WITH <load-options> ]
[ SET <postgresql-settings> ]
[ BEFORE LOAD [ DO <sql statements> | EXECUTE <sql file> ]
[ AFTER LOAD [ DO <sql statements> | EXECUTE <sql file> ]
;
主要子句是每一个命令实现的LOAD,FROM,INTO和WITH子句。而后,某些命令会实现SET命令或某些特定子句,例如CAST子句
pgloader 实现了Mustache 模版引擎,能够方便的进行动态配置
pgloader 具备一个特性就是能够获取os 系统的环境变量,参考以下:
export DBPATH=sqlite/sqlite.db
pgloader ./test/sqlite-env.load
模版使用环境变量
load database
from '{{DBPATH}}'
into postgresql:///pgloader;
key = value
use option
do not use option
全部数据源特定命令都支持如下选项:
on error stop, on error resume next
batch rows = R
batch size = … MB
prefetch rows = …
此外,还提供如下设置:
workers = W
concurrency = C
max parallel create index = I
postgresql://[user[:password]@][netloc][:port][/dbname][?option=value&...]
以 – 定界符开始与当前行的结尾结束的评论,
定界符 /* and */ 分别开始和结束注释,能够在命令中间找到或跨越几行
batch rows
将数值做为参数,用做批处理中容许的最大行数。默认值为25 000,能够更改成尝试具备更好的性能特征或控制pgloader内存使用状况;
batch size
将内存单元做为参数,例如20 MB,即其默认值。可接受的乘数是kB,MB,GB,TB和PB。这种状况很重要,以避免混淆位与字节,咱们这里只讨论字节。
prefetch rows
将数值做为参数,默认为100000。这是容许pgloader在每一个读者线程的内存中读取的行数。请参阅workers设置,了解容许同时运行多少个读取器线程。