基于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扫描二维码关注公众号,回复: 12914498 查看本文章![]()
- 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 建表
-
创建数据库goods
-
建表
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= '三级分类表';
-
往3个分类表插入点数据
-
其他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 订单表
- 建表
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/';
- 数据导入
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 商品表
- 建表
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/';
- 数据导入
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 用户表
- 建表
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/';
- 数据导入
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 三级分类表
- 建表
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/';
- 数据导入
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 二级分类表
- 建表
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/';
- 数据导入
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 一级分类表
- 建表
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/';
- 数据导入
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 订单详情表
- 建表
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/';
- 数据导入
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 支付流水表
- 建表
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/';
- 数据导入
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的电商数据仓库(七)