使用 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