离线数仓之业务数据的导入和处理

讲的好不好不知道,尽最大努力去讲

数据的同步

        上篇讲过使用Sqoop将Mysql和Hdfs的数据进行互导。

        本篇是离线数仓的第二篇。讲的是业务数据的处理。

        离线数仓基本业务数据都存储在Mysql中,然后再将Mysql中的数据通过Sqoop进行数据传输到Hdfs上面。

        在Hive里面创建相应的表,加载对应目录的数据到Hive表中。

        这仅仅只是ODS层的操作。

        ODS层的数据基本上都是源数据,没有经过修改和筛选的,是最接近业务的数据。关于ODS层的细讲,明天会写一篇博客讲讲ODS层。绝不摆烂,一定写。

数据同步的引发的不同操作

        数据同步的关键就是在于,每个表的数据的属性不同。每个表是不一样的。

        首先,所谓的电商项目,将业务存储在Mysql表中,但是Mysql中存储的表,并不是一张表,因为一张表无法将电商的全部表示出来。

        举个例子。

        SPU,商品聚合的最小单位,一个IPhone手机就是一个SPU

        SKU,一个银色的,256G内存的Iphone手机就是SKU.

        拿苹果手机来讲,如果以苹果手机设计电商表,一张表是不够。

        首先,苹果手机会在商品表里面,商品表记载了各个手机的信息。也就是SKU。

 

        上图就是一个简单的例子,一个苹果手机,后面会有各种型号。厂家,出厂时间。这些是苹果手机的属性,存储在商品信息表里面。

        手机又不止一个苹果手机,还有其它种类的手机,因此苹果手机还会存在于品牌表里面。

        电商,电商,每购买一部苹果手机,也就是所谓的下单,就会在订单表中出现。

        如果苹果手机参与        了618折扣,那么苹果手机还会出现在活动信息表里面

        用户领了优惠券,那么用户最终购买的苹果手机的钱并不是真正到电商里面的钱(该钱指的是利润)原本利润2000元,因为使用了优惠券,又少了四百元。最终的利润为1600元。

非常多的表如何丝滑的导入到HDFS

        一个苹果手机就牵扯到了这么多的表,如何将Mysql中的数据同步到HDFS上

        采用不同的策略。

1.每日全量同步

        采用这种同步策略,就是每天都将Mysql中的表全部的同步过去。

        采用这种策略的表,一般数据量不大,而且每天数据都会有新增和减少,需要我们时时刻刻去对比。

        如果小米手机2022.1.27参加了新人优惠500的活动,这个活动小米只有一天,第二天就不参加了。相当于,小米手机今天参加这个活动,那么今天在商品活动表里面就要有小米手机的数据,第二天这个商品活动表里面就不应该有小米手机的数据。

        这种情况。商品活动表就需要进行每日的同步,来确定哪个商品在该天参加活动。

 

2.增量同步

增量同步很简单,每天将新增加的数据存储在源表中,

 

3.只存储一次

        这种表,只需要同步一次,就再也不需要同步。

        省份表。这个是既定的事实,是不会改变的事实

业务数据首次同步

        第一次同步数据,需要将所有的业务数据都进行同步。

        因为表很多,我们总不能一次写一个Sqoop语句来同步一个表,这就是无效化工作。

        通过写Shell脚本就可以完成所有业务数据或者个别数据的同步

#! /bin/bash  
APP=gmall 
sqoop=/opt/module/sqoop/bin/sqoop   
if [ -n "$2" ] ;then    do_date=$2
 else 
    echo "请传入日期参数"  
 exit 
fi   
import_data(){
$sqoop import \ 
--connect jdbc:mysql://hadoop102:3306/$APP \
--username root \ 
--password 000000 \ 
--target-dir /origin_data/$APP/db/$1/$do_date \ 
--delete-target-dir \ --query "$2 where \$CONDITIONS" \ 
--num-mappers 1 \ --fields-terminated-by '\t' \ 
--compress \ --compression-codec lzop \ 
--null-string '\\N' \ --null-non-string '\\N' 
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/$APP/db/$1/$do_date import_order_info(){   import_data order_info "select                             id,                             total_amount,                             order_status,                             user_id,                             payment_way,                             delivery_address,                             out_trade_no,                             create_time,                             operate_time,                             expire_time,                             tracking_no,                             province_id,                             activity_reduce_amount,                             coupon_reduce_amount,                                                         original_total_amount,                             feight_fee,                             feight_fee_reduce                               from order_info" }
 case $1 in   "order_info")    
  import_order_info ;;

如果需要同步user_info表里面的信息。

mysql_to_hdfs_init.sh user_info 2022-01-27 


        将Mysql中的user_info表同步到target-dir /origin_data/$APP/db//2022-01-07 这个目录里面。 后续将在这个目录创建相应的ods_电商_user_info表

业务数据每日同步

        业务数据的每日同步同样也是写脚本

        写脚本后就可以将数据同步了。

        具体的脚本可以去尚硅谷的资料里面去看。

总结:

        这篇博客只是讲解一下从Mysql中的表,同步到hdfs上的策略。

        明天会实物来讲解如何将ods层的导入的相应表的里面,并且对表进行筛选,连接。将需要的数据放入到dw层。

        明天一定好好写文章

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值