我在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类型映射,需要将日期或日期时间转换为日期或时间戳。
是否存在解决方案?
答案 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")'