sqoop的基本应用要点

5 篇文章 0 订阅
1 篇文章 0 订阅

sqoop可用于将关系型数据库与分布式存储系统进行数据的转换存储,例如可以将mysql中的数据与hive下的存储数据进行互转,但实质上仍然是读取hdfs下的存储文件。
有关sqoop的基本应用语法可以参考以下两篇sqoop中文手册:
http://blog.csdn.net/myrainblues/article/details/43673129
http://www.zihou.me/html/2014/01/28/9114.html

下面主要讲几点实际应用中注意的要点:

  1. export命令中的分隔符作用
    –input-fields-terminated-by ‘\001’ 从hive(即HDFS)中导出至mysql中时,默认的存储文件类型是testfile,域分隔符采用hive默认的分隔符 ‘\001’

  2. export命令中的null字段作用
    从hive中导入分区表进入拥有自增长主键的mysql表时,由于mysql表中主键id是自动编号增长,而hive表缺乏该字段,故在hive表中对应的表需要将id字段置为null值,然后在导入mysql中时设置参数 –input-null-string ‘\N’ –input-null-non-string ‘\N’

  3. export中针对timestamp类型数据导出
    hive中支持时间戳类型,可以from_unixtime(unix_timestamp(concat_ws(” “,sale_dt,sale_tm),”yyyyMMdd HHmmss”),”yyyy-MM-dd HH:mm:ss”),转化成hive格式化字段,之后将该字段数值导入mysql可被识别

  4. import命令中的分区命令
    从mysql导入数据进入hive中时,域分隔符会采用默认的分隔符 ‘\001’,若要实现分区列表形式,可采用参数–hive-partition-key statis_date –hive-partition-value 20151101形成分区

  5. export中的更新修改方式
    从hive导出数据至mysql中时,一般不太容易考虑数据的修改更新问题,但是sqoop中提供了这样一种方式实现插入mysql数据库中的update参数命令,若是想实时插入修改,可以使用–update-key id参数指定查询列为id,其余未指定的列均被修改,若想在更新的同时执行插入(如果存在id则修改,否则插入id行),则可以再加入参数–update-mode allowinsert(注:这里需要制定id为主键才能其效果,否则仍然只是插入功能,并不能达到update的修改),其具体效果如下:
    HDFS下的数据集格式如下:

    0,this is a test,42
    1,some more data,100

    插入mysql中可变相等于该update语句:

    UPDATE foo SET msg=’this is a test’, bar=42 WHERE id=0;
    UPDATE foo SET msg=’some more data’, bar=100 WHERE id=1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值