Sqoop Incremental Import Lastmodified завершается с ошибкой: не удалось получить текущее время из базы данных

#sql #hive #db2 #sqoop

#sql #куст #db2 #sqoop

Вопрос:

Я пытаюсь импортировать таблицу из базы данных DB2 с помощью Sqoop incremental lastmodified. В таблице есть столбец типа Timestamp, который является контрольным столбцом, который я использую. Я хотел сначала импортировать всю таблицу целиком, а затем импортировать любую последнюю модификацию, поэтому я установил для своего последнего значения значение 0. Ниже приведена команда:

ПРИМЕЧАНИЕ: некоторые значения в столбце updateTS — «1/1/0001 12:00:00»

 sqoop import --connect "jdbc:db2*****************" --username **** --password ***** --driver com.ibm.db2.jcc.DB2Driver --table my_table --m 20 --split-by col1 --target-dir /user/employ/sqoop_dir --check-column updateTS --incremental lastmodified --last-value 0
  

Когда я выполняю приведенную выше команду, я получаю следующую ошибку

 com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=);<INTEGER>, DRIVER=4.17.29
    at com.ibm.db2.jcc.am.hd.a(hd.java:747)
    at com.ibm.db2.jcc.am.hd.a(hd.java:66)
    at com.ibm.db2.jcc.am.hd.a(hd.java:135)
    at com.ibm.db2.jcc.am.wo.c(wo.java:2771)
    at com.ibm.db2.jcc.am.wo.d(wo.java:2759)
    at com.ibm.db2.jcc.am.wo.a(wo.java:2192)
    at com.ibm.db2.jcc.am.wo.a(wo.java:2168)
    at com.ibm.db2.jcc.t4.ab.h(ab.java:136)
    at com.ibm.db2.jcc.t4.ab.b(ab.java:41)
    at com.ibm.db2.jcc.t4.o.a(o.java:32)
    at com.ibm.db2.jcc.t4.tb.i(tb.java:145)
    at com.ibm.db2.jcc.am.wo.kb(wo.java:2161)
    at com.ibm.db2.jcc.am.wo.a(wo.java:3258)
    at com.ibm.db2.jcc.am.wo.a(wo.java:697)
    at com.ibm.db2.jcc.am.wo.executeQuery(wo.java:676)
    at org.apache.sqoop.manager.SqlManager.getCurrentDbTimestamp(SqlManager.java:986)
    at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:346)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
20/09/16 23:52:02 ERROR manager.SqlManager: Chained exception 1:
com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, 
SQLERRMC=SQL_CURLH200C1, DRIVER=4.17.29
    at com.ibm.db2.jcc.am.hd.a(hd.java:752)
    at com.ibm.db2.jcc.am.hd.a(hd.java:66)
    at com.ibm.db2.jcc.am.hd.a(hd.java:135)
    at com.ibm.db2.jcc.am.wo.c(wo.java:2771)
    at com.ibm.db2.jcc.am.wo.a(wo.java:2219)
    at com.ibm.db2.jcc.t4.ab.o(ab.java:908)
    at com.ibm.db2.jcc.t4.ab.j(ab.java:267)
    at com.ibm.db2.jcc.t4.ab.d(ab.java:55)
    at com.ibm.db2.jcc.t4.o.c(o.java:44)
    at com.ibm.db2.jcc.t4.tb.j(tb.java:157)
    at com.ibm.db2.jcc.am.wo.mb(wo.java:2214)
    at com.ibm.db2.jcc.am.wo.a(wo.java:3261)
    at com.ibm.db2.jcc.am.wo.a(wo.java:697)
    at com.ibm.db2.jcc.am.wo.executeQuery(wo.java:676)
    at org.apache.sqoop.manager.SqlManager.getCurrentDbTimestamp(SqlManager.java:986)
    at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:346)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:251) 
 20/09/16 23:52:02 ERROR tool.ImportTool: Import failed: java.io.IOException: Could not get current 
  time from database
    at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:348)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:525)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:633)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
  

Также, если я просто импортирую без инкрементного условия lastmodified, импорт прошел успешно.

 sqoop import --connect "jdbc:db2*****************" --username **** --password ***** --driver com.ibm.db2.jcc.DB2Driver --table my_table --m 20 --split-by col1 --target-dir /user/employ/sqoop_dir
  

Однако столбец updateTS, который был в формате 20/22/2002, теперь преобразован в временную метку эпохи.

Как мне решить эти две проблемы?

Комментарии:

1. По-видимому, оператор SQL, сгенерированный Sqoop, имеет недопустимый синтаксис. Распечатайте его, и вы увидите, что не так.

2. @mustaccio, спасибо за ваш ответ. Однако все, что было сгенерировано, это то, что я отобразил в сообщении об ошибке выше. Я не мог понять, почему он не может получить текущее время из базы данных. Есть идеи?