如何解决从HDFS导出数据到oracle时,sqoop无法长时间转换为时间戳
我在hdfs中有一个csv文件,格式为:
000000131,2020-07-22,0.0,"",1595332359218,khf987ksdfi34
000000112,1595442610265,khf987ksdfi34
000000150,1595442610438,khf987ksdfi34
我想使用以下sqoop将此文件导出到oracle:
sqoop export --connect "jdbc:oracle:thin:@(description=(address=(protocol=tcp)(host=oracledb)(port=1521))(connect_data=(service_name=stgdb)))" --table CORE_ETL.DEPOSIT_TURNOVER --username xxxx --password xxxx --export-dir /tmp/merged_deposit_turnover/ --input-fields-terminated-by "," --input-lines-terminated-by '\n' --input-optionally-enclosed-by '\"' --map-column-java DATE=java.sql.Date,INSERT_TS=java.sql.Timestamp
但是该过程以以下错误结束:
Caused by: java.lang.RuntimeException: Can't parse input data: '1595332359218' at
CORE_ETL_DEPOSIT_TURNOVER.__loadFromFields(CORE_ETL_DEPOSIT_TURNOVER.java:546) at
CORE_ETL_DEPOSIT_TURNOVER.parse(CORE_ETL_DEPOSIT_TURNOVER.java:431) at
org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:88) ... 10 more Caused
by: java.lang.IllegalArgumentException at java.sql.Date.valueOf(Date.java:143) at
CORE_ETL_DEPOSIT_TURNOVER.__loadFromFields(CORE_ETL_DEPOSIT_TURNOVER.java:529) ... 12 more
我想知道是否有一种方法可以在不更改HDFS中数据格式的情况下将该文件导出到oracle。
也是oracle模式:
解决方法
根据sqoop官方文档: https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_export_date_and_timestamp_data_types_into_oracle
从hdfs导出数据时,如果数据不是必需的格式,并且时间戳的必需格式为yyyy-mm-dd hh24:mi:ss.ff,则Sqoop导出命令将失败。因此,您必须格式化文件中的时间戳以符合上述格式,才能正确导出到Oracle。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。