【黑马甄选离线数仓day08_会员主题域开发】

1. 会员主题域需求说明

1.1 各类会员数量统计

说明:公司为了对不同会员进行不同的营销策略,对各类会员的数量都非常敏感,比如注册会员、消费会员、复购会员、活跃会员、沉睡会员。不仅需要看新增数量还要看累积数量。

指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额

维度:时间

粒度:时间维度(天、周、月)

涉及库:sale、member

涉及表:

  • 事实表:

    • a. sale:dwm_sell_o2o_order_i

    • b. member:member_union、user_point_log_detailed、store_amount_record

  • 维度表:dwd_dim_date_f、dwd_dim_store_i

1.2 门店会员分析

说明:会员对于每个门店来说,都是非常重要的资源,所以每个门店需要看到会员的分析数据。包括注册情况、充值和余额情况、消费情况等。

指标:门店销售额、门店总订单量、当日注册人数、累计注册会员数、当日注册且充值会员数、当日注册且充值且消费会员数、当日注册且消费会员数、充值会员数、充值金额、累计会员充值金额、当日有余额的会员人数、当日会员余额、余额消费人数、余额消费单量、余额支付金额、余额消费金额、会员消费人数、会员消费单量、会员消费金额、会员首单人数、会员首单订单量、会员首单销售额、会员非首单人数、会员非首单订单量、会员非首单销售额

维度:时间

粒度:时间维度(天、周、月)

涉及库:sale、member

涉及表:

  • 事实表:

    • a. sale:dwm_sell_o2o_order_i

    • b. member:member_union、user_point_log_detailed、store_amount_record

  • 维度表:dwd_dim_date_f、dwd_dim_store_i

1.3 其他需求分析

说明:除了分析以上两个需求外,还会分析一些零散的需求,比如会员首次充值、门店新老会员消费、会员复购统计、会员贡献等。从各种角度来分析会员的一些指标。

需求一: 会员首次充值(统计每个会员首次充值的时间, 交易单ID以及对应门店和充值金额)
需求二: 门店新老会员消费(统计每个门店每个月新会员、老会员、全部会员、非会员的数量、消费金额、消费单量(新会员指的首次消费后30天内, 老会员指的首次消费后大于30天))
需求三: 会员复购统计(留存)(统计的指标为统计日期用户量、一日后用户量、二日后用户量、三日后用户量、四日后用户量、五日后用户量、六日后用户量)
需求四: 会员贡献(统计各个会员每天在各个门店消费单量、消费金额、消费成本、线上订单量、线上消费金额、线上消费成本、线下订单量、线下消费金额、线下消费成本)

2. 会员主题建设

2.1 ADS层建设

各类会员数量统计分析

维度指标:
指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额
维度: 时间维度(天、周、月)
​
涉及ADS表:
     门店会员分类月表  和  门店会员分类周表
​
表字段的组成: 维度字段 + 指标结果字段

建表语句:
CREATE TABLE IF NOT EXISTS ads.ads_mem_store_member_classify_week_i(
    trade_date                  STRING COMMENT '周一日期',
​
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
​
    reg_num_add                 BIGINT COMMENT '新增注册会员数',
    reg_num_sum                 BIGINT COMMENT '累计注册会员数',
    consume_num_add             BIGINT COMMENT '新增消费会员数',
    consume_num_sum             BIGINT COMMENT '累计消费会员数',
    repurchase_num_add          BIGINT COMMENT '新增复购会员数',
    repurchase_num_sum          BIGINT COMMENT '累计复购会员数',
    active_member_num           BIGINT COMMENT '活跃会员数',
    sleep_member_num            BIGINT COMMENT '沉睡会员数',
    sale_amount_bind            DECIMAL(27, 2) COMMENT '会员消费金额'
)
comment '门店会员分类周表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');
​
​
CREATE TABLE IF NOT EXISTS ads.ads_mem_store_member_classify_month_i(
    trade_date                  STRING COMMENT '月一日期',
    
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
    
    reg_num_add                 BIGINT COMMENT '新增注册会员数',
    reg_num_sum                 BIGINT COMMENT '累计注册会员数',
    consume_num_add             BIGINT COMMENT '新增消费会员数',
    consume_num_sum             BIGINT COMMENT '累计消费会员数',
    repurchase_num_add          BIGINT COMMENT '新增复购会员数',
    repurchase_num_sum          BIGINT COMMENT '累计复购会员数',
    active_member_num           BIGINT COMMENT '活跃会员数',
    sleep_member_num            BIGINT COMMENT '沉睡会员数',
    sale_amount_bind            DECIMAL(27, 2) COMMENT '会员消费金额'
) 
comment '门店会员分类月表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

门店会员分析

维度指标:
指标: 门店销售额、门店总订单量、当日注册人数、累计注册会员数、当日注册且充值会员数、当日注册且充值且消费会员数、当日注册且消费会员数、充值会员数、充值金额、累计会员充值金额、当日有余额的会员人数、当日会员余额、余额消费人数/单量、余额支付金额、余额消费金额、会员消费人数/单量、会员消费金额、会员首单人数/订单量/销售额、会员非首单人数/订单量/销售额
维度: 时间维度(天、周、月)
​
涉及表: 
    门店会员统计周表 和 门店会员统计月表
​
涉及表字段: 维度字段 + 指标结果字段

