【问题标题】:sqoop java.lang.RuntimeException: Can't parse input datasqoop java.lang.RuntimeException:无法解析输入数据
【发布时间】:2017-06-01 13:03:41
【问题描述】:

我正在尝试将表从 hive 导出到 oracle 数据库。

我尝试从配置单元中导出的表

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 无法识别分隔符之类的。为什么会这样,我该如何纠正?

【问题讨论】:

  • db.to_oracle 表中的字段分隔符是什么? --input-fields-terminated-by #\t ?
  • @dev 这是\t。我通过重新创建表并指定ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;' 并使用; 作为分隔符来解决它。

标签: sql oracle hive sqoop


【解决方案1】:

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

由“\001”终止的字段

由“\002”终止的集合项目

由“\003”终止的映射键

以“\n”结尾的行

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2023-01-28
    • 2023-01-25
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多