Pgloader + Postgres: импорт всех хороших строк из файла CSV, пропуск и регистрация плохих строк

Я создаю командный файл 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, Например, я никогда не вижу Карла Кука и Гарета Гэтсби в моей базе данных.

Документация говорит это о регистрации плохих строк:

В конце загрузки, содержащей отклоненные строки, вы найдете два файла в корневом каталоге, в каталоге с именем, совпадающим с целевой базой данных вашей установки. Имена файлов являются целевой таблицей, а их расширения:.dat для отклоненных данных и.log для файла, содержащего полные журналы на стороне клиента PostgreSQL об отклоненных данных.

В моем случае Pgloader создает каталог с именем моей целевой таблицы в выходном каталоге, но в нем ничего нет, хотя в моих входных файлах явно есть отклоненные строки.

Я также попытался добавить batch rows = 1 в надежде pgloader перейдет к следующему пакету одной строки, но в выходных данных не было никаких изменений.

Я, вероятно, делаю что-то не так. Что я могу проверить?

0 ответов

Другие вопросы по тегам