使用 sqoop 从 Oracle 到 hive 的日期导入问题

Posted

技术标签:

【中文标题】使用 sqoop 从 Oracle 到 hive 的日期导入问题【英文标题】:Date import issue from Oracle to hive using sqoop 【发布时间】:2015-08-28 09:17:25 【问题描述】:

我正在尝试将数据从 Oracle 导入配置单元。 Oracle 'LOAD_DATE' 中有列,其值的格式为 '8/13/2015 2:55:17 AM'。导入后,我得到的值类似于“2015-08-13 02:55:17.0”。导入的数据中缺少“AM”。请给出导入正确数据的解决方案。

这是我正在触发的命令,

sqoop import --connect jdbc:oracle:thin:@ipaddr/dbname --username uname --password pword --table tname --hive-import --hive-table dbname.tname -m 1 --null- string '\N' --null-non-string '\N' --warehouse-dir /user/hive/warehouse/dbname.db/tname

【问题讨论】:

LOAD_DATE列的数据类型是什么? 在 Oracle 中是“日期”,导入后数据类型在 Hive 中是“字符串” 【参考方案1】:

一旦您以字符串类型复制到配置单元日期,您可以使用以下查询来获取原始格式的结果。 select unix_timestamp(date_s, 'MM/dd/yyyy hh:mm:ss a') as tm, date_s from DUAL;

【讨论】:

【参考方案2】:

是否有可能 hive 使用 24h 格式而 oracle 使用 am/pm?如果 hive 将日期作为 varchar 导入,则对该列使用 TO_CHAR(date, format),例如:

SELECT to_char(SYSDATE,'MM/DD/YYYY HH12:MI:SS PM') FROM DUAL

PM 将在 AM 和 PM 之间正确转换。 这里是格式的参考:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#CDEHIFJA

【讨论】:

hive/impala 不支持 AM/PM 格式,因此您必须使用 24 小时格式。

以上是关于使用 sqoop 从 Oracle 到 hive 的日期导入问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sqoop 将视图(数据库表重)从 Oracle 迁移到 Hive

使用 sqoop 从 Oracle 到 hive 的日期导入问题

sqoop从oracle数据库抽取数据,导入到hive

怎么用sqoop增量从hive往oracle数据库导数据

如何从Oracle到hive

sqoop从oracle导数据后是空表