Talend S3 CSV для Redshift Обработка недостающих данных - PullRequest
0 голосов
/ 24 октября 2018

У меня есть плоский файл CSV, загруженный в S3, который иногда будет содержать пустое значение в столбцах, разделенных запятыми, например: "ColumnValue1,,ColumnValue3,...etc", отмечая ",," как отсутствующее значение в CSV, например.Ниже приведен базовый переход от S3 к настройке Redshift в Talend с использованием компонента tDBBulkExec:

enter image description here

После сопоставления столбцов, как показано ниже, и запуска:

enter image description here

Выдает ошибку, учитывая эти пропущенные значения в исходном файле:

Exception in component tDBBulkExec_1 (tncretail_opportunity)
java.sql.SQLException: [Amazon](500310) Invalid operation: syntax error at or near "," 
Position: 100;
    at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source)
    at com.amazon.redshift.client.PGMessagingContext.handleErrorResponse(Unknown Source)
    at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source)
    at com.amazon.jdbc.communications.InboundMessagesPipeline.getNextMessageOfClass(Unknown Source)
    at com.amazon.redshift.client.PGMessagingContext.doMoveToNextClass(Unknown Source)
    at com.amazon.redshift.client.PGMessagingContext.getBindComplete(Unknown Source)
    at com.amazon.redshift.client.PGClient.handleErrorsScenario1(Unknown Source)
    at com.amazon.redshift.client.PGClient.handleErrors(Unknown Source)
    at com.amazon.redshift.client.PGClient.directExecuteExtraMetadata(Unknown Source)
    at com.amazon.redshift.dataengine.PGQueryExecutor.execute(Unknown Source)
    at com.amazon.jdbc.common.SStatement.executeNoParams(Unknown Source)
    at com.amazon.jdbc.common.SStatement.execute(Unknown Source)
Caused by: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: syntax error at or near "," 
Position: 100;

Как я могу изменить это для работы?

1 Ответ

0 голосов
/ 25 октября 2018

Я уже некоторое время использую Talend, чтобы точно делать то, что вы делаете, есть несколько ключевых отличий от того, что я делаю, и от этого паттерна, который я бы порекомендовал.

  1. ваша проблема, скорее всего, связана с тем, что вы не указали имена столбцов БД, которые должны быть указаны и являются уникальными.(эти данные используются базой данных для обратной связи со схемой)

  2. Если у вас нет особых причин для использования компонентов TdB, не используйте их, вместо этого используйте предварительно созданные специальные соединители IE tRedshiftBulkExec.

  3. объемный файл Redshift ограничен csv, насколько мне известно, но может не обязательно соответствовать точной спецификации для одного, поэтому использование вами этого компонента может быть ошибочным.

Мои рекомендации для вас: либо

  1. извлечь CSV из s3, преобразовать его в массовый файл и затем загрузить в Redshift (вы можетеиспользуйте ts3list -> ts3get-'onComOK '-> TfileInputDelimited -> TRedshiftOutputBulkExecute

  2. в качестве альтернативы вы можете выполнить команду копирования с помощью TRedshiftRow https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

Я бы также дважды проверил файл с разделителями на наличие повреждений и подумал бы об использовании текстовых вложений (ваш текст может содержать где-то запятую)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...