基于Apache的电商数据仓库(六)

欢迎

你好!这是我历经1个半月的学习(Apache和CDH),做完的一个项目,本次和你们分享一下Apache版。
感谢您的阅读!

第1章~第4章在基于Apache的电商数据仓库(一)
第5章~第5章在基于Apache的电商数据仓库(二)
第6章~第8章在基于Apache的电商数据仓库(三)
第8章~第9章在基于Apache的电商数据仓库(四)
第10章~第12章在基于Apache的电商数据仓库(五)
第13章~第13章在基于Apache的电商数据仓库(六)
第14章~第14章在基于Apache的电商数据仓库(七)

第13章 系统业务数仓概念

13.1 电商业务流程

emmm,这个流程图我也有点蒙,我在了解了解自己画一个简单易懂的,在分享给你们。

13.2 电商业务表分类

在这里插入图片描述 - 13.2.1 订单表

主要字段
total_amount 订单金额
order_status 订单状态
create_time 创建时间

  • 13.2.2 商品表

主要字段
category3_id 品类id
create_time 创建时间

  • 13.2.3 用户表

主要字段
create_time 创建时间

  • 13.2.4 三级分类表

主要字段
category2_id 二级id

  • 13.2.5 二级分类表

主要字段
category1_id 一级id

  • 13.2.6 一级分类表

主要字段
name 商品名称

  • 13.2.7 订单详情表

主要字段
order_id 订单号
user_id 用户id
sku_id 商品id
create_time 创建时间

  • 13.2.8 支付流水表

主要字段
order_id 订单编号
user_id 用户编号
payment_time 支付时间

第14章 业务数仓搭建

14.1 造数据

  • 14.1.1 建表
  1. 创建数据库goods

  2. 建表

 CREATE TABLE `order_info` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `consignee` VARCHAR(100) DEFAULT NULL COMMENT '收货人',
  `consignee_tel` VARCHAR(20) DEFAULT NULL COMMENT '收件人电话',
  `total_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '总金额',
  `order_status` VARCHAR(20) DEFAULT NULL COMMENT '订单状态',
  `user_id` BIGINT(20) DEFAULT NULL COMMENT '用户id',
  `payment_way` VARCHAR(20) DEFAULT NULL COMMENT '付款方式',
  `delivery_address` VARCHAR(1000) DEFAULT NULL COMMENT '送货地址',
  `order_comment` VARCHAR(200) DEFAULT NULL COMMENT '订单备注',
  `out_trade_no` VARCHAR(50) DEFAULT NULL COMMENT '订单交易编号(第三方支付用)',
  `trade_body` VARCHAR(200) DEFAULT NULL COMMENT '订单描述(第三方支付用)',
  `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  `operate_time` DATETIME DEFAULT NULL COMMENT '操作时间',
  `expire_time` DATETIME DEFAULT NULL COMMENT '失效时间',
  `tracking_no` VARCHAR(100) DEFAULT NULL COMMENT '物流单编号',
  `parent_order_id` BIGINT(20) DEFAULT NULL COMMENT '父订单编号',
  `img_url` VARCHAR(200) DEFAULT NULL COMMENT '图片路径',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='订单表 订单表';

CREATE TABLE `sku_info` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '库存id(itemID)',
  `spu_id` BIGINT(20) DEFAULT NULL COMMENT '商品id',
  `price` DECIMAL(10,0) DEFAULT NULL COMMENT '价格',
  `sku_name` VARCHAR(200) DEFAULT NULL COMMENT 'sku名称',
  `sku_desc` VARCHAR(2000) DEFAULT NULL COMMENT '商品规格描述',
  `weight` DECIMAL(10,2) DEFAULT NULL COMMENT '重量',
  `tm_id` BIGINT(20) DEFAULT NULL COMMENT '品牌(冗余)', 
  `category3_id` BIGINT(20) DEFAULT NULL COMMENT '三级分类id(冗余)',
  `sku_default_img` VARCHAR(200) DEFAULT NULL COMMENT '默认显示图片(冗余)',
  `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8 COMMENT='库存单元表';

CREATE TABLE `user_info` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `login_name` VARCHAR(200) DEFAULT NULL COMMENT '用户名称',
  `nick_name` VARCHAR(200) DEFAULT NULL COMMENT '用户昵称',
  `passwd` VARCHAR(200) DEFAULT NULL COMMENT '用户密码',
  `name` VARCHAR(200) DEFAULT NULL COMMENT '用户姓名',
  `phone_num` VARCHAR(200) DEFAULT NULL COMMENT '手机号',
  `email` VARCHAR(200) DEFAULT NULL COMMENT '邮箱',
  `head_img` VARCHAR(200) DEFAULT NULL COMMENT '头像',
  `user_level` VARCHAR(200) DEFAULT NULL COMMENT '用户级别',
  `birthday` DATE DEFAULT NULL COMMENT '用户生日',
  `gender` VARCHAR(1) DEFAULT NULL COMMENT '性别 M男,F女',
  `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=9501 DEFAULT CHARSET=utf8 COMMENT='用户表';


