如果数据库类型是 date类型的就比较麻烦了,直接搞进hive 不行,因为hive只有timestamp,而去format还是 yyyy-mm-dd hh:mm:ss的
有2个办法,先导入临时表 ,临时表是string的类型(String的format是 yyyy-mm-dd),然后再往正式表里插
insert overwrite table adventureworksdw.dimdate select * from adventureworksdw.dimdate2;
我使用第二种办法,query 导入
import --connect jdbc:mysql://prchaz02823:3306/adventureworksdw2008r2 --username root --password root #--table #DimDate2 --query 'SELECT DateKey,cast(FullDateAlternateKey as datetime) FullDateAlternateKey ,DayNumberOfWeek,EnglishDayNameOfWeek,DayNumberOfMonth,DayNumberOfYear,WeekNumberOfYear,EnglishMonthName,monthNumberOfYear,CalendarQuarter,CalendarYear ,CalendarSemester,FiscalQuarter,FiscalYear,FiscalSemester frOM DimDate2 WHERE $CONDITIONS' --split-by DateKey --null-string '\\N' --null-non-string '\\N' --split-by DateKey --target-dir /home/dimdate_txt --hive-import --hive-table adventureworksdw.dimdate2 --map-column-hive FullDateAlternateKey=timestamp --hive-overwrite #--direct
把 date类型的FullDateAlternateKey 强制转换成datetime(主要是为了yyyy-mm-dd hh:mm:ss这个format), 然后指定--split-by
这样在hive 中就不需要中间表了
我这里使用的中间目录,
--target-dir /home/dimdate_txt
否则会跑到默认的目录去,这个目录肯定是会生成的。
扫描二维码关注公众号,回复:
1225292 查看本文章
在你跑下一次的时候,会报错该目录已经存在,可以有2种办法 一是删掉目录,二是使用append 好像.