我正在创建一个pgloader命令文件,以将另一个团队提供的CSV文件集导入到Postgres数据库的表中。加载格式正确的文件可以正常工作,但是我们需要计划输入文件的格式不正确。理想情况下,我想跳过并记录输入文件中的所有不良行;该文档说:
要允许重试数据并加载好零件,请使用选项下一个错误继续恢复,这是基于文件的数据加载(例如CSV,IXF或DBF)的默认设置。
但是我不太能够使它正常工作。
这是我的命令文件:
LOAD CSV
FROM
ALL FILENAMES MATCHING ~/{{{FILE_REGEXP}}}/
IN DIRECTORY '{{STAGING_PATH}}'
WITH ENCODING UTF8
INTO postgresql://{{PGUSER}}:{{PGPASSWORD}}@{{PGHOST}}/{{PGDATABASE}}
TARGET TABLE {{TABLE_NAME}}
WITH
csv header,
on error resume next,
fields terminated by '|',
truncate
;
我有几个文件,我出于测试目的故意在其中插入了错误。这是第一个的一部分:
"id"|"code"|"first_name"|"first_name_1"|"last_name"
"jba9ltm3rk58e9bg"|"O1smr83CmvMkqnrV"|"Adam"|"Ant"
"wew6tiq5zmkak19y","I4hlQYrcCSlN3KnV"|Barbara|"Barb"|Bell
"mtsunn0i0ac2t30o"|"vePl6Nti7q1s9YeI"|"Carl"|"Chip"|"Cook"
第二部分的一部分:
"id"|"code"|"first_name"|"first_name_1"|"last_name"
"zcwoyy9e2yiuvan3"|"KNK59muKY5AcfQsd"|"Edward"|""|"Ember"
"fvdagry1jbbgtv63","bJnYxUUHo1R3rlYK","Faith","Faith","Flint"
"k606tkzte4t8mjv2"|"qskHKqVvwbPRE0xY"|"Gareth"|"George"|"Gatsby"
我想得到的是导入所有好的行,并跳过并记录所有坏行。但是我得到的是,在第一个错误处,pgloader
停止处理当前文件,然后继续处理下一个文件。无论我使用on error resume next
还是on error stop
,都会发生这种情况。例如,我从未在数据库中看到Carl Cook和Gareth Gatsby。
文档说明了有关记录不良行的信息:
在包含被拒绝的行的加载结束时,您将在root-dir位置的与设置的目标数据库相同的目录下找到两个文件。文件名是目标表,扩展名是.dat用于拒绝的数据,扩展名是.log用于包含有关拒绝的数据的完整PostgreSQL客户端日志的文件。
在我的情况下,Pgloader在输出目录中创建了一个以我的目标表命名的目录,但是其中没有任何内容,即使输入文件中显然存在被拒绝的行。
我还尝试添加batch rows = 1
,希望pgloader可以移至下一行的下一行,但是输出没有变化。
我可能做错了什么。我可以检查什么?