从Oracle加载表到Hive,日期和时间戳转换为字符串

时间:2016-05-06 00:01:02

标签: sqoop2 sqoop

我在Sqoop手册中注意到了这一点:

  

24.5。 Hive中的模式定义

     

Hive用户会注意到SQL类型和Hive类型之间没有一对一的映射。通常,没有直接映射的SQL类型(例如,DATE,TIME和TIMESTAMP)将被强制转换为Hive中的STRING。 NUMERIC和DECIMAL SQL类型将被强制转换为DOUBLE。在这些情况下,Sqoop会在其日志消息中发出警告,通知您精度损失。

我知道Sqoop可以使用

指定列类型映射
  • --map-column-java
  • --map-column-hive

但我的情况是我需要一个通用类型来键入映射,从RDBMS类型到HIVE类型映射,需要将日期或日期时间转换为日期或时间戳。

是否存在解决方案?

1 个答案:

答案 0 :(得分:0)

Sqoop + ORC + hcatalog可帮助您正确映射。 Sqoop + parquet它会将日期转换为String

mysqlHostname=ip-172-31-2-124.us-west-2.compute.internal                          
mysqlDBName=employees                                                             
mysqlUsername=hive                                                                


sqoop import \
      --connect jdbc:mysql://$mysqlHostname/$mysqlDBName \
      --table salaries \
      --username $mysqlUsername \
      -P \
      --hcatalog-table orc_salaries \
      --create-hcatalog-table \
      --map-column-hive  from_date=date,to_date=date\
      --hcatalog-storage-stanza 'stored as orcfile tblproperties ("orc.compress"="ZLIB")'