sqoop java.lang.RuntimeException:无法解析输入数据

时间:2017-06-01 13:03:42

标签: sql oracle hive sqoop

我试图将表从hive导出到oracle数据库。

hive中的表我尝试从

导出
CREATE TABLE `db.to_oracle`(
  `ctn` string,
  `platform_code` string,
  `sum` double,
  `days_ctn` int,
  `mtr_comments` string,
  `imsi` string,
  `ban` int,
  `price_plan` string,
  `market_code` string,
  `currency` string,
  `balance` string,
  `time_key` date)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

我的sqoop声明

sqoop export \
-D mapreduce.job.queuename=adhoc \
-D oracle.jdbc.mapDateToTimestamp=false \
--connect jdbc:oracle:thin:secret \
--password pas \
--username user\
--export-dir /apps/hive/warehouse/db.db/to_oracle/ \
--input-fields-terminated-by '\t' \
--input-lines-terminated-by '\n' \
--table database.oracle_table

我收到此错误

java.lang.RuntimeException: Can't parse input data: '9696278394S10.01dolg_neaktivnost#20170513_3#1#12.0525099318958479562895398812VSE1NIKORUR-9992017-05-13'

似乎sqoop无法识别分隔符或其他内容。为什么这样,我该如何纠正呢?

1 个答案:

答案 0 :(得分:0)

问题出在Delimiters上,因为你没有在hive表中指定分隔符,默认的hive分隔符是:

终止于' \ 001'

由' \ 002'

终止的收集品

MAP键由' \ 003'

终止

由' \ n'

终止的线路

在hive表创建或sqoop作业中更改分隔符以解决问题。