大数据-244 离线数仓 - 电商核心交易业务 ODS层 数据库结构 数据加载 DataX ...

打印 上一主题 下一主题

主题 776|帖子 776|积分 2328

点一下关注吧!!!非常感谢!!持续更新!!!

Java篇开始了!

现在开始更新 MyBatis,一起深入浅出!
现在已经更新到了:



  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据发掘(已更完)
  • Prometheus(已更完)
  • Grafana(已更完)
  • 离线数仓(正在更新…)
章节内容

上节我们完成了如下的内容:


  • 电商核心交易业务
  • 增量数据导入 订单、订单明细、产品明细表

基本介绍



  • ODS层表结构域源数据基本类似(列表、数据范例)
  • ODS层表名遵循统一的规范
在大数据体系中,ODS(Operational Data Store),即操作数据存储,是数据堆栈中的紧张组成部分,起着承上启下的作用。ODS主要是用于存储原始的、经过轻度处理的数据,通常直接从业务系统(如ERP、CRM等)中抽取而来。
ODS是大数据架构中的数据层之一,它是指在数据从业务系统到数据堆栈的过程中,用于暂时存放和管理数据的区域。ODS一般用来存储接近及时的、较为原始的操作型数据,为上层的数据清洗、加工、分析提供根本。
功能定位



  • 作为数据堆栈的前置层。
  • 承接从业务系统或外部泉源抽取的数据。
  • 数据通常不进行深度加工和聚合,保持业务的原貌。
数据特点



  • 原始性:数据通常是经过轻度尺度化后的原始数据,保存业务系统的字段格式。
  • 及时性:相比数据堆栈,ODS的数据更新更为及时,可接近及时。
  • 短期存储:ODS中的数据存储周期通常较短,一般只保存最近一段时间的数据(如7天、30天)。
ODS的作用

缓冲层作用



  • ODS是数据进入数据堆栈的缓冲区,制止直接从业务系统中抽取数据对业务系统造成压力。
  • 将业务系统与数据堆栈解耦,低落系统之间的耦合性。
数据整合和清洗



  • 对原始数据进行轻度的清洗(如去重、格式转换、简单校验等)。
  • 为不同泉源的数据提供统一的格式和尺度,便于后续分析和处理。
支持及时查询



  • 提供较及时的数据查询服务,支持业务运营和分析需求。
  • 得当处理短期内的数据报表、运营监控等需求。
数据追溯

保存业务数据的原始状态,方便数据问题的追溯和修复。
ODS层建表

所有的表都是分区表,字段之间的分隔符号都是",",为表的数据文件指定的位置。
ods_trade_orders

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_orders`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_orders`(
  4.   `orderid` int,
  5.   `orderno` string,
  6.   `userid` bigint,
  7.   `status` tinyint,
  8.   `productmoney` decimal(10, 0),
  9.   `totalmoney` decimal(10, 0),
  10.   `paymethod` tinyint,
  11.   `ispay` tinyint,
  12.   `areaid` int,
  13.   `tradesrc` tinyint,
  14.   `tradetype` int,
  15.   `isrefund` tinyint,
  16.   `dataflag` tinyint,
  17.   `createtime` string,
  18.   `paytime` string,
  19.   `modifiedtime` string)
  20. COMMENT '订单表'
  21. PARTITIONED BY (`dt` string)
  22. row format delimited fields terminated by ','
  23. location '/user/data/trade.db/orders/';
复制代码
加载结果如下所示:

ods_trade_order_product

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_order_product`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_order_product`(
  4. `id` string,
  5. `orderid` decimal(10,2),
  6. `productid` string,
  7. `productnum` string,
  8. `productprice` string,
  9. `money` string,
  10. `extra` string,
  11. `createtime` string)
  12. COMMENT '订单明细表'
  13. PARTITIONED BY (`dt` string)
  14. row format delimited fields terminated by ','
  15. location '/user/data/trade.db/order_product/';
复制代码
执行结果如下图所示:

ods_trade_product_info

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_product_info`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_product_info`(
  4.   `productid` bigint,
  5.   `productname` string,
  6.   `shopid` string,
  7.   `price` decimal(10,0),
  8.   `issale` tinyint,
  9.   `status` tinyint,
  10.   `categoryid` string,
  11.   `createtime` string,
  12.   `modifytime` string)
  13. COMMENT '产品信息表'
  14. PARTITIONED BY (`dt` string)
  15. row format delimited fields terminated by ','
  16. location '/user/data/trade.db/product_info/';
复制代码
对应的结果如下图所示:

ods_trade_product_category

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_product_category`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_product_category`(
  4.   `catid` int,
  5.   `parentid` int,
  6.   `catname` string,
  7.   `isshow` tinyint,
  8.   `sortnum` int,
  9.   `isdel` tinyint,
  10.   `createtime` string,
  11.   `level` tinyint)
  12. COMMENT '产品分类表'
  13. PARTITIONED BY (`dt` string)
  14. row format delimited fields terminated by ','
  15. location '/user/data/trade.db/product_category';
复制代码
对应的结果如下图所示:

ods_trade_shop

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_shops`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_shops`(
  4.   `shopid` int,
  5.   `userid` int,
  6.   `areaid` int,
  7.   `shopname` string,
  8.   `shoplevel` tinyint,
  9.   `status` tinyint,
  10.   `createtime` string,
  11.   `modifytime` string)
  12. COMMENT '商家店铺表'
  13. PARTITIONED BY (`dt` string)
  14. row format delimited fields terminated by ','
  15. location '/user/data/trade.db/shops';
复制代码
执行结果如下图所示:

ods_trade_shop_admin_org

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_shop_admin_org`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_shop_admin_org`(
  4.   `id` int,
  5.   `parentid` int,
  6.   `orgname` string,
  7.   `orglevel` tinyint,
  8.   `isdelete` tinyint,
  9.   `createtime` string,
  10.   `updatetime` string,
  11.   `isshow` tinyint,
  12.   `orgType` tinyint)
  13. COMMENT '商家地域组织表'
  14. PARTITIONED BY (`dt` string)
  15. row format delimited fields terminated by ','
  16. location '/user/data/trade.db/shop_org/';
复制代码
执行结果如下图所示:

ods_trade_payments

  1. use ods;
  2. DROP TABLE IF EXISTS `ods.ods_trade_payments`;
  3. CREATE EXTERNAL TABLE `ods.ods_trade_payments`(
  4.   `id` string,
  5.   `paymethod` string,
  6.   `payname` string,
  7.   `description` string,
  8.   `payorder` int,
  9.   `online` tinyint)
  10. COMMENT '支付方式表'
  11. PARTITIONED BY (`dt` string)
  12. row format delimited fields terminated by ','
  13. location '/user/data/trade.db/payments/';
复制代码
执行结果如下图所示:

ODS层数据加载

编写脚本

DataX仅仅是将数据从MySQL导入到了HDFS,数据并没有与Hive表创建起关联。现在我们要编写脚本,任务就是:数据迁徙、数据加载到ODS层
编写脚本:
  1. vim /opt/wzk/hive/ods_load_trade.sh
复制代码
写入的内容如下所示:
  1. #!/bin/bash
  2. source /etc/profile
  3. if [ -n "$1" ] ;then
  4.   do_date=$1
  5. else
  6.   do_date=`date -d "-1 day" +%F`
  7. fi
  8. # 创建目录
  9. hdfs dfs -mkdir -p /user/data/trade.db/product_category/dt=$do_date
  10. hdfs dfs -mkdir -p /user/data/trade.db/shops/dt=$do_date
  11. hdfs dfs -mkdir -p /user/data/trade.db/shop_org/dt=$do_date
  12. hdfs dfs -mkdir -p /user/data/trade.db/payments/dt=$do_date
  13. hdfs dfs -mkdir -p /user/data/trade.db/orders/dt=$do_date
  14. hdfs dfs -mkdir -p /user/data/trade.db/order_product/dt=$do_date
  15. hdfs dfs -mkdir -p /user/data/trade.db/product_info/dt=$do_date
  16. # 数据迁移
  17. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/product_category.json
  18. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/shops.json
  19. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/shop_org.json
  20. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/payments.json
  21. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/orders.json
  22. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/order_product.json
  23. python $DATAX_HOME/bin/datax.py -p "-Ddo_date=$do_date" /opt/wzk/datax/product_info.json
  24. # 加载 ODS 层数据
  25. sql="
  26. alter table ods.ods_trade_orders add partition(dt='$do_date');
  27. alter table ods.ods_trade_order_product add
  28. partition(dt='$do_date');
  29. alter table ods.ods_trade_product_info add
  30. partition(dt='$do_date');
  31. alter table ods.ods_trade_product_category add
  32. partition(dt='$do_date');
  33. alter table ods.ods_trade_shops add partition(dt='$do_date');
  34. alter table ods.ods_trade_shop_admin_org add
  35. partition(dt='$do_date');
  36. alter table ods.ods_trade_payments add
  37. partition(dt='$do_date');
  38. "
  39. hive -e "$sql"
复制代码
编写的结果如下所示:

运行测试

  1. sh /opt/wzk/hive/ods_load_trade.sh 2020-07-12
复制代码
执行结果如下所示:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表