【黑马甄选离线数仓day05_核销主题域开发】

1. 指标分类

​ 通过沟通调研,把需求进行分析、抽象和总结,整理成指标列表。指标有原子指标、派生指标、 衍生指标三种类型。

​ 原子指标基于某一业务过程的度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了定义。可以得出结论,原子指标包含三要素,分别是业务过程、度量值和聚合逻辑。例如订单总额就是一个典型的原子指标,其中的业务过程为用户下单、度量值为订单金额,聚合逻辑为sum()求和。

​ 派生指标基于原子指标,在原子指标的基础上加了各种限定。与原子指标不同,派生指标通常会对应实际的统计需求。

在这里插入图片描述

​ 衍生指标是在一个或多个派生指标的基础上,通过各种逻辑运算复合而成的。例如比率、比例等类型的指标。衍生指标也会对应实际的统计需求。

2. 四大业务需求

2.1 销售业务需求

业务流程

线下销售/退款流程:

在这里插入图片描述

线上销售/退款流程:

在这里插入图片描述

主要区别:

  • 线上流程相对更加复杂
  • 线上订单退款与原订单有关联关系,线下订单是没有关联关系
  • 线上订单涉及配送,订单完成时间和下单时间间隔会比较长
核销和售卖

​ 业务部门需要全面分析线上线下的销售情况,包括销售、取消、退款的金额、成本、单量、SKU以及活动的情况。

注意点:

  • 成本指标, 只能在库存处理之后才能获得
    • 商品下单, 仅为预占库存, 只有当订单完成时, 才会真正扣减
    • 商品进货的每批次的成本价格均有所不同, 为保证成本准确性,只有在扣减库存时才能拿到对应批次的成本, 所以要想获取商品成本只能在库存处理之后才能获得
  • 对于线上订单从下单到完成的数据间隔可能会比较长, 如果只从核销维度来统计数据, 延迟性会非常高, 所以, 还需要从售卖维度来统计数据

故: 销售主题按照时间维度分为核销(扣减库存)和售卖(订单下单)两个需求

原子指标:
  • 核销主题:

在这里插入图片描述

  • 售卖主题
    在这里插入图片描述
衍生指标:

在这里插入图片描述

2.2 供应链业务需求

业务流程
  • 要货到货流程:

在这里插入图片描述

  • 商品调拨流程:

在这里插入图片描述

​ **为精细化运营,业务部门严格管控供应链,要求计算:库存的数量、金额、SKU、周转、动销、损耗数量和金额、盘点差异以及要货、收货、配送、退货、退配、调入、调出、系统调整的数量和金额。**具体指标如下。

原子指标:
  • 库存

在这里插入图片描述

  • 订单

在这里插入图片描述

衍生指标:

在这里插入图片描述

2.3 会员需求

​ 因为黑马甄选是生鲜新零售业务,包括线上和线下,所以会员也分为线上会员和线下会员。线下会员,类似理发店的VIP卡,可以在线下购物时享受积分和折扣,还可以进行充值,所以线下会员也叫实体卡会员。线上会员,即在平台上注册的会员。因为线上业务是门店大力推广的方向,也是资本看好的板块,并且可以通过线上渠道进行运营和迭代,所以这里重点分析线上会员。

​ 主要统计会员的注册、消费、充值、余额情况。注意线上会员也可以在线下消费,使用相同的手机号即可。具体指标如下:

原子指标:

在这里插入图片描述

衍生指标:

在这里插入图片描述

2.4 商城需求

​ 在这里,商城需求指的是对商城的访问日志进行分析,主要是流量数据和交易数据。如何评价线上平台的好坏,UV/PV/新访客数量/跳出数/浏览时长等都是非常重要的指标。如何提高平台的运营效果,就是要从各环节进行优化,比如首页展示、商品详情、商品加购、商品结算等,通过绘制转换漏斗,找到薄弱环节,进行专项提高和突破,所以需要计算各环节的具体指标。具体指标如下。

原子指标:

在这里插入图片描述

衍生指标:

在这里插入图片描述

3. 核销主题需求

在这里插入图片描述

3.1 商品销售情况(已核销)分析

说明:

了解不同城市,各个门店以及各个品类商品每天的销售情况(已核销)

指标:

销售单量、销售数量、销售金额、折扣金额、销售成本、余额支付金额、取消商品销售金额、退款商品销售金额、线上单量、线下单量、线上销售金额、线下销售金额、线上销售成本、线下销售成本、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额

维度:

时间、区域、类别

粒度:

时间维度(天、下钻至刻)、区域维度(城市、门店)、类别维度(商品、第一品类、第二品类、第三品类)

涉及库:sale、member、order、stock

涉及表:
    1. 事实表:
    sale: store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_itemmember: member_unionstock: store_stock_adjorder: store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require
    1. 维度表:
     dim: dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f
    

3.2 经营情况(已核销)分析

说明:

了解不同城市,各个门店每天的销售情况(已核销)

指标:
销售单量、销售数量、销售金额、折扣金额、销售成本、余额支付金额、取消商品销售金额、退款商品销售金额、线上单量、线下单量、线上销售金额、线下销售金额、线上销售成本、线下销售成本、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额、线上会员单量、实体卡会员单量、线上会员销售金额、实体卡会员销售金额、线上会员销售成本、实体卡会员销售成本、线上会员下单人数、实体卡会员下单人数、使用余额销售金额、使用余额单量、使用余额的销售成本、使用余额的下单人数
维度:

时间、区域

粒度:
  • 时间维度(天,下钻至刻)、区域维度(城市、门店)
  • 涉及库:sale、member、order、stock
涉及表:
    1. 事实表:

    a) sale:store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_item

    b) member:member_union

    c) stock:store_stock_adj

    d) order:store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require

    1. 维度表:

    dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f

3.3 门店营销情况(以核销)分析

​ 说明:了解各个门店营销情况,包括不同销售渠道(已核销)的销售情况以及日清活动的效果。【日清活动指的是,为了保证果蔬的新鲜度,一些商品当日出清,为了能出清商品,会采用打折的方式出售,并且随着时间的推移,越晚折扣越低。】

销售渠道需求

指标:订单量、退款订单量、取消订单量、商品销售金额、商品销售成本、商品折扣金额

维度:订单渠道

日清活动需求

指标:销售SKU数、销售单量、销售数量、销售金额、折扣金额、销售成本、销售利润、线上单量、线下单量、线上销售金额、线下销售金额、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额、

维度:区域、品类

粒度:区域维度(门店)、品类维度(第一品类)

涉及库:sale、member、order、stock

涉及表:
    1. 事实表:

    a) sale:store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_item

    b) member:member_union

    c) stock:store_stock_adj

    d) order:store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require

    1. 维度表:dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f

4. 核销主题数仓建设

ADS

商品销售情况

在这里插入图片描述

经营情况

在这里插入图片描述

门店营销情况

在这里插入图片描述

ADS建表

黑马甄选离线数仓项目_完整资料\07_脚本\03_数仓各层建表脚本\核销主题ADS建表.sql

商品销售情况门店商品销售天表: ads_goods_store_goods_statistics_day_i城市商品销售天表: ads_goods_city_goods_statistics_day_i门店第三品类销售天表: ads_category_store_third_category_statistics_day_i门店第二品类销售天表: ads_category_store_second_category_statistics_day_i门店第一品类销售天表: ads_category_store_first_category_statistics_day_i经营情况门店经营分析天表: ads_store_manage_statistics_day_i城市经营分析天表: ads_store_city_manage_statistics_day_i门店营销情况门店销售渠道分析天表: ads_marketing_store_source_type_day_i门店品类日清商品分析天表: ads_marketing_store_category_clean_data_day_i门店日清商品分析天表: ads_marketing_store_clean_data_day_i

DWS

商品销售情况

在这里插入图片描述

经营情况

在这里插入图片描述

DWS层建表

黑马甄选离线数仓项目_完整资料\07_脚本\03_数仓各层建表脚本\核销主题DWS建表.sql

门店商品分析刻表: dws_goods_store_goods_statistics_quarter_i
门店经营分析刻表: dws_store_manage_statistics_quarter_i

DWM

商品销售情况

在这里插入图片描述

经营情况

注意: 相比商品销售情况多了会员部分,多了余额部分