建表语句
CREATE TABLE IF NOT EXISTS ads.ads_mem_store_member_statistics_week_i(
    trade_date                  STRING COMMENT '周一日期',
    
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
    
    store_sale_amount           DECIMAL(27, 2) COMMENT '门店销售金额',
    store_orders_number         BIGINT COMMENT '门店总订单量',
    
    register_member_num         BIGINT COMMENT '当日注册人数',
    register_member_num_all     BIGINT COMMENT '累计注册会员数',
    register_recharge_num       BIGINT COMMENT '当日注册且充值会员数',
    rg_rc_td_num                BIGINT COMMENT '当日注册且充值且消费会员数',
    register_trade_num          BIGINT COMMENT '当日注册且消费会员数',
    
    recharge_member_num         BIGINT COMMENT '充值会员数',
    recharge_amount             DECIMAL(27, 2) COMMENT '充值金额',
    recharge_amount_all         DECIMAL(27, 2) COMMENT '累计会员充值金额',
    remain_member_num           BIGINT COMMENT '当周最后一天有余额的会员人数',
    remain_member_amount        DECIMAL(27, 2) COMMENT '当周最后一天会员余额',
    
    balance_member_num          BIGINT COMMENT '余额消费人数',
    balance_member_order_num    BIGINT COMMENT '余额消费单量',
    balance_pay_amount          DECIMAL(27, 2) COMMENT '余额支付金额',
    balance_member_amount       DECIMAL(27, 2) COMMENT '余额消费金额',
    
    member_num                  BIGINT COMMENT '会员消费人数',
    member_order_num            BIGINT COMMENT '会员消费单量',
    member_amount               DECIMAL(27, 2) COMMENT '会员消费金额',
    
    member_first_num            BIGINT COMMENT '会员首单人数',
    member_first_order_num      BIGINT COMMENT '会员首单订单量',
    member_first_amount         DECIMAL(27, 2) COMMENT '会员首单销售额',
    member_nofirst_num          BIGINT COMMENT '会员非首单人数',
    member_nofirst_order_num    BIGINT COMMENT '会员非首单订单量',
    member_nofirst_amount       DECIMAL(27, 2) COMMENT '会员非首单销售额'
) 
comment '门店会员统计周表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');
​
​
CREATE TABLE IF NOT EXISTS ads.ads_mem_store_member_statistics_month_i(
    trade_date                  STRING COMMENT '月一日期',
    
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
    
    store_sale_amount           DECIMAL(27, 2) COMMENT '门店销售金额',
    store_orders_number         BIGINT COMMENT '门店总订单量',
    
    register_member_num         BIGINT COMMENT '当日注册人数',
    register_member_num_all     BIGINT COMMENT '累计注册会员数',
    register_recharge_num       BIGINT COMMENT '当日注册且充值会员数',
    rg_rc_td_num                BIGINT COMMENT '当日注册且充值且消费会员数',
    register_trade_num          BIGINT COMMENT '当日注册且消费会员数',
    
    recharge_member_num         BIGINT COMMENT '充值会员数',
    recharge_amount             DECIMAL(27, 2) COMMENT '充值金额',
    recharge_amount_all         DECIMAL(27, 2) COMMENT '累计会员充值金额',
    remain_member_num           BIGINT COMMENT '当月最后一天有余额的会员人数',
    remain_member_amount        DECIMAL(27, 2) COMMENT '当月最后一天会员余额',
    
    balance_member_num          BIGINT COMMENT '余额消费人数',
    balance_member_order_num    BIGINT COMMENT '余额消费单量',
    balance_pay_amount          DECIMAL(27, 2) COMMENT '余额支付金额',
    balance_member_amount       DECIMAL(27, 2) COMMENT '余额消费金额',
    
    member_num                  BIGINT COMMENT '会员消费人数',
    member_order_num            BIGINT COMMENT '会员消费单量',
    member_amount               DECIMAL(27, 2) COMMENT '会员消费金额',
    
    member_first_num            BIGINT COMMENT '会员首单人数',
    member_first_order_num      BIGINT COMMENT '会员首单订单量',
    member_first_amount         DECIMAL(27, 2) COMMENT '会员首单销售额',
    member_nofirst_num          BIGINT COMMENT '会员非首单人数(非去重)',
    member_nofirst_order_num    BIGINT COMMENT '会员非首单订单量',
    member_nofirst_amount       DECIMAL(27, 2) COMMENT '会员非首单销售额'
) 
comment '门店会员统计月表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

其他指标需求

维度指标
需求一: 会员首次充值(统计每个会员首次充值的时间, 交易单ID以及对应门店和充值金额)
需求二: 门店新老会员消费(统计每个门店每个月新会员、老会员、全部会员、非会员的数量、消费金额、消费单量(新会员指的首次消费后30天内, 老会员指的首次消费后大于30天))
需求三: 会员复购统计(留存)(统计的指标为统计日期用户量、一日后用户量、二日后用户量、三日后用户量、四日后用户量、五日后用户量、六日后用户量)
需求四: 会员贡献(统计各个会员每天在各个门店消费单量、消费金额、消费成本、线上订单量、线上消费金额、线上消费成本、线下订单量、线下消费金额、线下消费成本)
​
​
涉及表:
    会员首次充值表 和  门店新老会员消费月表 和 会员复购统计天表 以及 会员贡献天表