CREATE TABLE `order_detail` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `order_id` BIGINT(20) DEFAULT NULL COMMENT '订单编号',
  `sku_id` BIGINT(20) DEFAULT NULL COMMENT 'sku_id',
  `sku_name` VARCHAR(200) DEFAULT NULL COMMENT 'sku名称(冗余)',
  `img_url` VARCHAR(200) DEFAULT NULL COMMENT '图片名称(冗余)',
  `order_price` DECIMAL(10,2) DEFAULT NULL COMMENT '购买价格(下单时sku价格)',
  `sku_num` VARCHAR(200) DEFAULT NULL COMMENT '购买个数',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=55750 DEFAULT CHARSET=utf8 COMMENT='订单明细表';


CREATE   TABLE  `payment_info`
(
       `id`            BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
       `out_trade_no`   VARCHAR(20) COMMENT '对外业务编号',
       `order_id`         VARCHAR(20)  COMMENT '订单编号',
       `user_id`          VARCHAR(20) COMMENT '用户编号',
       `alipay_trade_no`  VARCHAR(20)  COMMENT '支付宝交易流水编号',
       `total_amount`    DECIMAL(16,2) COMMENT '支付金额',
       `subject`          VARCHAR(20)  COMMENT '交易内容',
       `payment_type`          VARCHAR(20)  COMMENT '支付方式',
       `payment_time`    VARCHAR(20) COMMENT '支付时间',
        PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=55750 DEFAULT CHARSET=utf8 COMMENT='支付流水表';



CREATE TABLE  `base_category1`
(
       `id`              BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL COMMENT '编号',
       `name`            VARCHAR(100) NOT NULL COMMENT '分类名称'
);
ALTER TABLE `base_category1` COMMENT= '一级分类表';




CREATE TABLE  `base_category2`
(
       `id`              BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL COMMENT '编号',
       `name`            VARCHAR(200) NOT NULL COMMENT '二级分类名称',
       `category1_id`     BIGINT COMMENT '一级分类编号'
);
ALTER TABLE `base_category2` COMMENT= '二级分类表';



 CREATE TABLE  `base_category3`
(
       `id`              BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL COMMENT '编号',
       `name`            VARCHAR(200) NOT NULL COMMENT '三级分类名称',
       `category2_id`     BIGINT COMMENT '二级分类编号'
);
ALTER TABLE `base_category3` COMMENT= '三级分类表';
  1. 往3个分类表插入点数据

  2. 其他5个表插入点数据
    大量数据举例

14.2 sqoop安装

  • 14.2.1 Sqoop要和hive安装在同一台机器!
  • 14.2.2 配置SQOOP_HOME
  • 14.2.3 复制mysql的jar包给sqoop
cp $HIVE_HOME/lib/mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop/lib/
  • 14.2.4 验证
例子
sqoop list-databases --connect jdbc:mysql://192.168.1.103:3306/ --username root --password 123456

14.3 数据导入到hdfs

sku_info举例

/opt/module/sqoop/bin/sqoop import 
--connect jdbc:mysql://hadoop103:3306/goods
--username root 
--password 123456 
--target-dir /data/goods/db/sku_info/2021-02-24 
--delete-target-dir 
--num-mappers 1 
--fields-terminated-by "\t" 
--query "select  id, spu_id, price, sku_name, sku_desc, weight, tm_id,category3_id, create_time
  from sku_info where 1=1"' and $CONDITIONS;' 
--null-string '\\N' 
--null-non-string '\\N'

需要自己改表名(第5行),改时间(第5行),改查询语句(第9行)

第15章 ODS层搭建

声明:
此ODS层是业务数仓的ODS层,不是前面的那个ODS层;
建表都在hive中执行!

15.1 订单表

  1. 建表
create external table ods_order_info (
    `id` string COMMENT '订单编号',
    `total_amount` decimal(10,2) COMMENT '订单金额',
    `order_status` string COMMENT '订单状态',
    `user_id` string COMMENT '用户id',
    `payment_way` string COMMENT '支付方式',
    `out_trade_no` string COMMENT '支付流水号',
    `create_time` string COMMENT '创建时间',
    `operate_time` string COMMENT '操作时间'
) COMMENT '订单表'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_order_info/';
  1. 数据导入
load data inpath '/data/goods/db/order_info/2021-02-24' OVERWRITE into table "goods".ods_order_info partition(dt=2021-02-24);

15.2 商品表

  1. 建表
create external table ods_sku_info( 
    `id` string COMMENT 'skuId',
    `spu_id` string   COMMENT 'spuid', 
    `price` decimal(10,2) COMMENT '价格',
    `sku_name` string COMMENT '商品名称',
    `sku_desc` string COMMENT '商品描述',
    `weight` string COMMENT '重量',
    `tm_id` string COMMENT '品牌id',
    `category3_id` string COMMENT '品类id',
    `create_time` string COMMENT '创建时间'
) COMMENT '商品表'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_sku_info/';
  1. 数据导入
load data inpath '/data/goods/db/sku_info/2021-02-24' OVERWRITE into table "goods".ods_sku_info partition(dt=2021-02-24);

15.3 用户表

  1. 建表
create external table ods_user_info( 
    `id` string COMMENT '用户id',
    `name`  string COMMENT '姓名',
    `birthday` string COMMENT '生日',
    `gender` string COMMENT '性别',
    `email` string COMMENT '邮箱',
    `user_level` string COMMENT '用户等级',
    `create_time` string COMMENT '创建时间'
) COMMENT '用户信息'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_user_info/';
  1. 数据导入
load data inpath '/data/goods/db/user_info/2021-02-24' OVERWRITE into table "goods".ods_user_info partition(dt=2021-02-24);

15.4 三级分类表

  1. 建表
create external table ods_base_category3(
    `id` string COMMENT ' id',
    `name`  string COMMENT '名称',
    category2_id string COMMENT '二级品类id'
) COMMENT '商品三级分类'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_base_category3/';
  1. 数据导入
load data inpath '/data/goods/db/base_category3/2021-02-24' OVERWRITE into table "goods".ods_base_category3 partition(dt=2021-02-24);

15.5 二级分类表

  1. 建表
create external table ods_base_category2( 
    `id` string COMMENT ' id',
    `name` string COMMENT '名称',
    category1_id string COMMENT '一级品类id'
) COMMENT '商品二级分类'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_base_category2/';
  1. 数据导入
load data inpath '/data/goods/db/base_category2/2021-02-24' OVERWRITE into table "goods".ods_base_category2 partition(dt=2021-02-24);

15.6 一级分类表

  1. 建表
create external table ods_base_category1( 
    `id` string COMMENT 'id',
    `name`  string COMMENT '名称'
) COMMENT '商品一级分类'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_base_category1/';
  1. 数据导入
load data inpath '/data/goods/db/base_category1/2021-02-24' OVERWRITE into table "goods".ods_base_category1 partition(dt=2021-02-24);

15.7 订单详情表

  1. 建表
create external table ods_order_detail( 
    `id` string COMMENT '订单详情编号',
    `order_id` string  COMMENT '订单号', 
    `user_id` string COMMENT '用户id',
    `sku_id` string COMMENT '商品id',
    `sku_name` string COMMENT '商品名称',
    `order_price` string COMMENT '商品单价',
    `sku_num` string COMMENT '商品数量',
    `create_time` string COMMENT '创建时间'
) COMMENT '订单明细表'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t' 
location '/warehouse/goods/ods/ods_order_detail/';
  1. 数据导入
load data inpath '/data/goods/db/order_detail/2021-02-24' OVERWRITE into table "goods".ods_order_detail partition(dt=2021-02-24);

15.8 支付流水表

  1. 建表
create external table ods_payment_info(
    `id`   bigint COMMENT '编号',
    `out_trade_no`    string COMMENT '对外业务编号',
    `order_id`        string COMMENT '订单编号',
    `user_id`         string COMMENT '用户编号',
    `alipay_trade_no` string COMMENT '支付宝交易流水编号',
    `total_amount`    decimal(16,2) COMMENT '支付金额',
    `subject`         string COMMENT '交易内容',
    `payment_type`    string COMMENT '支付类型',
    `payment_time`    string COMMENT '支付时间'
   )  COMMENT '支付流水表'
PARTITIONED BY (`dt` string)
row format delimited fields terminated by '\t'
location '/warehouse/goods/ods/ods_payment_info/';
  1. 数据导入
load data inpath '/data/goods/db/payment_info/2021-02-24' OVERWRITE into table "goods".ods_payment_info partition(dt=2021-02-24);

第16章 DWD层

请移步至基于Apache的电商数据仓库(七)

猜你喜欢

转载自blog.csdn.net/qq_43494678/article/details/115034507