此处可以在门店商品销售明细刻表基础上添加会员,余额部分创建一个新表

但是本次项目,我们直接把会员,余额部分已经添加到上述的门店商品销售明细刻表中

DWM层建表

黑马甄选离线数仓项目_完整资料\07_脚本\03_数仓各层建表脚本\核销主题DWM建表.sql

门店商品销售明细刻表: dwm_sold_goods_sold_dtl_i
门店商品损耗刻表: dwm_stock_store_goods_loss_quarter_i
门店商品要货刻表: dwm_order_store_goods_require_quarter_i
门店商品收货刻表: dwm_order_store_goods_receipt_quarter_i

DWD

表汇总分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DWD层建表

黑马甄选离线数仓项目_完整资料\07_脚本\03_数仓各层建表脚本\核销主题DWD建表.sql

门店销售明细宽表(8张表降维拉宽): dwd_sale_store_sale_dtl_i线上余额支付明细表: dwd_sale_shop_sale_balance_pay_i
商城订单表(核销表):    dwd_sold_shop_order_i
商城订单明细表(核销表): dwd_sold_shop_order_item_i商城订单核销明细宽表(10张表降维拉宽): dwd_sold_shop_order_dtl_i门店库调表(3张表降维拉宽): dwd_stock_store_stock_adj_i门店收货表(3张表降维拉宽):dwd_order_store_receive_i
门店退货表(3张表降维拉宽): dwd_order_store_return_to_vendor_i
门店退配表(3张表降维拉宽): dwd_order_store_return_to_dc_i门店调入表(3张表降维拉宽):dwd_order_store_alloc_in_i
门店调出表(3张表降维拉宽):dwd_order_store_alloc_out_i门店要货表(3张表降维拉宽):dwd_order_store_require_i

5. 核销主题的开发工作

5.1 DWD层开发

建库:
CREATE DATABASE IF NOT EXISTS dwd;

注意:具体计算只计算增量,全量计算直接去掉where条件即可。或者在调度时使用补数的方法,将历史分区一天一天跑出来即可!

在DWD层中, 主要是将事实表数据和维度表数据进行关联, 对事实表数据实施降维工作, 同时针对部分表进行清洗转换处理工作

本次DWD层,共设计为12张事实表, 分别为门店销售明细表、线上余额支付明细、商城订单表(核销表)、订单明细表(核销表)、商城核销明细表、门店库调单、门店收货单、门店退货单、门店退配单、门店调入单、门店调出单、门店要货单

5.1.1 门店销售明细宽表

​ 此表为常见的明细打宽的开发任务, 整个业务过程是门店下单, 粒度为订单明细, 维度包含时间、门店、商品、品类等, 事实包括销售数量、金额、成本、余额支付金额等

设计拉宽表的思考点:

  • 1)原始表中重要信息(不好判断的时候,尽量保留所有字段即可)
  • 2)一些必要类型字段(比如说is_day_clear,is_balance_consume)
  • 3)维度拉宽(比如对日期/时间进行处理、门店信息拉宽、商品信息拉宽)
  • 4)还要注意,保持数仓中字段名的统一(类型名、指标、维度字段等)

本次, 我们主要将门店销售的核心三张表进行拉宽操作, 包括门店销售信息表、门店销售明细表、门店销售支付表进行合并拉宽, 同时还需要带上相关的维度表

