2017-06-01 86 views
0

我試圖將表從配置單元導出到oracle數據庫。sqoop java.lang.RuntimeException:無法解析輸入數據

蜂房中的表格我嘗試從

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無法識別的分隔符或者其他的東西。爲什麼是這樣,我如何糾正它?

+0

db.to_oracle表中的字段分隔符是什麼? - 通過'#'或'\ t'終止輸入字段? –

+0

@dev它是'\ t'。我通過重新創建表並指定'ROW FORMAT DELIMITED FIELDS TERMINATED BY';''並使用';'作爲分隔符來解決它。 – Evgenii

回答

0

問題是分隔符,因爲你沒有指定在蜂巢表中的分隔符,默認配置單元分隔符是:

FIELDS TERMINATED BY TERMINATED BY「\ 002 '\ 001'

藏品\ 003 '

LINES TERMINATED BY '\ n'

更改定界符無論是在'結尾BY

MAP KEYS'配置單元表創建或在您的sqoop作業中解決問題。