如果数据库类型是 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
否则会跑到默认的目录去,这个目录肯定是会生成的。
在你跑下一次的时候,会报错该目录已经存在,可以有2种办法 一是删掉目录,二是使用append 好像.