涉及事实表:
ods_sale_store_sale_info_i(门店销售信息表): 主要描述了门店线下的的销售明细,包括单号、时间、金额、渠道、会员等信息。ods_sale_store_sale_dtl_i(门店销售明细表): 相对于销售信息表, 多了具体的商品信息, 库存信息等注意:1)因为组合商品和组合成分都是会记录到明细表的,这里只需要分析组合商品,所以需要排除掉组合成分。比如牙膏和牙刷一起组合销售,则牙膏和牙刷一起为组合商品,牙膏、牙刷为组合成分。combination_flag int comment '1-组合商品,2-组合成分'2) 有时候库存调整要做一些冲减单,这些单据不是正常的销售单,所以需要排除。过滤条件为offset_flag = 0ods_sale_store_sale_pay_i(门店销售支付表): 主要描述了每一单的支付类别、支付金额等信息。这个表只是为了取余额销售的信息,所以这里让 pay_type_id=’201’三张表的关联条件是order_no相同。订单表和明细表进行inner join,支付表要跟订单表做左关联(因为不是每一单都是余额支付)涉及维度表: 五张dwd_dim_date_f(时间维度表):记录了一个日期对应的不同的日期,如周一日期、周末日期、月一日期、月末日期等。
dwd_dim_source_type_map_i(交易类型映射表):记录了原始交易渠道对应的归类情况。
dwd_dim_store_i(门店表):记录了门店的基本信息,包括门店销售类型、分店类型、城市、区域、人数、状态等信息。
dwd_dim_goods_i(商品表):记录商品的基本信息,包括ID,编码,名称,分类,售卖信息,订货信息等。
dwd_dim_store_goods_i(门店商品表):跟商品表不同的是,商品表记录的是商品通用的信息,而门店商品表里会记录一些门店独有的信息,比如日清信息,采购信息,柜组信息等。
建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_sale_store_sale_dtl_i(-- 门店销售信息表trade_date_time         STRING COMMENT '销售时间',trade_date              STRING COMMENT '交易日期',-- 时间维度表week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',-- 门店销售信息表 hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',parent_store_no         STRING COMMENT '母店编码',store_no                STRING COMMENT '店铺编码',-- 门店表store_name              STRING COMMENT '店铺名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',-- 门店销售信息表trade_type              BIGINT COMMENT '结算类型(0.正常交易,1.赠品发放,2.退货,4.培训,5.取消交易)',-- 交易类型映射表source_type             BIGINT COMMENT '交易来源1:线下POS;2:三方平台;3:传智鲜商城;4:黑马优选团;5:传智大客户;6:传智其他;7:黑马优选;8:优选海淘;9:优选大客户;10:优选POS;11:优选APP;12:优选H5;13:店长工具线下;14:店长工具线上;15:黑马其他',source_type_name        STRING COMMENT '交易来源名称',-- 门店销售信息表sale_type               BIGINT COMMENT '销售类型 1.实物,2.代客,3.优选小程序,4.离店,5.传智鲜小程序,6.第三方平台,7.其他,8.大客户',member_type             BIGINT COMMENT '会员类型:0非会员,1线上会员,2实体卡会员',is_balance_consume      BIGINT COMMENT '是否有余额支付:0否,1是',parent_order_no         STRING COMMENT '母订单编号',order_no                STRING COMMENT '订单编号',pos_no                  STRING COMMENT 'Pos机号',ser_id                  STRING COMMENT 'POS机当天序号从1开始递增',item                    BIGINT COMMENT '商品在小票的位置',`sort`                  BIGINT COMMENT '组合商品分割商品拆出位置',pay_time                STRING COMMENT '支付时间',last_update_time        STRING COMMENT '最后更新时间',cashier_no              STRING COMMENT '收银员编码',cashier_name            STRING COMMENT '收银员名称',share_user_id           STRING COMMENT '分享人用户ID',commission_amount       DECIMAL(27, 2) COMMENT '佣金',zt_id                   BIGINT COMMENT '中台ID',member_id               BIGINT COMMENT '会员ID',card_no                 STRING COMMENT '卡号',-- 商品表first_category_no       STRING COMMENT '一级分类编码',first_category_name     STRING COMMENT '一级分类名称',second_category_no      STRING COMMENT '二级分类编码',second_category_name    STRING COMMENT '二级分类名称',third_category_no       STRING COMMENT '三级分类编码',third_category_name     STRING COMMENT '三级分类名称',-- 门店销售明细表goods_no                STRING COMMENT '商品编码',-- 商品表goods_name              STRING COMMENT '商品名称',spec                    STRING COMMENT '单位',-- 门店销售明细表is_component            BIGINT COMMENT '是否为组合商品:0否,1是',-- 门店商品表supply_team             BIGINT COMMENT '供应链团队 1.平台商品,2.优选标品,3.传智鲜标品,4.传智鲜生鲜,5优选POS商品',dc_no                   STRING COMMENT '采购仓库编号',dc_name                 STRING COMMENT '采购仓库名称',group_no                STRING COMMENT '采购柜组编号',group_name              STRING COMMENT '采购柜组名称',-- 门店销售明细表trade_mode_id           BIGINT COMMENT '结算方式:1购销,2联营',vendor_id               BIGINT COMMENT '供应商ID',contract_no             STRING COMMENT '合同编号',-- 门店商品表is_clean                BIGINT COMMENT '商品是否日清:0否,1是',-- 门店销售明细表is_daily_clear          BIGINT COMMENT '商品是否参加日清活动:0否,1是',sale_qty                DECIMAL(27, 3) COMMENT '商品销售数量',sale_amount             DECIMAL(27, 2) COMMENT '商品销售金额',dis_amount              DECIMAL(27, 2) COMMENT '商品折扣金额',sale_cost               DECIMAL(27, 2) COMMENT '商品销售成本',-- 门店销售支付表balance_amount          DECIMAL(27, 2) COMMENT '余额支付',-- 当前写入时间: current_timestampwrite_time              TIMESTAMP COMMENT '写入时间'
)
COMMENT '门店销售明细表'
partitioned by(dt STRING COMMENT '核销日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

在这里插入图片描述

需求梳理:
  • 先将三个核心事实表进行合并操作, 形成结果数据表
1- 销售日期基于门店销售信息表中的库存日期处理
2- 母店编码和门店编码: 母店编码为门店编码, 门店编码使用销售门店编码如果没有, 使用门店编码
3- 结算类型: 判断trade_id,如果为1 返回0(正常交易), 为2返回2, 如果为3,4返回5
4- 销售渠道如果为null, 返回1
5- 会员类型: 如果以OL- / SF- 开头的为线上会员, 否则为线下会员, 为空为null的为非会员
6- 判断是否为余额消费, 基于是否可以关联上余额支付的表
7- 母订单编号: 判断商品销售金额是否小于0, 如果小于采用source_order_sn(退款单据ID),如果大于采用parent_order_sn. 如果为NULL, 选择order_no
8- 针对item(商品序号),sort(序号),cashier_no,cashier_name,trade_mode_id,share_user_id,commission_amount,zt_id,member_id 如果为null, 设置为0
9- 支付时间选择pay_date
10- 最后修改时间, 选择库存时间
11- 余额金额(平摊金额)计算: 首先判断单据金额是否等于0 , 则结果为0, 如果不是, 判断是否有余额支付金额, 如果有, 使用余额金额 * 商品销售金额 / 单据金额三个表关联需要产出以下几个字段:
trade_date_time,trade_date,hourly,minute,parent_store_no,store_no,source_type,member_type,is_balance_consume,trade_type,parent_order_no,order_no,pos_no,ser_id,item,`sort`,pay_time,last_update_time,cashier_no,cashier_name,zt_id,member_id,card_no,goods_no,is_component,trade_mode_id,vendor_id,contract_no,is_daily_clear,share_user_id,commission_amount,sale_qty,sale_amount,dis_amount,sale_cost,balance_amount
代码实现
selectdate_format(t2.deal_date,'yyyy-MM-dd HH:mm:ss') as trade_date_time,date_format(t2.trade_date,'yyyy-MM-dd HH:mm:ss') as trade_date ,hour(t2.deal_date) as hourly,minute(t2.deal_date) as minute,t2.store_no as parent_store_no,coalesce(t2.sale_store_no,t2.store_no) as store_no,coalesce(t2.source_type,1) as source_type,if(t2.member_type like 'OL-%' OR t2.member_type like 'SF-%',1,if(t2.member_type = '' OR t2.member_type is null,0,2)) as member_type,if(t3.order_no is null,0,1) as is_balance_consume,if(t2.trade_id = 1,0,if(t2.trade_id = 2,2,5)) as trade_type,if(t1.sale_amount < 0,t2.source_order_sn,if(t1.sale_amount >= 0,t2.parent_order_sn,t1.order_no)) as parent_order_no,t2.order_no,t2.pos_no,t2.ser_id,coalesce(t1.item,0) as item,coalesce(t1.`sort`,0) as sort,date_format(t2.pay_date,'yyyy-MM-dd HH:mm:ss') as pay_time,date_format(t2.deal_date,'yyyy-MM-dd HH:mm:ss') as last_update_time,coalesce(t2.cashier_no,0)  as cashier_no,coalesce(t2.cashier_name,0) as cashier_name,coalesce(t2.member_center_sn,0) as zt_id,coalesce(t2.member_id,0) as member_id,t2.card_no,t1.goods_no,if(t1.combination_flag = 1,1,0) as is_component,coalesce(t1.trade_mode_id,0) as trade_mode_id,t1.vendor_id,t1.contract_no,t1.is_daily_clear,coalesce(t1.share_user_id,0) as share_user_id,coalesce(t1.commission_amount,0) as commission_amount,t1.sale_qty,t1.sale_amount,t1.dis_amount,t1.sale_cost,if(t2.total_pay_amount = 0,0,if(t3.pay_amount is null,0,cast(t3.pay_amount * t1.sale_amount / t2.total_pay_amount as decimal(27,2))))as balance_amountfrom (select * from ods.ods_sale_store_sale_dtl_i where combination_flag != 2 and offset_flag = 0) t1join ods.ods_sale_store_sale_info_i t2 on t2.order_no = t1.order_noleft join (select * from ods.ods_sale_store_sale_pay_i where pay_type_id = '201') t3 on t2.order_no = t3.order_no ;
  • 接着基于结果和其他五个维度表关联, 生成最终维度表
1- sale_type(销售类型): 基于上述结果表的source_type判断, 当为1返回1, 当为9返回5 , 当为 4,5,6,7,8返回6. 当为11返回8 ,否则返回7
2- tag商品标识为null, 返回4
3- dc_no(采购仓库编码) 为null 返回-1
4- dc_name(采购仓库名称为null) 返回其他仓
5- group_no(采购柜组编码)为null, 返回-1
6- group_name(采购柜组名称)为null, 返回其他柜组
7- 当 vendor_id、is_clear 为null, 返回0

代码实现:

with t4 as(selectdate_format(t2.deal_date,'yyyy-MM-dd HH:mm:ss') as trade_date_time,date_format(t2.trade_date,'yyyy-MM-dd') as trade_date ,hour(t2.deal_date) as hourly,minute(t2.deal_date) as minute,t2.store_no as parent_store_no,coalesce(t2.sale_store_no,t2.store_no) as store_no,coalesce(t2.source_type,1) as source_type,if(t2.member_type like 'OL-%' OR t2.member_type like 'SF-%',1,if(t2.member_type = '' OR t2.member_type is null,0,2)) as member_type,if(t3.order_no is null,0,1) as is_balance_consume,if(t2.trade_id = 1,0,if(t2.trade_id = 2,2,5)) as trade_type,if(t1.sale_amount < 0,t2.source_order_sn,if(t1.sale_amount >= 0,t2.parent_order_sn,t1.order_no)) as parent_order_no,t2.order_no,t2.pos_no,t2.ser_id,coalesce(t1.item,0) as item,coalesce(t1.`sort`,0) as sort,date_format(t2.pay_date,'yyyy-MM-dd HH:mm:ss') as pay_time,date_format(t2.deal_date,'yyyy-MM-dd HH:mm:ss') as last_update_time,coalesce(t2.cashier_no,0)  as cashier_no,coalesce(t2.cashier_name,0) as cashier_name,coalesce(t2.member_center_sn,0) as zt_id,coalesce(t2.member_id,0) as member_id,t2.card_no,t1.goods_no,if(t1.combination_flag = 1,1,0) as is_component,coalesce(t1.trade_mode_id,0) as trade_mode_id,t1.vendor_id,t1.contract_no,t1.is_daily_clear,coalesce(t1.share_user_id,0) as share_user_id,coalesce(t1.commission_amount,0) as commission_amount,t1.sale_qty,t1.sale_amount,t1.dis_amount,t1.sale_cost,if(t2.total_pay_amount = 0,0,if(t3.pay_amount is null,0,cast(t3.pay_amount * t1.sale_amount / t2.total_pay_amount as decimal(27,2))))as balance_amountfrom (select * from ods.ods_sale_store_sale_dtl_i where combination_flag != 2 and offset_flag = 0) t1join ods.ods_sale_store_sale_info_i t2 on t2.order_no = t1.order_noleft join (select * from ods.ods_sale_store_sale_pay_i where pay_type_id = '201') t3 on t2.order_no = t3.order_no
)insert overwrite table dwd.dwd_sale_store_sale_dtl_i partition(dt)
selectt4.trade_date_time,t4.trade_date,t5.week_trade_date,t5.month_trade_date,t4.hourly,casewhen t4.minute between 0 and 14 then 1when t4.minute between 15 and 29 then 2when t4.minute between 30 and 44 then 3when t4.minute between 45 and 59 then 4end as quarter,(t4.hourly * 4+casewhen t4.minute between 0 and 14 then 1when t4.minute between 15 and 29 then 2when t4.minute between 30 and 44 then 3when t4.minute between 45 and 59 then 4end) as quarters,t4.parent_store_no,t4.store_no,t7.store_name,t7.store_sale_type,t7.store_type_code,t7.worker_num,t7.store_area,t7.city_id,t7.city_name,t7.region_code,t7.region_name,t7.is_day_clear,t4.trade_type,t4.source_type,t6.source_type_name,casewhen t4.source_type = 1 then  1when t4.source_type = 9 then  5when t4.source_type in (4,5,6,7,8) then 6when t4.source_type = 11 then 8else 7end as sale_type,t4.member_type,t4.is_balance_consume,t4.parent_order_no,t4.order_no,t4.pos_no,t4.ser_id,t4.item,t4.sort,t4.pay_time,t4.last_update_time,t4.cashier_no,t4.cashier_name,t4.share_user_id,t4.commission_amount,t4.zt_id,t4.member_id,t4.card_no,t8.first_category_no,t8.first_category_name,t8.second_category_no,t8.second_category_name,t8.third_category_no,t8.third_category_name,t4.goods_no,t8.goods_name,t8.spec,t4.is_component,coalesce(t9.tag,4) as supply_team,coalesce(t9.dc_no,-1) as dc_no,coalesce(t9.dc_name,'其他仓') as dc_name,coalesce(t9.group_no,-1) as group_no,coalesce(t9.group_name,'其他柜组') as group_name ,t4.trade_mode_id,coalesce(t4.vendor_id,0) as vendor_id,t4.contract_no,coalesce(t9.is_clear,0) as is_clean,t4.is_daily_clear,t4.sale_qty,t4.sale_amount,t4.dis_amount,t4.sale_cost,t4.balance_amount,date_sub(current_date(),1) as write_time,t4.trade_date as dt
from  t4left join dim.dwd_dim_date_f t5 on t4.trade_date = t5.trade_dateleft join dim.dwd_dim_source_type_map_i t6 on t6.dt = '2023-09-24' and t4.source_type = t6.original_source_typeleft join dim.dwd_dim_store_i t7 on t7.dt = '2023-09-24' and t4.store_no = t7.store_noleft join dim.dwd_dim_goods_i t8 on t8.dt = '2023-09-24' and  t4.goods_no = t8.goods_noleft join dim.dwd_dim_store_goods_i t9 on t9.dt = '2023-09-24' and t9.goods_no = t4.goods_no;

5.1.2 线上余额支付明细

​ 这个表的目的是为了计算dwd_sold_shop_order_dtl_i(商城核销明细表),因为是核销维度,有可能有的订单从下单到签收经历了很长时间,在判断是否是余额销售的时候,就需要取到当时下单对应的支付单的情况(因为支付单是按下单时间分区的),不可能把全量数据都拿过来做关联,所以这里就需要一个表来只记录余额支付的明细,这样就极大的降低了数据量。

处理方案: 在门店销售支付表在where条件中设置pay_channel_name = ‘余额支付’,只保留余额支付的记录。

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_sale_shop_sale_balance_pay_i(store_no                STRING COMMENT '门店编码',store_name              STRING COMMENT '门店名称',trade_date              TIMESTAMP COMMENT '交易日期',member_id               BIGINT COMMENT '会员ID',zt_id                   BIGINT COMMENT '中台会员ID',trade_order_id          STRING COMMENT '关联的交易单ID',pay_order_id            STRING COMMENT '支付单id',order_no                STRING COMMENT '订单号',pay_channel             STRING COMMENT '支付渠道',pay_channel_name        STRING COMMENT '支付渠道名称',trade_order_type        BIGINT COMMENT '交易单类型,1消费,2充值,3提现,4退货退款',trade_order_type_name   STRING COMMENT '交易单类型名称',pay_amount              DECIMAL(27, 2) COMMENT '支付对等RMB的金额,比如是积分支付,那这里就是积分所对应的RMB的金额',trade_merchant          STRING COMMENT '交易商家'
)
COMMENT '线上余额支付明细'
partitioned by (dt STRING COMMENT '交易日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算操作:


5.1.3 商城订单表(核销表)

​ 订单下单完成后,会经历各种状态变化,只要更新就会同步过来更新后的数据。因为项目有核销主题、售卖主题,在做具体的分析的时候,希望核销主题的表是按照核销时间(完成时间)进行分区的,售卖主题的表是按照售卖时间(下单时间)进行分区的。所以,这里需要对shop_order表进行处理,根据complete_time和create_time进行分别分区,用于核销主题和售卖主题使用。

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_sold_shop_order_i(id                      BIGINT COMMENT '编号',parent_order_no         STRING COMMENT '父单订单号',order_id                STRING COMMENT '订单编号',is_split                BIGINT COMMENT '是否拆单:0-不需要拆单;1-待拆单;2-已拆单',platform_id             BIGINT COMMENT '平台id:1-有赞,2-京东到家,3-美团外卖,4-饿了么',tid                     STRING COMMENT '平台订单号',source_type             BIGINT COMMENT '订单来源:10,20,30,40,41,50,60,70',source_name             STRING COMMENT '订单来源名称:10-有赞,20-京东到家,30-美团外卖,40-饿了么,41-百度外卖,50-传智鲜精选,60-黑马优选,70-抖店',store_no                STRING COMMENT '门店编码',city_id                 BIGINT COMMENT '城市编号',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',order_status            BIGINT,order_status_desc       STRING COMMENT '主订单状态描述:0-新建; 1-待出票;2-待备货;3-待揽件;4-待自提; 5-配送中;6-已完成;7-已取消',pay_type                BIGINT COMMENT '支付类型:1-线下支付;2-线上支付',trade_type              STRING COMMENT '交易类型。取值范围:fixed(一口价) gift(送礼)bulk_purchase(来自分销商的采购)present (赠品领取)group (拼团订单) pifa (批发订单) cod (货到付款) peer (代付) qrcode(扫码商家二维码直接支付的交易)qrcode_3rd(线下收银台二维码交易)',is_deleted              BIGINT COMMENT '是否有效,1:已删除,0:正常',order_create_time       TIMESTAMP COMMENT '平台订单创建时间',order_pay_time          TIMESTAMP COMMENT '订单支付时间',create_time             TIMESTAMP COMMENT '创建时间',print_status            BIGINT COMMENT '打印状态:0-未打票;1-已打票',print_time              TIMESTAMP COMMENT '出票时间',stock_up_status         BIGINT COMMENT '门店处理状态:0-待备货/1-已备货',stock_up_time           TIMESTAMP COMMENT '备货完成时间',order_type              BIGINT COMMENT '配送类型(真正的订单类型由业务类型来决定):1-及时送;2-隔日送;3-自提单',express_type            BIGINT COMMENT '配送方式:0-三方平台配送;1-自配送;2-快递;3-自提',receive_time            TIMESTAMP COMMENT '要求送达/自提时间',express_code            STRING COMMENT '配送单号',delivery_status         BIGINT COMMENT '配送状态:0-待配送;1-配送中;2-已送达',delivery_time           TIMESTAMP COMMENT '配送时间',pick_up_status          BIGINT COMMENT '自提状态:0-待自提;1-已自提',qr_code                 STRING COMMENT 'qr提货码',pick_up_time            TIMESTAMP COMMENT '自提时间',complete_time           TIMESTAMP COMMENT '订单完结时间',is_cancel               BIGINT COMMENT '是否取消',cancel_time             TIMESTAMP COMMENT '取消时间',cancel_reason           STRING COMMENT '取消原因',refund_status           BIGINT COMMENT '退款状态:0未退款,1部分退款,2已全额退款',refund_time             TIMESTAMP COMMENT '已退款时间',last_update_time        TIMESTAMP COMMENT '最新更新时间',order_total_amount      DECIMAL(27, 2) COMMENT '订单总金额',product_total_amount    DECIMAL(27, 2) COMMENT '商品总金额(原价)',pack_amount             DECIMAL(27, 2) COMMENT '餐盒费/打包费',delivery_amount         DECIMAL(27, 2) COMMENT '配送费',discount_amount         DECIMAL(27, 2) COMMENT '订单优惠金额=商家承担优惠金额+平台补贴金额',seller_discount_amount  DECIMAL(27, 2) COMMENT '商家承担优惠金额',platform_allowance_amount DECIMAL(27, 2) COMMENT '平台补贴金额',real_paid_amount        DECIMAL(27, 2) COMMENT '实付金额',product_discount        DECIMAL(27, 2) COMMENT '商品优惠金额',real_product_amount     DECIMAL(27, 2) COMMENT '商品实际金额',buyer_id                BIGINT COMMENT '买家id',buyer_phone             STRING COMMENT '买家电话',buyer_remark            STRING COMMENT '买家备注',r_name                  STRING COMMENT '收货人姓名',r_tel                   STRING COMMENT '收货人电话',r_province              STRING COMMENT '收货人省份',r_city                  STRING COMMENT '收货人城市',r_district              STRING COMMENT '收货人区域',r_address               STRING COMMENT '收货人地址',r_zipcode               STRING COMMENT '收货人邮编',is_tuan_head            BIGINT COMMENT '是否为团长订单',store_leader_id         BIGINT COMMENT '团长id',order_group_no          STRING COMMENT '团单号',commision_amount        DECIMAL(27, 2) COMMENT '抽佣金额',settle_amount           DECIMAL(27, 2) COMMENT '结算金额',points_amount           DECIMAL(27, 2) COMMENT '积分抵扣金额',pay_point               BIGINT COMMENT '消费积分数',balance_amount          DECIMAL(27, 2) COMMENT '余额扣除金额',pay_channel_amount      DECIMAL(27, 2) COMMENT '通过支付渠道支付的金额',point_amount            DECIMAL(27, 2) COMMENT '消费赠送积分',sync_erp_status         BIGINT COMMENT '同步erp状态',sync_erp_msg            STRING COMMENT '同步erp失败消息'
)
COMMENT '商城订单表(核销表)'
partitioned by (dt STRING COMMENT '完成日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

ods_sale_shop_order_i 是按照最后更新时间进行分区的,所以,取出当天更新的数据,并且只取完成时间是当天的数据,插入dwd表时按照complete_time分区即可。

计算:


5.1.4 订单明细表(核销表)

与商城订单表一样, 只获取核销后的订单数据, 以及是最终完结的数据, 在售卖主题中, 获取下单时的信息数据即可

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_sold_shop_order_item_i(id                          BIGINT COMMENT '自增id',order_id                    STRING COMMENT '订单编号',goods_no                    STRING COMMENT '商品编码',goods_name                  STRING COMMENT '商品名称',weight                      DECIMAL(27, 3) COMMENT '重量,单位kg',quantity                    BIGINT COMMENT '数量',unit                        STRING COMMENT '单位',sale_qty                    DECIMAL(27, 3) COMMENT '销售数量',disp_price                  DECIMAL(27, 2) COMMENT 'sku展示价格',pay_price                   DECIMAL(27, 2) COMMENT '价格',sale_amount                 DECIMAL(27, 2) COMMENT '单品销售金额',dis_amount                  DECIMAL(27, 2) COMMENT '单品总折扣金额',sale_cost                   DECIMAL(27, 2) COMMENT '销售成本',sale_type                   BIGINT COMMENT '类型:1-常规;2-赠品',create_time                 TIMESTAMP COMMENT '创建时间',complete_time               TIMESTAMP COMMENT '完成时间',last_update_time            TIMESTAMP COMMENT '更新时间',activity_plat_city_goods_id BIGINT COMMENT '活动商品区域id',activity_type               BIGINT COMMENT '活动类型(11:拼团 21:秒杀)',item_goods_key              STRING COMMENT '虚拟字段,itemgoodskey',is_deleted                  BIGINT COMMENT '是否删除:0-否;1-删除',transfer_paper_no           STRING COMMENT '要货单号',serial_no                   BIGINT COMMENT '商品序号,每个订单下起始都为1',is_delivery                 BIGINT COMMENT '仓发是否配送;1:配送',goods_source_type           BIGINT COMMENT '商品来源类型:1-生鲜品;2-标品',trade_mode_id               BIGINT COMMENT '结算方式:1购销,2联营',vendor_id                   BIGINT COMMENT '供应商ID',contract_no                 STRING COMMENT '合同编号'
)
COMMENT '订单明细表(核销表)'
partitioned by (dt STRING COMMENT '完成日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

处理方式与商城订单表也是类似的

计算:


5.1.5 商城核销明细表

这个表是将商城的订单表、订单明细表、退款表、退款明细表、支付表合起来形成的核销明细表。

需要5张事实表:dwd_sold_shop_order_i、dwd_sold_shop_order_item_i、dwd_sale_shop_sale_balance_pay_i: dwd_sale_shop_sale_balance_pay_i用order_no与订单表和订单明细表的order_id关联。ods_sale_shop_refund_i 退款表,主要记录退款单号、时间、原因、金额等信息。ods_sale_shop_refund_item_i 退款明细表,主要记录退款的商品信息以及活动信息等。因为退款单要获取原单的记录,所以退款表还要与订单表进行关联来取一些字段。比较庆幸的一点是,在退款的时候,订单表也会进行更新,这样在关联订单的时候,只要在对应的那个分区里就可以找到对应的记录,不用再去遍历多个分区来找。退款表、退款明细表、线上支付明细表四个表的关联关系如下(使用退款表作为主表):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需要五张维表:dwd_dim_date_fdwd_dim_store_idwd_dim_goods_idwd_dim_store_goods_iods_mem_member_union_i 会员基础信息表,记录了会员的ID,联系方式,归属门店,来源,状态等信息。
建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_sold_shop_order_dtl_i(complete_time           STRING COMMENT '订单完成时间',trade_date              STRING COMMENT '交易日期',-- 日期表week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',parent_order_no         STRING COMMENT '父单订单号/源单号',order_id                STRING COMMENT '订单编号',trade_type              BIGINT COMMENT '结算类型(0.正常交易,1.赠品发放,2.退货,4.培训,5.取消交易)',is_split                BIGINT COMMENT '是否拆单:0-不需要拆单;1-待拆单;2-已拆单',platform_id             BIGINT COMMENT '平台id:1-有赞,2-京东到家,3-美团外卖,4-饿了么',tid                     STRING COMMENT '平台订单号',source_type             BIGINT COMMENT '订单来源:10,20,30,40,41,50,60,70',source_name             STRING COMMENT '订单来源名称:10-有赞,20-京东到家,30-美团外卖,40-饿了么,41-百度外卖,50-传智鲜精选,60-黑马优选,70-抖店',order_type              BIGINT COMMENT '配送类型(真正的订单类型由业务类型来决定):1-及时送;2-隔日送;3-自提单',express_type            BIGINT COMMENT '配送方式:0-三方平台配送;1-自配送;2-快递;3-自提',order_status            BIGINT,order_status_desc       STRING COMMENT '主订单状态描述:0-新建; 1-待出票;2-待备货;3-待揽件;4-待自提; 5-配送中;6-已完成;7-已取消',pay_type                BIGINT COMMENT '支付类型:1-线下支付;2-线上支付',is_balance_consume      BIGINT COMMENT '是否余额支付:1是,0否',store_no                STRING COMMENT '店铺编码',-- 分店信息表store_name              STRING COMMENT '店铺名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',order_create_time       TIMESTAMP COMMENT '平台订单创建时间',order_pay_time          TIMESTAMP COMMENT '订单支付时间',create_time             TIMESTAMP COMMENT '创建时间',is_cancel               BIGINT COMMENT '是否取消',cancel_time             TIMESTAMP COMMENT '取消时间',cancel_reason           STRING COMMENT '取消原因',last_update_time        TIMESTAMP COMMENT '最新更新时间',-- 会员基础信息表zt_id                   BIGINT COMMENT '中台ID',buyer_id                BIGINT COMMENT '买家id',buyer_phone             STRING COMMENT '买家电话',buyer_remark            STRING COMMENT '买家备注',r_name                  STRING COMMENT '收货人姓名',r_tel                   STRING COMMENT '收货人电话',r_province              STRING COMMENT '收货人省份',r_city                  STRING COMMENT '收货人城市',r_district              STRING COMMENT '收货人区域',r_address               STRING COMMENT '收货人地址',r_zipcode               STRING COMMENT '收货人邮编',is_tuan_head            BIGINT COMMENT '是否为团长订单',store_leader_id         BIGINT COMMENT '团长id',order_group_no          STRING COMMENT '团单号',commission_amount       DECIMAL(27, 2) COMMENT '抽佣金额',settle_amount           DECIMAL(27, 2) COMMENT '结算金额',-- 商品表 first_category_no       STRING COMMENT '一级分类编码',first_category_name     STRING COMMENT '一级分类名称',second_category_no      STRING COMMENT '二级分类编码',second_category_name    STRING COMMENT '二级分类名称',third_category_no       STRING COMMENT '三级分类编码',third_category_name     STRING COMMENT '三级分类名称',goods_no                STRING COMMENT '商品编码',goods_name              STRING COMMENT '商品名称',weight                  DECIMAL(27, 3) COMMENT '重量,单位kg',quantity                DECIMAL(27, 3) COMMENT '数量',unit                    STRING COMMENT '单位',sale_qty                DECIMAL(27, 3) COMMENT '销售数量',disp_price              DECIMAL(27, 2) COMMENT 'sku展示价格',pay_price               DECIMAL(27, 2) COMMENT '价格',sale_amount             DECIMAL(27, 2) COMMENT '单品销售金额',dis_amount              DECIMAL(27, 2) COMMENT '单品总折扣金额',sale_cost               DECIMAL(27, 2) COMMENT '销售成本',sale_type               BIGINT COMMENT '类型:1-常规;2-赠品',activity_plat_city_goods_id BIGINT COMMENT '活动商品区域id',activity_type           BIGINT COMMENT '活动类型(11:拼团 21:秒杀)',order_total_amount      DECIMAL(27, 2) COMMENT '订单总金额(平摊)',order_discount_amount   DECIMAL(27, 2) COMMENT '订单优惠金额=商家承担优惠金额+平台补贴金额(平摊)',order_paid_amount       DECIMAL(27, 2) COMMENT '实付金额(平摊)',balance_amount          DECIMAL(27, 2) COMMENT '余额支付',-- 门店商品信息表supply_team             BIGINT COMMENT '供应链团队 1.平台商品,2.优选标品,3.传智鲜标品,4.传智鲜生鲜,5优选POS商品',dc_no                   STRING COMMENT '采购仓库编号',dc_name                 STRING COMMENT '采购仓库名称',group_no                STRING COMMENT '采购柜组编号',group_name              STRING COMMENT '采购柜组名称',trade_mode_id           BIGINT COMMENT '结算方式:1购销,2联营',vendor_id               BIGINT COMMENT '供应商ID',contract_no             STRING COMMENT '合同编号'
)
COMMENT '商城核销明细表'
partitioned by (dt STRING COMMENT '核销日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

分析操作:

1- 先将 商城订单表、订单明细表、线上余额支付明细 三个表进行关联: 其处理操作与门店销售明细宽表类似1- 当is_cancel 为1是, 返回5 否则返回02- 是否为余额支付, 判断支付表即可3- commission_amount、settle_amount order_total_amount order_discount_amount  order_paid_amount balance_amount 需要计算2- 接着将退款表、退款明细表、商城订单表以及线上余额支付明细表进行进行关联: 其处理操作与门店销售明细宽表类似1- 日期使用退款的创建时间即可2- trade_type(结算类型), 如果cancel_time不为null, 返回5, 否则返回23- 需要将计算后的commission_amount(抽佣金额), settle_amount(结算金额)调整为负数5- quantity,qty,amount,cost调整为负数(做对冲(冲减单))6- weight,unit,dis_amount,order_discount_amount调整为07- sale_type类型只有18- unit设置为空即可3- 将1和2的结果 基于union all 关联在一起, 然后和五张维度表进行关联: 其处理操作与门店销售明细宽表类似

SQL实现:


5.1.6 门店库调表

​ 库调即库存调整,类型有日清活动、盘点更正、报损/溢等。对于这些情况,都是广义上的损耗。为了计算损耗,需要对库调表进行加宽处理。

需求说明: 对源表进行加宽处理,处理时间、添加门店信息等。

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_stock_store_stock_adj_i(trade_date              STRING COMMENT '库存处理日期',week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',id                      BIGINT COMMENT '主键',uid                     STRING COMMENT '唯一标识',order_id                STRING COMMENT '库调单号',order_source            BIGINT COMMENT '下单来源,小程序、pc等', store_no                STRING COMMENT '店铺编码',store_name              STRING COMMENT '店铺名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',goods_no                STRING COMMENT '商品编码',goods_name              STRING COMMENT '商品名称',adj_type_big            STRING COMMENT '库调类型(大类)',adj_type_small          STRING COMMENT '库调类型(小类)',adj_reason_big          STRING COMMENT '库调原因(大类)',adj_reason_small        STRING COMMENT '库调原因(小类)',adj_qty                 DECIMAL(27, 3) COMMENT '库调数量',adj_price               DECIMAL(27, 2) COMMENT '库调单价',adj_amount              DECIMAL(27, 2) COMMENT '库调金额',create_time             TIMESTAMP COMMENT '创建时间',stock_deal_time         TIMESTAMP COMMENT '库存处理时间',sync_time               TIMESTAMP COMMENT '数据同步时间',vendor_no               STRING COMMENT '供应商编码',vendor_name             STRING COMMENT '供应商名称'
) 
COMMENT '门店库调单'
partitioned by(dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

涉及表: 门店库调表 和 日期表以及分店信息表 进行关联

分析处理:

时间采用库存处理时间

计算处理:


5.1.7 门店收货单

门店的收货情况,包括单号,时间,商品信息,数量和金额等。

涉及表: ods_order_store_receive_i(门店收货单)、时间表、分店信息表关联

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_receive_i(trade_date              STRING COMMENT '库存处理日期',week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',id                      BIGINT COMMENT '主键',uid                     STRING COMMENT '唯一标识',order_id                STRING COMMENT '收货单号',order_source            BIGINT COMMENT '下单来源,小程序、pc等',store_no                STRING COMMENT '店铺编码',store_name              STRING COMMENT '店铺名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',goods_no                STRING COMMENT '商品编码',goods_name              STRING COMMENT '商品名称',dc_no                   STRING COMMENT '配送中心编码',dc_name                 STRING COMMENT '配送中心名称',vendor_no               STRING COMMENT '供应商编码',vendor_name             STRING COMMENT '供应商名称',order_type              BIGINT COMMENT '订单类型,1-直送,2-配送,3-代发',receive_price           DECIMAL(27, 2) COMMENT '收货价',receive_qty             DECIMAL(27, 3) COMMENT '收货数量',git_qty                 DECIMAL(27, 3) COMMENT '赠品数量',create_time             TIMESTAMP COMMENT '创建时间',stock_deal_time         TIMESTAMP COMMENT '库存处理时间',dc_send_order_id        STRING COMMENT '仓库发货单号',red_order_id            STRING COMMENT '被红冲单号',contract_no             STRING COMMENT '合同编号',contract_name           STRING COMMENT '合同名称',trade_mode              BIGINT COMMENT '1-直营,2-联营',order_source_type       BIGINT COMMENT '订货标识,0-门店订货,1-采购配货',sync_time               TIMESTAMP COMMENT '数据同步时间'
)
COMMENT '门店收货单'
partitioned by (dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算处理: 日期字段 stock_deal_time


5.1.8 门店退货单

门店退给供应商的商品情况,包括单号、门店、时间、商品信息、数量、金额、原因等。

涉及表: ods_order_store_return_to_vendor_i(门店退货单)、时间表、门店信息表

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_return_to_vendor_i(trade_date              STRING COMMENT '库存处理日期',week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',id                      BIGINT COMMENT '主键',uid                     STRING COMMENT '唯一标识',order_id                STRING COMMENT '退配单号',order_source            BIGINT COMMENT '下单来源,小程序、pc、智能补货、系统等',store_no                STRING COMMENT '门店编码',store_name              STRING COMMENT '门店名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',goods_no                STRING COMMENT '商品编码',goods_name              STRING COMMENT '商品名称',dc_no                   STRING COMMENT '配送中心编码',dc_name                 STRING COMMENT '配送中心名称',vendor_no               STRING COMMENT '供应商编码',vendor_name             STRING COMMENT '供应商名称',return_price            DECIMAL(27, 2) COMMENT '退配价',return_qty              DECIMAL(27, 3) COMMENT '退配数量',create_time             TIMESTAMP COMMENT '创建时间',stock_deal_time         TIMESTAMP COMMENT '库存处理时间',original_order_id       STRING COMMENT '退配原单号',is_fresh                BIGINT COMMENT '是否为生鲜店,0-否,1-是',is_entity               BIGINT COMMENT '是否实物退回,0-否,1-是',responsible_person      STRING COMMENT '责任归属方',return_reason_big       STRING COMMENT '退配原因(大类)',return_desc_big         STRING COMMENT '退配说明(大类)',return_reason_small     STRING COMMENT '退配原因(小类)',return_desc_small       STRING COMMENT '退配说明(小类)',sync_time               TIMESTAMP COMMENT '数据同步时间'
)
COMMENT '门店退货单'
partitioned by (dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算:时间字段 stock_deal_time


5.1.9 门店退配单

门店退给大仓的商品情况,包括单号、门店、时间、商品信息、数量、金额、原因等。

涉及表: ods_order_store_return_to_dc_i(门店退配单)、时间表、门店信息表

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_return_to_dc_i(trade_date              STRING COMMENT '库存处理日期',week_trade_date         STRING COMMENT '周一日期',month_trade_date        STRING COMMENT '月一日期',hourly                  BIGINT COMMENT '交易小时(0-23)',quarter                 BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                BIGINT COMMENT '刻钟数:hourly*4+quarters',id                      BIGINT COMMENT '主键',uid                     STRING COMMENT '唯一标识',order_id                STRING COMMENT '退配单号',order_source            BIGINT COMMENT '下单来源,小程序、pc、智能补货、系统等',store_no                STRING COMMENT '门店编码',store_name              STRING COMMENT '门店名称',store_sale_type         BIGINT COMMENT '店铺销售类型',store_type_code         BIGINT COMMENT '分店类型',worker_num              BIGINT COMMENT '员工人数',store_area              DECIMAL(27, 2) COMMENT '门店面积',city_id                 BIGINT COMMENT '城市ID',city_name               STRING COMMENT '城市名称',region_code             STRING COMMENT '区域编码',region_name             STRING COMMENT '区域名称',is_day_clear            BIGINT COMMENT '是否日清:0否,1是',goods_no                STRING COMMENT '商品编码',goods_name              STRING COMMENT '商品名称',dc_no                   STRING COMMENT '配送中心编码',dc_name                 STRING COMMENT '配送中心名称',vendor_no               STRING COMMENT '供应商编码',vendor_name             STRING COMMENT '供应商名称',return_price            DECIMAL(27, 2) COMMENT '退配价',return_qty              DECIMAL(27, 3) COMMENT '退配数量',create_time             TIMESTAMP COMMENT '创建时间',stock_deal_time         TIMESTAMP COMMENT '库存处理时间',original_order_id       STRING COMMENT '退配原单号',is_fresh                BIGINT COMMENT '是否为生鲜店,0-否,1-是',is_entity               BIGINT COMMENT '是否实物退回,0-否,1-是',responsible_person      STRING COMMENT '责任归属方',return_reason_big       STRING COMMENT '退配原因(大类)',return_desc_big         STRING COMMENT '退配说明(大类)',return_reason_small     STRING COMMENT '退配原因(小类)',return_desc_small       STRING COMMENT '退配说明(小类)',sync_time               TIMESTAMP COMMENT '数据同步时间',batch_type_id           STRING COMMENT '批次类型id'
)
COMMENT '门店退配单'
partitioned by (dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算:时间字段 stock_deal_time


5.1.10 门店调入单

从其他门店调入本店的单据信息,包括时间、单号、商品、门店、商品信息、数量和金额等。

涉及表: ods_order_store_alloc_in_i(门店调入单) 、时间表、门店表

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_alloc_in_i(trade_date                  STRING COMMENT '库存处理日期',week_trade_date             STRING COMMENT '周一日期',month_trade_date            STRING COMMENT '月一日期',hourly                      BIGINT COMMENT '交易小时(0-23)',quarter                     BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                    BIGINT COMMENT '刻钟数:hourly*4+quarters',id                          BIGINT COMMENT '主键',uid                         STRING COMMENT '唯一标识',order_id                    STRING COMMENT '调拨单号',order_source                BIGINT COMMENT '下单来源,小程序、PC等',goods_no                    STRING COMMENT '商品编码',goods_name                  STRING COMMENT '商品名称',alloc_in_store_no           STRING COMMENT '调入门店编码',alloc_in_store_name         STRING COMMENT '调入门店名称',alloc_in_store_sale_type    BIGINT COMMENT '调入店铺销售类型',alloc_in_store_type_code    BIGINT COMMENT '调入分店类型',alloc_in_worker_num         BIGINT COMMENT '调入门店员工人数',alloc_in_store_area         DECIMAL(27, 2) COMMENT '调入门店面积',alloc_in_city_id            BIGINT COMMENT '调入门店城市ID',alloc_in_city_name          STRING COMMENT '调入门店城市名称',alloc_in_region_code        STRING COMMENT '调入门店区域编码',alloc_in_region_name        STRING COMMENT '调入门店区域名称',alloc_in_is_day_clear       BIGINT COMMENT '调入门店是否日清:0否,1是',alloc_out_store_no          STRING COMMENT '调出门店编码',alloc_out_store_name        STRING COMMENT '调出门店名称',alloc_price                 DECIMAL(27, 2) COMMENT '调拨单价',alloc_qty                   DECIMAL(27, 3) COMMENT '调拨数量',alloc_reason                STRING COMMENT '调拨原因',alloc_amount                DECIMAL(27, 2) COMMENT '调拨金额',create_time                 TIMESTAMP COMMENT '创建时间',stock_deal_time             TIMESTAMP COMMENT '库存处理时间',sync_time                   TIMESTAMP COMMENT '数据同步时间',vendor_no                   STRING COMMENT '供应商编码',vendor_name                 STRING COMMENT '供应商名称'
)
COMMENT '门店调入单'
partitioned by (dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算:时间字段为stock_deal_time


5.1.11 门店调出单

从本店调入其他门店的单据信息,包括时间、单号、商品、门店、商品信息、数量和金额等。

涉及表: ods_order_store_alloc_out_i(门店调出单)、时间表、门店信息表

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_alloc_out_i(trade_date                   STRING COMMENT '库存处理日期',week_trade_date              STRING COMMENT '周一日期',month_trade_date             STRING COMMENT '月一日期',hourly                       BIGINT COMMENT '交易小时(0-23)',quarter                      BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                     BIGINT COMMENT '刻钟数:hourly*4+quarters',id                           BIGINT COMMENT '主键',uid                          STRING COMMENT '唯一标识',order_id                     STRING COMMENT '调拨单号',order_source                 BIGINT COMMENT '下单来源,小程序、PC等',goods_no                     STRING COMMENT '商品编码',goods_name                   STRING COMMENT '商品名称',alloc_in_store_no            STRING COMMENT '调入门店编码',alloc_in_store_name          STRING COMMENT '调入门店名称',alloc_out_store_no           STRING COMMENT '调出门店编码',alloc_out_store_name         STRING COMMENT '调出门店名称',alloc_out_store_sale_type    BIGINT COMMENT '调出店铺销售类型',alloc_out_store_type_code    BIGINT COMMENT '调出分店类型',alloc_out_worker_num         BIGINT COMMENT '调出门店员工人数',alloc_out_store_area         DECIMAL(27, 2) COMMENT '调出门店面积',alloc_out_city_id            BIGINT COMMENT '调出门店城市ID',alloc_out_city_name          STRING COMMENT '调出门店城市名称',alloc_out_region_code        STRING COMMENT '调出门店区域编码',alloc_out_region_name        STRING COMMENT '调出门店区域名称',alloc_out_is_day_clear       BIGINT COMMENT '调出门店是否日清:0否,1是',alloc_price                  DECIMAL(27, 2) COMMENT '调拨单价',alloc_qty                    DECIMAL(27, 3) COMMENT '调拨数量',alloc_reason                 STRING COMMENT '调拨原因',alloc_amount                 DECIMAL(27, 2) COMMENT '调拨金额',create_time                  TIMESTAMP COMMENT '创建时间',stock_deal_time              TIMESTAMP COMMENT '库存处理时间',sync_time                    TIMESTAMP COMMENT '数据同步时间',vendor_no                    STRING COMMENT '供应商编码',vendor_name                  STRING COMMENT '供应商名称'
)
COMMENT '门店调出单'
partitioned by (dt STRING COMMENT '库存处理时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

计算SQL: 时间字段为stock_deal_time


5.1.12 门店要货单

门店的要货信息,包括时间、单号、门店、商品信息、数量和金额、要货方式、状态等。

涉及表: ods_order_store_require_i(门店要货单)和日期表和门店表

建表操作:
CREATE TABLE IF NOT EXISTS dwd.dwd_order_store_require_i(trade_date               STRING COMMENT '确认日期',week_trade_date          STRING COMMENT '周一日期',month_trade_date         STRING COMMENT '月一日期',hourly                   BIGINT COMMENT '交易小时(0-23)',quarter                  BIGINT COMMENT '刻钟:1.0-15,2.15-30,3.30-45,4.45-60',quarters                 BIGINT COMMENT '刻钟数:hourly*4+quarters',id                       BIGINT COMMENT '主键',uid                      STRING COMMENT '唯一标识',order_id                 STRING COMMENT '要货单号',order_source             BIGINT COMMENT '下单来源,小程序、pc、智能补货、系统等',store_no                 STRING COMMENT '门店编码',store_name               STRING COMMENT '门店名称',store_sale_type          BIGINT COMMENT '店铺销售类型',store_type_code          BIGINT COMMENT '分店类型',worker_num               BIGINT COMMENT '员工人数',store_area               DECIMAL(27, 2) COMMENT '门店面积',city_id                  BIGINT COMMENT '城市ID',city_name                STRING COMMENT '城市名称',region_code              STRING COMMENT '区域编码',region_name              STRING COMMENT '区域名称',is_day_clear             BIGINT COMMENT '是否日清:0否,1是',goods_no                 STRING COMMENT '商品编码',goods_name               STRING COMMENT '商品名称',dc_no                    STRING COMMENT '配送中心编码',dc_name                  STRING COMMENT '配送中心名称',vendor_no                STRING COMMENT '供应商编码',vendor_name              STRING COMMENT '供应商名称',group_no                 STRING COMMENT '采购柜组编号',require_price            DECIMAL(27, 2) COMMENT '要货价格',require_qty              DECIMAL(27, 3) COMMENT '要货数量',create_time              TIMESTAMP COMMENT '创建时间',send_time                TIMESTAMP COMMENT '预计送货时间',collect_require_order_id STRING COMMENT '要货汇总单号',require_type_code        BIGINT COMMENT '要货类型:1-直送,2-配送,3-代发',is_online                BIGINT COMMENT '1-线上,0-线下',confirm_time             TIMESTAMP COMMENT '审核时间',is_canceled              BIGINT COMMENT '1-取消,0-正常',sync_time                TIMESTAMP COMMENT '数据同步时间',is_urgent                BIGINT COMMENT '是否加急 0,否 1,是',original_order_price     DECIMAL(27, 2) COMMENT '原单价'
)
COMMENT '门店要货单'
partitioned by (dt STRING COMMENT 'confirm_time时间')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python武器库开发-前端篇之CSS元素(三十二)

前端篇之CSS元素(三十二) CSS 元素是一个网页中的 HTML 元素&#xff0c;包括标签、类和 ID。它们可以通过 CSS 选择器选中并设置样式属性&#xff0c;以使网页呈现具有吸引力和良好的可读性。常见的 HTML 元素包括 div、p、h1、h2、span 等&#xff0c;它们可以使用 CSS 设置…

值得看的书--《全宋词》节选

(https://img-blog.csdnimg.cn/5d5fe2844f6646b5b7b415f0a9e80f6c.jpg)

什么是自动化测试po模式,po分层如何实现?

一、什么是PO模式 全称&#xff1a;page object model 简称&#xff1a;POM/PO PO模式最核心的思想是分层&#xff0c;实现松耦合&#xff01;实现脚本重复使用&#xff0c;实现脚本易维护性&#xff01; 主要分三层&#xff1a; 1.基础层BasePage&#xff1a;封装一些最基…

自监督LIGHTLY SSL教程

Lightly SSL 是一个用于自监督学习的计算机视觉框架。 github链接&#xff1a;GitHub - lightly-ai/lightly: A python library for self-supervised learning on images. Documentation&#xff1a;Documentation — lightly 1.4.20 documentation 以下内容主要来自Documen…

作为Java初学者,如何快速学好Java?

作为Java初学者&#xff0c;如何快速学好Java&#xff1f; 开始的一些话 对于初学者来说&#xff0c;编程的学习曲线可能相对陡峭。这是正常现象&#xff0c;不要感到沮丧。逐步学习&#xff0c;循序渐进。 编程是一门实践性的技能&#xff0c;多写代码是提高的唯一途径。尽量…

C++初阶(十二)string的模拟实现

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、string类的模拟实现1、构造、拷贝构造、赋值运算符重载以及析构函数2、迭代器类3、增删查…

【linux】基本指令(中篇)

echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件&#xff0c;就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候&#xff0c;原文件内容不会被覆盖而是追加 more指令 10.more指令…

车载电子电器架构 ——电子电气架构设计方案概述

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文1万多字,认证码字,认真看!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure 设计模式&#xff1a; 关键字驱动 项目结构&#xff1a; 工具层&#xff1a;api_keyword/ 参数层&#xff1a;params/ 用例层&#xff1a;case/ 数据驱动&#xff1a;data_driver/ 数据层&#xff1a;data/ 逻…

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日&#xff0c;Stability AI 推出了 Stable Video Diffusion&#xff0c;这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码&#xff0c;在 Huggin…

c语言刷题12周(1~5)

输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。 题干输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。输入样例2022 1 1 2022 12 31 2024 12 31 2022 4 5输出样例2022-1 2022-365 2024-366 2022-9…

【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录 1. 引言2. 邻接表表示图的原理2.1 有向权图2.2 无向权图2.3 无向非权图2.1 有向非权图 3. 实验内容3.1 实验题目&#xff08;一&#xff09;数据结构要求&#xff08;二&#xff09;输入要求&#xff08;三&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 图是…

node.js解决输出中文乱码问题

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

shell脚本循环语句

目录 一. 循环语句 1. 循环条件 2. 循环次数 3. 循环命令区别 4. for 循环 ①. 第一种语法 ②. 第二种语法 5. while 循环 6. until 循环 二. 跳出循环 1. break 结束循环 2. continue 结束循环 3. exit 结束循环 三. 补充 1. 偶数的表示 2. 奇数的表示 一. 循环…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

用Python进行数据分析:探索性数据分析的实践与技巧(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

死锁是什么?死锁是如何产生的?如何破除死锁?

1. 死锁是什么 多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 2. 死锁的三种典型情况 一个线程, 一把锁, 是不可重入锁, 该线程针对这个锁连续加锁两次, 就会出现死锁. 两个线程…

通过JMeter压测结果来分析Eureka多种服务下线机制后的服务感知情况

文章目录 前言1. Eureka-Server的设计2. EurekaRibbon感知下线服务机制3.服务调用接口压测模型4.Eureka几种服务下线的方式4.1强制下线压测 4.2 发送delete&#xff08;&#xff09;请求压测 4.3 调用DiscoveryManager压测 4. 三方工具Actuator 总结 前言 上文末尾讲到了Eurek…