Sqoop将Mysql数据表导入Hive多分区表

由于sqoop将mysql数据导入到Hive分区表时,其命令只支持只有一个分区的hive表,多个分区没有命令直接可用。所以只能采用迂回的方式来实现导入多分区的Hive表。

1)建立Hive多分区表(外部表)

CREATE EXTERNAL TABLE IF NOT EXISTS import.zbd_t_product_comparison (
  gcjt_syb_desc   STRING                   COMMENT   '产品线',
  brand                  STRING                   COMMENT   '品牌',
  year                     STRING                   COMMENT   '年份',
  month                  STRING                   COMMENT   '月份',  
  machine_sets     BIGINT                     COMMENT   '台份',
  money                  DECIMAL(28,12)   COMMENT   '金额'  
)PARTITIONED BY (
  plantype               STRING                   COMMENT '类别:year/month,区分分区为年还是年月的分区',
  planvalue             STRING                   COMMENT '类别如果为year:yyyy, 如果类别为month:yyyyMM'
)COMMENT '产品对比表'
row format delimited fields terminated by '\t'
stored as textfile
LOCATION '/etl/rfc/pull/crm/sqoop_product_comparison';

2)sqoop导出Mysql数据到HDFS文件

如下命令中,只选取201802的数据,导入到HDFS文件中:

/etl/rfc/pull/crm/sqoop_product_comparison/plantype=month/planvalue=201802

其中,plantype=month分区,planvalue为201802分区,

命令如下:

sqoop import --connect jdbc:mysql://10.39.52.58:3306/app_data \
--username root \
--password root2017 \
--fields-terminated-by '\t' \
--m 1 \
--query "select gcjt_syb_desc,brand,year,monthmachine_sets,money from zbd_import_t_product_comparison where planvalue='201802' and \$CONDITIONS" \
--target-dir /etl/rfc/pull/crm/sqoop_product_comparison/plantype=month/planvalue=201802 \
--delete-target-dir 

3)删除已存在的分区(目的是利用下面的第四步加载数据从而实现所谓的覆盖数据)

alter table import.zbd_t_product_comparison DROP IF EXISTS partition (plantype='month',planvalue='201802');

4)添加分区,将HDFS文件加载到Hive分区表中

alter table import.zbd_t_product_comparison add partition (plantype='month',planvalue='201802') location '/etl/rfc/pull/crm/sqoop_product_comparison/plantype=month/planvalue=201802';

5)如果select count(1) from import.zbd_t_product_comparison; 结果为0,则在hive shell或者Impala-shell 中输入:

refresh import.zbd_t_product_comparison; 刷新hive表再看结果。

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值