Sqoop Инкрементальная нагрузка с отметкой времени эпохи - PullRequest
0 голосов
/ 07 марта 2019

Для использования инкрементного инструмента Sqoop необходимо указать дату последнего изменения в --last-value в формате, аналогичном 2016-09-05 06:04:27.0.Проблема в этом случае в исходных MySQL базах данных, данные update_date сохраняются как отметка времени эпохи (1550218178).

С помощью следующей команды sqoop

sqoop import --verbose --connect jdbc:mysql://192.18.2.5:3306/iprocure_ip --table depot --username usernamehere --password-file /user/admin/.password --check-column update_date --incremental lastmodified --last-value '1550218178' --target-dir /user/admin/notexist --merge-key "depot_id"

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

19/03/06 12:57:31 ERROR manager.SqlManager: Column type is neither timestamp nor date!
19/03/06 12:57:31 ERROR sqoop.Sqoop: Got exception running Sqoop: 
java.lang.RuntimeException: Column type is neither timestamp nor date!
java.lang.RuntimeException: Column type is neither timestamp nor date!
    at org.apache.sqoop.manager.ConnManager.datetimeToQueryString(ConnManager.java:788)
    at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:350)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:526)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:656)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:150)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:186)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:240)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:249)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:258)

Как можно извлечь инкрементные данные с помощью sqoop, используя метку времени эпохи?

1 Ответ

0 голосов
/ 07 марта 2019

Исключение ясно говорит о том, что существует несоответствие типов, и Sqoop ожидает дату или метку времени, но ваш формат --last-value - int.

Если вы читаете документацию sqoop, это говорит ...

Инкрементный импорт выполняется путем сравнения значений в контрольном столбце со справочным значением для самого последнего импорта. Например, если указан аргумент --incremental append, а также --check-column id и --last-value 100, будут импортированы все строки с id> 100

Поскольку Sqoop является внутренним Java и должен соответствовать типам java.sql.Data. Перепроверьте DDL и адаптируйте команду sqoop import.

...