建设语句:
CREATE TABLE IF NOT EXISTS ads.ads_mem_member_first_recharge_i(
    trade_date_time     STRING COMMENT '交易时间',
    trade_date          STRING COMMENT '日期',
    trade_order_id      STRING COMMENT '对应的交易单id',
    zt_id               BIGINT COMMENT '中台 会员id',
    store_no            STRING COMMENT '门店编号',
    city_id             BIGINT COMMENT '城市ID',
    recharge_amount     DECIMAL(27, 2) COMMENT '充值金额'
) 
comment '会员首次充值表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');
​
CREATE TABLE IF NOT EXISTS ads.ads_mem_store_new_old_member_month_i(
    trade_date                  STRING COMMENT '月一时间',
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
​
    member_type                 BIGINT COMMENT '会员类型:1新会员,2老会员,3会员,4非会员',
    member_num                  BIGINT COMMENT '消费会员数',
    sale_amount                 DECIMAL(27, 2) COMMENT '消费金额',
    order_num                   BIGINT COMMENT '消费单量'
) 
comment '门店新老会员消费月表'
partitioned by (dt STRING COMMENT '消费日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY'); 
​
CREATE TABLE IF NOT EXISTS ads.ads_mem_repurchase_day_i(
    trade_date                  STRING COMMENT '统计时间',
​
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
​
    member_count                BIGINT COMMENT '统计日期用户量',
    next_member_count_1         BIGINT COMMENT '一日后用户量',
    next_member_count_2         BIGINT COMMENT '二日后用户量',
    next_member_count_3         BIGINT COMMENT '三日后用户量',
    next_member_count_4         BIGINT COMMENT '四日后用户量',
    next_member_count_5         BIGINT COMMENT '五日后用户量',
    next_member_count_6         BIGINT COMMENT '六日后用户量'
)
comment '会员复购统计天表'
partitioned by (dt STRING COMMENT '消费日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');
​
CREATE TABLE IF NOT EXISTS ads.ads_mem_contribution_day_i(
    trade_date                  STRING COMMENT '统计时间',
    week_trade_date             STRING COMMENT '周一日期',
    month_trade_date            STRING COMMENT '月一日期',
    
    zt_id                       BIGINT COMMENT '会员id',
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
    
    consume_times               BIGINT  COMMENT '消费单量',
    consume_amount              DECIMAL(27, 2) COMMENT '消费金额',
    consume_cost                DECIMAL(27, 2) COMMENT '消费成本',
    online_consume_times        BIGINT COMMENT '线上订单量',
    online_consume_amount       DECIMAL(27, 2) COMMENT '线上消费金额',
    online_consume_cost         DECIMAL(27, 2) COMMENT '线上消费成本',
    offline_consume_times       BIGINT COMMENT '线下订单量',
    offline_consume_amount      DECIMAL(27, 2) COMMENT '线下消费金额',
    offline_consume_cost        DECIMAL(27, 2) COMMENT '线下消费成本'
) 
comment '会员贡献天表'
partitioned by (dt STRING COMMENT '消费日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

2.2 DWS层建设

数仓建设分析: 采用自下而上、基于需求、逐层分析出每一层工作内容 DWS层: 数据服务层 (进行最细粒度的统计分析工作)

各类会员数量统计分析

维度指标:
指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额
维度: 时间维度(天、周、月)
​
涉及表: 门店会员分类天表
​
表字段的组成: 维度字段 + 指标结果字段

建表语句:
CREATE TABLE IF NOT EXISTS dws.dws_mem_store_member_classify_day_i(
    trade_date                   STRING COMMENT '统计时间',
    week_trade_date             STRING COMMENT '周一日期',
    month_trade_date            STRING COMMENT '月一日期',

    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',

    reg_num_add                 BIGINT COMMENT '新增注册会员数',
    reg_num_sum                 BIGINT COMMENT '累计注册会员数',
    consume_num_add             BIGINT COMMENT '新增消费会员数',
    consume_num_sum             BIGINT COMMENT '累计消费会员数',
    repurchase_num_add          BIGINT COMMENT '新增复购会员数',
    repurchase_num_sum          BIGINT COMMENT '累计复购会员数',
    active_member_num           BIGINT COMMENT '活跃会员数',
    sleep_member_num            BIGINT COMMENT '沉睡会员数',
    sale_amount_bind            DECIMAL(27, 2) COMMENT '会员消费金额'
)
comment '门店会员分类天表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

门店会员分析

维度指标:
指标: 门店销售额、门店总订单量、当日注册人数、累计注册会员数、当日注册且充值会员数、当日注册且充值且消费会员数、当日注册且消费会员数、充值会员数、充值金额、累计会员充值金额、当日有余额的会员人数、当日会员余额、余额消费人数/单量、余额支付金额、余额消费金额、会员消费人数/单量、会员消费金额、会员首单人数/订单量/销售额、会员非首单人数/订单量/销售额
维度: 时间维度(天、周、月)

涉及表:
	门店会员统计天表

表字段的组成: 维度字段 + 指标结果字段

建表语句:
CREATE TABLE IF NOT EXISTS dws.dws_mem_store_member_statistics_day_i(
    trade_date                  STRING COMMENT '统计时间',
    week_trade_date             STRING COMMENT '周一日期',
    month_trade_date            STRING COMMENT '月一日期',
    
    store_no                    STRING COMMENT '店铺编码',
    store_name                  STRING COMMENT '店铺名称',
    store_sale_type             BIGINT COMMENT '店铺销售类型',
    store_type_code             BIGINT 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是',
    
    store_sale_amount           DECIMAL(27, 2) COMMENT '门店销售金额',
    store_orders_number         BIGINT COMMENT '门店总订单量',
    
    register_member_num         BIGINT COMMENT '当日注册人数',
    register_member_num_all     BIGINT COMMENT '累计注册会员数',
    register_recharge_num       BIGINT COMMENT '当日注册且充值会员数',
    rg_rc_td_num                BIGINT COMMENT '当日注册且充值且消费会员数',
    register_trade_num          BIGINT COMMENT '当日注册且消费会员数',
    
    recharge_member_num         BIGINT COMMENT '充值会员数',
    recharge_amount             DECIMAL(27, 2) COMMENT '充值金额',
    recharge_amount_all         DECIMAL(27, 2) COMMENT '累计会员充值金额',
    remain_member_num           BIGINT COMMENT '当日有余额的会员人数',
    remain_member_amount        DECIMAL(27, 2) COMMENT '当日会员余额',
    
    balance_member_num          BIGINT COMMENT '余额消费人数',
    balance_member_order_num    BIGINT COMMENT '余额消费单量',
    balance_pay_amount          DECIMAL(27, 2) COMMENT '余额支付金额',
    balance_member_amount       DECIMAL(27, 2) COMMENT '余额消费金额',
    
    member_num                  BIGINT COMMENT '会员消费人数',
    member_order_num            BIGINT COMMENT '会员消费单量',
    member_amount               DECIMAL(27, 2) COMMENT '会员消费金额',
    
    member_first_num            BIGINT COMMENT '会员首单人数',
    member_first_order_num      BIGINT COMMENT '会员首单订单量',
    member_first_amount         DECIMAL(27, 2) COMMENT '会员首单销售额',
    member_nofirst_num          BIGINT COMMENT '会员非首单人数',
    member_nofirst_order_num    BIGINT COMMENT '会员非首单订单量',
    member_nofirst_amount       DECIMAL(27, 2) COMMENT '会员非首单销售额'
) 
comment '门店会员统计日表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

2.3 DWM层建设

DWM层(数仓中间层), 再此层我们主要进行细粒度轻度汇总工作, 以便于能够在DWS层更好的完成聚合计算

维度指标:
各类会员数量统计:

指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额
维度: 时间维度(天、周、月)

门店会员分析:

指标: 门店销售额、门店总订单量、当日注册人数、累计注册会员数、当日注册且充值会员数、当日注册且充值且消费会员数、当日注册且消费会员数、充值会员数、充值金额、累计会员充值金额、当日有余额的会员人数、当日会员余额、余额消费人数/单量、余额支付金额、余额消费金额、会员消费人数/单量、会员消费金额、会员首单人数/订单量/销售额、会员非首单人数/订单量/销售额
维度: 时间维度(天、周、月)


说明:
由于各类会员数据统计分析和门店会员分析中, 有大量的指标存在一定的依赖关系, 所以在此处我们合并在一起进行分析, 向上抽取出一些公共的DWM层的数据表, 便于后续两个DWS层表数据的聚合统计, 本次主要涉及有四张DWM层表:会员销售订单表、会员首次消费表、会员第二次消费表、会员行为天表

建表语句:
CREATE TABLE IF NOT EXISTS dwm.dwm_mem_sell_order_i(
    create_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_no                    STRING COMMENT '订单编号',
    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.大客户',
    is_online_order             BIGINT COMMENT '是否为线上单:0否,1是',
    member_type                 BIGINT COMMENT '会员类型:0非会员,1线上会员,2实体卡会员',
    is_balance_consume          BIGINT COMMENT '是否有余额支付:0否,1是',
    order_type                  BIGINT COMMENT '配送类型(真正的订单类型由业务类型来决定):1-及时送;2-隔日送;3-自提单;4-线下单',
    express_type                BIGINT COMMENT '配送方式:0-三方平台配送;1-自配送;2-快递;3-自提;4-线下',

    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是',

    is_cancel                   BIGINT COMMENT '是否取消',
    cancel_time                 STRING COMMENT '取消时间',
    cancel_reason               STRING COMMENT '取消原因',
    last_update_time            TIMESTAMP COMMENT '最新更新时间',
    
    cashier_no                  STRING COMMENT '收银员编码',
    cashier_name                STRING COMMENT '收银员名称',

    zt_id                       BIGINT COMMENT '中台ID',
    member_id                   BIGINT COMMENT '会员ID',
    card_no                     STRING COMMENT '卡号',
    r_name                      STRING COMMENT '收货人姓名',
    r_province                  STRING COMMENT '收货人省份',
    r_city                      STRING COMMENT '收货人城市',
    r_district                  STRING COMMENT '收货人区域',

    is_tuan_head                BIGINT COMMENT '是否为团长订单',
    store_leader_id             BIGINT COMMENT '团长id',
    order_group_no              STRING COMMENT '团单号',

    settle_amount               DECIMAL(27, 2) COMMENT '结算金额',
    share_user_id               BIGINT COMMENT '分享人用户ID',
    commission_amount           DECIMAL(27, 2) 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 '商品实际金额',
    
    round_amount                DECIMAL(27, 2) COMMENT '舍分金额',       
    wechat_amount               DECIMAL(27, 4) COMMENT '微信支付',
    ali_pay_amount              DECIMAL(27, 4) COMMENT '支付宝支付',
    cash_amount                 DECIMAL(27, 4) COMMENT '现金支付',
    balance_amount              DECIMAL(27, 4) COMMENT '余额支付',
    point_amount                DECIMAL(27, 4) COMMENT '积分支付',
    unionpay_amount             DECIMAL(27, 4) COMMENT '银行支付',
    member_card_amount          DECIMAL(27, 4) COMMENT '线下实体卡支付',
    gift_amount                 DECIMAL(27, 4) COMMENT '礼品卡支付',
    czapi_amount                DECIMAL(27, 4) COMMENT '传智支付',
    other_pay_amount            DECIMAL(27, 4) COMMENT '其他支付' 
)
comment '会员销售订单表'
partitioned by (dt STRING COMMENT '销售日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');


CREATE TABLE IF NOT EXISTS dwm.dwm_mem_first_buy_i(
    zt_id                       BIGINT COMMENT '中台 会员id',
    trade_date_time             STRING COMMENT '首次消费时间',
    trade_date                  STRING COMMENT '首次消费日期',
    week_trade_date             STRING COMMENT '周一日期',
    month_trade_date            STRING COMMENT '月一日期',
    
    store_no                    STRING COMMENT '消费门店',
    sale_amount                 DECIMAL(27, 2) COMMENT '消费金额',
    order_no                    STRING COMMENT '订单编号',
    source_type                 BIGINT COMMENT '交易来源'
) 
comment '会员首次消费表'
partitioned by (dt STRING COMMENT '消费日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');


CREATE TABLE IF NOT EXISTS dwm.dwm_mem_second_buy_i(
    zt_id                       BIGINT COMMENT '中台 会员id',
    trade_date_time             STRING COMMENT '第二次消费时间',
    trade_date                  STRING COMMENT '第二次消费日期',
    week_trade_date             STRING COMMENT '周一日期',
    month_trade_date            STRING COMMENT '月一日期',

    store_no                    STRING COMMENT '消费门店',
    sale_amount                 DECIMAL(27, 2) COMMENT '消费金额',
    order_no                    STRING COMMENT '订单编号',
    source_type                 BIGINT COMMENT '交易来源'
)
comment '会员第二次消费表'
partitioned by (dt STRING COMMENT '消费日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

CREATE TABLE IF NOT EXISTS dwm.dwm_mem_member_behavior_day_i(
    trade_date              STRING COMMENT '时间',
    week_trade_date         STRING COMMENT '周一日期',
    month_trade_date        STRING COMMENT '月一日期',
    
    zt_id                   BIGINT COMMENT '中台 会员id',
    bind_md                 STRING COMMENT '归属门店(绑定门店)',
    reg_md                  STRING COMMENT '注册门店',
    reg_time                TIMESTAMP COMMENT '中台 注册时间',
    is_register             BIGINT COMMENT '当日是否注册',
    is_recharge             BIGINT COMMENT '当日是否充值',
    recharge_times          BIGINT COMMENT '充值次数,没有充值则为0',
    recharge_amount         DECIMAL(27, 2) COMMENT '充值金额,没有充值则为0',
    is_consume              BIGINT COMMENT '当日是否消费',
    consume_times           BIGINT COMMENT '消费次数,没有消费则为0',
    consume_amount          DECIMAL(27, 2) COMMENT '消费金额,没有消费则为0',
    is_first_consume        BIGINT COMMENT '当日是否首次消费',
    first_consume_store     STRING COMMENT '首次消费门店,没有则为null',
    first_consume_amount    DECIMAL(27, 2) COMMENT '首次消费金额,没有消费则为0',
    is_balance_consume      BIGINT COMMENT '当日是否余额消费',
    balance_consume_times   BIGINT COMMENT '余额消费次数,没有消费则为0',
    balance_pay_amount      DECIMAL(27, 2) COMMENT '余额支付金额,没有消费则为0',
    balance_consume_amount  DECIMAL(27, 2) COMMENT '余额消费金额,没有消费则为0',
    is_point_consume        BIGINT COMMENT '当日是否积分消费',
    point_consume_times     BIGINT COMMENT '积分消费次数,没有消费则为0',
    point_pay_amount        DECIMAL(27, 2) COMMENT '积分支付金额,没有消费则为0',
    point_consume_amount    DECIMAL(27, 2) COMMENT '积分消费金额,没有消费则为0',
    point_add               BIGINT COMMENT '增加积分,没有则为0',
    point_reduce            BIGINT COMMENT '减少积分,没有则为0',
    point_change            BIGINT COMMENT '变动积分,没有则为0',
    online_consume_times    BIGINT COMMENT '线上订单量',
    online_consume_amount   DECIMAL(27, 2) COMMENT '线上消费金额',
    offline_consume_times   BIGINT COMMENT '线下订单量',
    offline_consume_amount  DECIMAL(27, 2) COMMENT '线下消费金额'
) 
comment '会员行为天表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

2.4 DWD层建设

DWD层: 数仓明细层(清洗转换、降维操作) 此层核心目标: 基于数据探查情况, 对相关表数据进行合并

会员基础信息表:

  • 需要对此表进行历史数据拉链

    说明: 将每日会员基础信息表中新增及更新的数据, 通过拉链的方式记录下来

CREATE TABLE IF NOT EXISTS dwd.dwd_mem_member_union_i(
    zt_id                    BIGINT COMMENT '中台会员ID',
    member_id                BIGINT COMMENT '会员ID',
    user_id                  BIGINT COMMENT '用户ID',
    card_no                  STRING COMMENT '卡号',
    member_name              STRING COMMENT '会员名称',
    mobile                   STRING COMMENT '手机号',
    user_email               STRING COMMENT '邮箱',
    sex                      BIGINT COMMENT '用户的性别,1男性,2女性,0未知',
    birthday_date            STRING COMMENT '生日',
    address                  STRING COMMENT '地址',
    reg_time                 TIMESTAMP COMMENT '注册时间',
    reg_md                   STRING COMMENT '注册门店',
    bind_md                  STRING COMMENT '绑定门店',
    flag                     BIGINT COMMENT '0正常,1删除',
    is_black                 BIGINT COMMENT '是否被拉黑 1被拉黑,0正常用户',
    user_state               BIGINT COMMENT '会员状态,0停用/注销,1正常,2冻结',
    user_type                STRING COMMENT '用户类型(-1:传智鲜用户;0:普通用户;1:企业用户 2:内部员工 3:黑马门店 4:商铺会员 5:大买家 6:中间商 7:军区员工)',
    member_type              BIGINT COMMENT '会员状态 10:未付费会员 20:付费会员',
    member_status            BIGINT COMMENT '付费会员状态 -1:未付费会员 1:正常 2:试用 3:过期 4:试用已过期',
    expired_time             TIMESTAMP COMMENT '过期时间',
    user_source              BIGINT COMMENT '用户来源 ',
    member_level             BIGINT COMMENT '会员等级',
    growth                   BIGINT COMMENT '成长值',
    invite_member_id         BIGINT COMMENT '邀请人标识',
    invite_type              BIGINT COMMENT '邀请类型,0为内部',
    register_store_leader_id BIGINT COMMENT '注册归属团长 ID',
    last_update_time         TIMESTAMP COMMENT '更新日期',
    end_date                 STRING COMMENT '生效结束日期'
)
comment '会员基础信息表'
partitioned by (start_date STRING COMMENT '生效开始日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

会员积分变动表:

  • 用于记录每个会员每天积分的变动情况(需统计)

CREATE TABLE IF NOT EXISTS dwd.dwd_mem_member_point_change_i(
    trade_date          STRING COMMENT '快照时间',
    zt_id            BIGINT COMMENT '中台ID',
    occupy_subject_id   BIGINT COMMENT '占用主体ID,0为全部,101优选,102传智鲜,103传智商城',
    point_add           BIGINT COMMENT '增加积分,没有则为0',
    point_reduce        BIGINT COMMENT '减少积分,没有则为0',
    point_change        BIGINT COMMENT '变动积分,没有则为0'
) 
comment '会员积分变动表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

线上会员每日余额变动表:

用于记录每个会员每天余额的变动情况(需统计)

CREATE TABLE IF NOT EXISTS dwd.dwd_mem_balance_change_i(
    trade_date      STRING COMMENT '统计日期',
    zt_id           BIGINT COMMENT '中台ID',
    member_id       BIGINT COMMENT '会员ID',
    record_type     BIGINT COMMENT '记录类型,0全部,1消费,2充值,3退款,4.清退余额,5.转化,6.系统清除,7.礼品卡兑换,8.现付结余,9.结余退款,10.退卡',
    times           BIGINT COMMENT '次数',
    change_amount   DECIMAL(27, 2) COMMENT '变动金额'
) 
comment '线上会员每日余额变动表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

线上会员每日余额表:

用于记录每个会员每天余额的情况(需统计)

CREATE TABLE IF NOT EXISTS dwd.dwd_mem_balance_online_i(
    trade_date          STRING COMMENT '统计日期',
    zt_id               BIGINT COMMENT '中台ID',
    member_id           BIGINT COMMENT '会员ID',    
    member_type         BIGINT COMMENT '会员类型',
    member_type_name    STRING COMMENT '会员类型名称',
    store_no            STRING COMMENT '门店编码',
    city_id             BIGINT COMMENT '城市ID',
    balance_amount      DECIMAL(27, 2) COMMENT '余额'
) 
comment '线上会员每日余额表'
partitioned by (dt STRING COMMENT '统计日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');

3- 会员主题开发

3.0 拉链表

1.从ODS层获取增量数据(上一天新增和更新的数据)
2.拿着DWD原始拉链表数据 left join 增量数据 ,修改原始拉链中历史数据的结束时间
3.拿着left join 的结果集 union all 增量数据
4.把最新的拉链数据优先保存到DWD对应的临时表中
5.使用insert+select 方式把临时表中数据灌入DWD拉链表中
拉链实现流程:

3.1 DWD层开发

DWD层: 数仓明细层(清洗转换、降维操作) 此层核心目标: 基于数据探查情况, 对相关表数据进行合并

会员基础信息表:

需要对此表进行历史数据拉链

说明: 将每日会员基础信息表中新增及更新的数据, 通过拉链的方式记录下来

首次导入
-- 首次导入:
insert overwrite table dwd.dwd_mem_member_union_i partition (start_date)
select
    zt_id,
    member_id,
    user_id,
    card_no,
    member_name,
    mobile,
    user_email,
    sex,
    birthday_date,
    address,
    reg_time,
    reg_md,
    bind_md,
    flag,
    is_black,
    user_state,
    user_type,
    member_type,
    member_status,
    expired_time,
    user_source,
    member_level,
    growth,
    invite_member_id,
    invite_type,
    register_store_leader_id,
    last_update_time,
    '9999-99-99' as end_date,
    date_format(date_sub(current_date(),2),'yyyy-MM-dd') as start_date

from ods.ods_mem_member_union_i;
后续导入
-- 步骤一: 在MySQL中, 添加增量的测试数据, 包含 新增 和 更新的数据 (测试)
insert into member.member_union (zt_id, member_id, user_id, card_no, member_name, mobile, user_email, sex, birthday_date, address,reg_time, reg_md, bind_md, flag, is_black, user_state, user_type, member_type, member_status, expired_time, user_source, member_level, growth, invite_member_id, invite_type, register_store_leader_id,last_update_time)
values ('32015926',2160344,NULL,'','32015925',114,163,0,'','不详','2023-10-05 17:09:28','W121','W121',0,0,1,-1,10,-1,NULL,-1,0,0,NULL,NULL,NULL,'2023-10-05 17:09:28');

UPDATE member.member_union SET SEX = 1, last_update_time = '2023-10-05 17:10:20' WHERE zt_id = '32015925';


注意: 日期需要写为上一天的日期


-- 步骤二: 执行DataX, 将新增数据和增量数据导入到ODS层  (应该在数据采集中执行)
说明: 此步骤详细过程参考day02实施

-- 步骤三: 执行增量数据导入

-- 先创建一张目标表的临时表, 用于放置计算后的结果
CREATE TABLE IF NOT EXISTS dwd.dwd_mem_member_union_i_temp(
    zt_id                    BIGINT COMMENT '中台会员ID',
    member_id                BIGINT COMMENT '会员ID',
    user_id                  BIGINT COMMENT '用户ID',
    card_no                  STRING COMMENT '卡号',
    member_name              STRING COMMENT '会员名称',
    mobile                   STRING COMMENT '手机号',
    user_email               STRING COMMENT '邮箱',
    sex                      BIGINT COMMENT '用户的性别,1男性,2女性,0未知',
    birthday_date            STRING COMMENT '生日',
    address                  STRING COMMENT '地址',
    reg_time                 TIMESTAMP COMMENT '注册时间',
    reg_md                   STRING COMMENT '注册门店',
    bind_md                  STRING COMMENT '绑定门店',
    flag                     BIGINT COMMENT '0正常,1删除',
    is_black                 BIGINT COMMENT '是否被拉黑 1被拉黑,0正常用户',
    user_state               BIGINT COMMENT '会员状态,0停用/注销,1正常,2冻结',
    user_type                STRING COMMENT '用户类型(-1:传智鲜用户;0:普通用户;1:企业用户 2:内部员工 3:黑马门店 4:商铺会员 5:大买家 6:中间商 7:军区员工)',
    member_type              BIGINT COMMENT '会员状态 10:未付费会员 20:付费会员',
    member_status            BIGINT COMMENT '付费会员状态 -1:未付费会员 1:正常 2:试用 3:过期 4:试用已过期',
    expired_time             TIMESTAMP COMMENT '过期时间',
    user_source              BIGINT COMMENT '用户来源 ',
    member_level             BIGINT COMMENT '会员等级',
    growth                   BIGINT COMMENT '成长值',
    invite_member_id         BIGINT COMMENT '邀请人标识',
    invite_type              BIGINT COMMENT '邀请类型,0为内部',
    register_store_leader_id BIGINT COMMENT '注册归属团长 ID',
    last_update_time         TIMESTAMP COMMENT '更新日期',
    end_date                 STRING COMMENT '生效结束日期'
)
comment '会员基础信息表'
partitioned by (start_date STRING COMMENT '生效开始日期')
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='SNAPPY');


with t2 as (
    select
        t1.zt_id,
        t1.member_id,
        t1.user_id,
        t1.card_no,
        t1.member_name,
        t1.mobile,
        t1.user_email,
        t1.sex,
        t1.birthday_date,
        t1.address,
        t1.reg_time,
        t1.reg_md,
        t1.bind_md,
        t1.flag,
        t1.is_black,
        t1.user_state,
        t1.user_type,
        t1.member_type,
        t1.member_status,
        t1.expired_time,
        t1.user_source,
        t1.member_level,
        t1.growth,
        t1.invite_member_id,
        t1.invite_type,
        t1.register_store_leader_id,
        t1.last_update_time,
        if(
            t2.zt_id is null OR t1.end_date != '9999-99-99',
            t1.end_date,
            t2.dt
        ) as end_date,
        t1.start_date
    from dwd.dwd_mem_member_union_i t1
        left join (select * from ods.ods_mem_member_union_i where dt = date_format(date_sub(current_date(),1),'yyyy-MM-dd')) as t2
        on t1.zt_id = t2.zt_id
    union all
    select
        zt_id,
        member_id,
        user_id,
        card_no,
        member_name,
        mobile,
        user_email,
        sex,
        birthday_date,
        address,
        reg_time,
        reg_md,
        bind_md,
        flag,
        is_black,
        user_state,
        user_type,
        member_type,
        member_status,
        expired_time,
        user_source,
        member_level,
        growth,
        invite_member_id,
        invite_type,
        register_store_leader_id,
        last_update_time,
        '9999-99-99' as end_date,
        date_format(date_sub(current_date(),1),'yyyy-MM-dd') as start_date
    from ods.ods_mem_member_union_i
    where dt = date_format(date_sub(current_date(),1),'yyyy-MM-dd')
)
insert overwrite table dwd.dwd_mem_member_union_i_temp partition (start_date)
select
*
from t2 ;

-- 将临时表数据覆盖回目标表中
insert overwrite table dwd.dwd_mem_member_union_i partition (start_date)
select * from dwd.dwd_mem_member_union_i_temp;

-- 将临时表删除
drop table dwd.dwd_mem_member_union_i_temp;
情况说明:
	1- 目前所做的拉链表是针对历史所有数据, 哪怕这个数据是五年前创建后, 然后五年后发生修改, 我们依然会进行维护
	
	2- 目前所有的拉链表是针对表中所有的字段, 只要表中任何字段发生变更, 都会进行维护
	

但是:
	在实际开发中,我们一般不需要维护历史所有数据, 也不需要维护表中所有的字段
	
	一般维护最近一段周期的数据(一个月、一个季度、一年(最常用))
	
	一般维护的核心与后续指标计算相关的字段: 用哪些一般维护哪些

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用chatGPT开发项目:我想的无人的智慧树网站 流量之神 利用人工智能的算法将人吸引住 GPT4是不是越来越难用了,问一下就要证明一下自己是不是人类

广度发散:让AI给出时代或今日或你关注的热点事件 比如采集新闻头条,根据内容或标题,以不同的角度,或各种人群的角色,生成50篇简短的文章。一下就能占传统的搜索引擎。这是AI最擅长的【千人千面,海量生成】…

开源CDN软件GoEdge —— 筑梦之路

官方网站:GoEdge CDN - 制作自己的CDN - GoEdge CDN | 自建CDN GoEdge是一款管理分布式CDN边缘节点的开源工具软件,目的是让用户轻松地、低成本地创建CDN/WAF等应用。 特性 免费 - 开源、免费、自由、开放 简单 - 架构简单清晰,安装简单&a…

Autosar MCAL-RH850P1HC Port配置

文章目录 PortPortGroupPortPin PortFilterGroupConfigDigital Filter Clock Selection0Digital Filter Clock Selection1 PortGeneralCritical Section ProtectionDev Error DetectDevice NameMax ModeSet Pin Default Modee ApiSet Pin Modee ApiSet to Dio Alt Modee ApiUse…

为什么要替换 Object.defineProperty?

目录 前言:为什么要替换 Object.defineProperty? 详解:为什么要替换 Object.defineProperty? 总结: 前言:为什么要替换 Object.defineProperty? JavaScript中的Object.defineProperty是一种…

个人Windows电脑通过Cloudreve+Cpolar搭建PHP云盘系统公网可访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

flask web开发学习之初识flask(二)

文章目录 一、创建程序实例并注册路由1. 为视图绑定绑定多个URL2. 动态URL 二、启动开发服务器1. 自动发现程序实例2. 管理环境变量3. 使用pycharm运行服务器4. 更多的启动选项5. 设置运行环境6. 调试器7. 重载器 一、创建程序实例并注册路由 app.py # 从flask包中导入flask类…

一次性客户的笔记总结

创建一次性客户,系统会给出一个客户编码; 每次记账的时候,在录入过账码及客户编码后,点击回车,都需要录入这个客户的详细信息(比如 客户名称等) 一次性客户的信息存储在BSEC表中,这种…

【Java 基础】16 泛型

文章目录 什么是泛型?泛型的声明泛型的使用泛型方法通配符和泛型上下界1)通配符2)泛型上下界 泛型的好处注意事项 泛型提供了一种在编写代码时更好地 支持类型安全的机制。通过泛型,我们可以编写更加 通用、 灵活、 可读性高的…

