天天看點

用sqoop将MySQL的資料導入到Hive分區表中

在工作中,我們經常遇到的業務就是要将MySQL每天差生的生産資料定時導入到Hive的分區表中,然後根據分區表中的資料進行“數倉建設”,各種資料處理。

那麼怎麼運用sqoop将MySQL的資料導入到hive的分區表中呐?

首先,不能再用--hive-table, --hive-partition-key, --hive-partition-value這三個參數。因為這樣隻能向單個分區導入資料,無法指定多個分區。

其實我采用的方法是 分兩步進行的:

1、用sqoop将MySQL的資料導入HDFS上,注意HDFS存儲的路徑檔案夾以分區的字段資料命名。

比如:

sqoop import --connect  jdbc:mysql://localhost:3306/track_log \
--username root --password 123456  --table track_log18 \
 -m 1  \
--target-dir /user/hive/warehouse/track_log/ds=20190622 
--fields-terminated-by '\t'  //這個也很重要,否則查詢一列時會傳回多列
           

這樣的話,資料導入到了HDFS中,

2、建立分區并且将資料加載進去:

alter table track_log add partition(ds='20190622') 
location '/user/hive/warehouse/track_log/ds=20190622';
           

這樣分區的資料就加載進去了。

注意點:這兩步之間最好插入一些檢驗的步驟。

比如說:

在1之前,檢驗分區是否已經存在,存在的話,直接删掉(注意會删除資料,但是在第二步會将資料再次加載,這樣根據業務來說,是沒有問題的)

在2之前,檢驗一下HDFS的目錄是否存在,存在再執行第2步。

繼續閱讀