sqoop 1.4.4 使用2

如果数据库类型是 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 好像.

猜你喜欢

转载自tobyqiu.iteye.com/blog/2036938