使用百度开发者平台处理语音朗读

--TIME --百度开发者中心-汇聚、开放、助力、共赢 --注册账号 -- 准备工作 准备工作 更新时间:2023-01-13 成为开发者 三步完成账号的基本注册与认证: STEP1:点击进入控制台,选择需要使用的AI服务项。若为未登录状态&#xf…

笔记-模拟角频率和数字角频率的关系理解

先建议阅读前人此文(点击这里),有助于理解。 模拟频率:f 模拟角频率:Ω 数字角频率:ω 其中:在模拟信号中Ω 2πf 正弦波表示:sin(2πft) sin(Ωt) 数字信号就是离散的&#xff…

【动态规划】LeetCode-198/LCR089.打家劫舍

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

整数和浮点数在内存中的存储

文章目录 每日一言整数在内存中的存储方式浮点数在内存中的存储结语 每日一言 You just can’t beat the person who never gives up. 你无法打败那位永不放弃的人。 整数在内存中的存储方式 整数在内存中的存储方式通常采用二进制形式,即将整数的数值转化为二进制…

笔记66:自注意力和位置编码

本地笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章:动手学深度学习~注意力机制 a a a a a a a a a a a a a a a a a a a

3D Web可视化平台助力Aras开发PLM系统:提供数据访问、可视化和发布功能

