在工作中,我們經常遇到的業務就是要将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步。