• 数据仓库 表的分类与同步策略


    表的分类

    实体表:一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等。

    维度表:一般是指对应一些业务状态,编号的解释表。也可以称之为码表。比如地区表,订单状态,支付方式,审批状态,商品分类等等。

    事务型事实表:一般指随着业务发生不断产生的数据。特点是一旦发生不会再变化。一般比如,交易流水,操作日志,出库入库记录等等。

    周期型事实表,一般指随着业务发生不断产生的数据。与事务型不同的是,数据会随着业务周期性的推进而变化。比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。

    同步策略

    实体表同步策略:实体表数据量比较小,通常可以做每日全量,就是每天存一份完整数据,即每日全量

    维度表同步策略:维度表数据量比较小,通常可以做每日全量,就是每天存一份完整数据,即每日全量

    事务型事实表同步策略:因为数据不会变化,而且数据量巨大,所以每天只同步新增数据即可,所以可以做成每日增量表,即每日创建一个分区存储

    周期型事实表同步策略:这类表从数据量的角度,存每日全量的话,数据量太大,冗余也太大;如果用每日增量的话无法反应数据变化;每日新增及变化量,包括了当日的新增和修改。一般来说这个表,足够计算大部分当日数据的。但是这种依然无法解决能够得到某一个历史时间点(时间切片)的切片数据。 所以要用利用每日新增和变化表,制作一张拉链表,以方便的取到某个时间切片的快照数据。所以我们需要得到每日新增及变化量。

    业务数仓8张表导入示例

    导入脚本:

    ①此脚本将数据从MySql导入到HDFS。

    ②对于商品表、用户表和一级、二级、三级分类表,都采用全量导入的方式,反应在导入的sql上,就是where 1=1。

    ③对于订单详情和支付流水表,采用增量导入的方式,反应在sql上,就是where DATE_FORMAT(payment_time,'%Y-%m-%d')='$db_date',只导当前天的。

    ④对于订单表,采用导入新增和变化的数据反应在sql上,就是DATE_FORMAT(create_time,'%Y-%m-%d')='$db_date' or DATE_FORMAT(operate_time,'%Y-%m-%d')='$db_date',既导今天新增的,又导最后操作时间为今天的(变化的)。

    #!/bin/bash
    
    db_date=$2
    echo $db_date
    db_name=gmall
    
    import_data() {
    /opt/module/sqoop/bin/sqoop import 
    --connect jdbc:mysql://hadoop102:3306/$db_name 
    --username root 
    --password 000000 
    --target-dir /origin_data/$db_name/db/$1/$db_date 
    --delete-target-dir 
    --num-mappers 1 
    --fields-terminated-by "	" 
    --query "$2"' and $CONDITIONS;'
    }
    
    import_sku_info(){
      import_data "sku_info" "select 
    id, spu_id, price, sku_name, sku_desc, weight, tm_id,
    category3_id, create_time
      from sku_info where 1=1"
    }
    
    import_user_info(){
      import_data "user_info" "select 
    id, name, birthday, gender, email, user_level, 
    create_time 
    from user_info where 1=1"
    }
    
    import_base_category1(){
      import_data "base_category1" "select 
    id, name from base_category1 where 1=1"
    }
    
    import_base_category2(){
      import_data "base_category2" "select 
    id, name, category1_id from base_category2 where 1=1"
    }
    
    import_base_category3(){
      import_data "base_category3" "select id, name, category2_id from base_category3 where 1=1"
    }
    
    import_order_detail(){
      import_data   "order_detail"   "select 
        od.id, 
        order_id, 
        user_id, 
        sku_id, 
        sku_name, 
        order_price, 
        sku_num, 
        o.create_time  
      from order_info o, order_detail od
      where o.id=od.order_id
      and DATE_FORMAT(create_time,'%Y-%m-%d')='$db_date'"
    }
    
    import_payment_info(){
      import_data "payment_info"   "select 
        id,  
        out_trade_no, 
        order_id, 
        user_id, 
        alipay_trade_no, 
        total_amount,  
        subject, 
        payment_type, 
        payment_time 
      from payment_info 
      where DATE_FORMAT(payment_time,'%Y-%m-%d')='$db_date'"
    }
    
    import_order_info(){
      import_data   "order_info"   "select 
        id, 
        total_amount, 
        order_status, 
        user_id, 
        payment_way, 
        out_trade_no, 
        create_time, 
        operate_time  
      from order_info 
      where (DATE_FORMAT(create_time,'%Y-%m-%d')='$db_date' or DATE_FORMAT(operate_time,'%Y-%m-%d')='$db_date')"
    }
    
    case $1 in
      "base_category1")
         import_base_category1
    ;;
      "base_category2")
         import_base_category2
    ;;
      "base_category3")
         import_base_category3
    ;;
      "order_info")
         import_order_info
    ;;
      "order_detail")
         import_order_detail
    ;;
      "sku_info")
         import_sku_info
    ;;
      "user_info")
         import_user_info
    ;;
      "payment_info")
         import_payment_info
    ;;
       "all")
       import_base_category1
       import_base_category2
       import_base_category3
       import_order_info
       import_order_detail
       import_sku_info
       import_user_info
       import_payment_info
    ;;
    esac
  • 相关阅读:
    docker mysql8 phpmyadmin
    linux 压缩与解压缩
    Ubuntu添加开机自动启动程序的方法
    Linux基本命令集合
    linux下使用supervisor启动.net core mvc website的配置
    小修改,让mvc的验证锦上添点花(2)
    小修改,让mvc的验证锦上添点花(1)
    java 基础面试
    redis 面试题
    springMVC 面试题整理
  • 原文地址:https://www.cnblogs.com/noyouth/p/13209570.html
Copyright © 2020-2023  润新知