天天看点

用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步。

继续阅读