HOOPS中文网慧都科技是HOOPS全套产品中国地区指定授权经销商,提供3D软件开发工具HOOPS售卖、试用、中文试用指导服务、中文技术支持。http://techsoft3d.evget.com/ Aras是一个面向数字化工业应用的开放性平台,帮助世界领先的复杂互联产品制造商转变其产…

项目管理实践:如何进行项目分解?

项目管理是一个复杂的工程,作为项目管理者,项目经理应该有着统筹管理项目全局的能力。 创建一个项目计划可分为四步: 1、明确项目目标 项目在成立或创建之初就要有清晰明确的目标; 项目达到什么目的? 项目目标是…

CleanMyMac X2024破解注册激活码

CleanMyMac X for Mac中文2024版只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。 cleanmymac x个人认为X代表界面上的最大升级,功能方面有更多增加,与最新macOS系统更加兼容,流畅地与系统性…

linux 命令 tmux 用法详解

一、tmux 解决的痛点(screen命令一样可以解决,但是tmux功能更强大) 痛点一:大数据传输的漫长一夜 相信做过 Linux 服务运维的同学,都用 scp 进行过服务器间的大文件网络传输。一般这需要很长的时间,这期间…

用Python创建日历详细指南与实用示例

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 用Python创建日历详细指南与实用示例,全文4800字,阅读大约15分钟。 在日常生活和工作中,创建和管理日历是一项关键任务。Python提供了丰富…

刷题系列——排序算法

参考:README - 十大经典排序算法 1)排序算法分为内部外部排序两种,这个之前并不了解,外部排序需要访问外存的这个就是指需要额外内存比如另一个list或者dict存储中间结果。 2)稳定性:排序后 2 个相等键值…

DFT新手教程:VASP中ISIF取值设置

新手初学VASP计算时首先接触到的就是结构优化的计算任务。 在结构优化中,INCAR中的关键参数包括 IBRION ,NSW,ISIF,EDIFF和EDIFFG 各个参数均可在vaspwiki查到可设置的参数以及该参数所具有的设置的含义。 https://www.vasp.at/…