【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】

news2025/8/17 16:19:58

离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计

  • 离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计
    • 一、DWS层设计要点
    • 二、DWS层设计分析 - 1d/nd
      • 1.DWS层设计一:不考虑用户维度
      • 2.DWS层设计二:考虑用户维度
      • 2.DWS层设计三 :考虑用户+商品维度,形成DWS层汇总表
        • 最终建表方案:
    • 三、DWS层设计分析 - td 历史至今
      • 1.以新增下单人数的需求为例
    • 三、DWS层设计分析 - 总结

离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计

一、DWS层设计要点

  • DWS层计算是依托于业务层面的需求来实现的,是需求驱动的。
  • 设计要点:
    • 1.DWS层的设计参考指标体系;
      • 具体参考之前文档笔记:https://blog.csdn.net/weixin_38136584/article/details/129167647?spm=1001.2014.3001.5501
      • 从0-1搭建dws层步骤:
        • 1.分析现有的每个业务需求,这一步最难,每个业务需求怎样计算,然后分析每个业务需求依赖哪些指标,每个指标依赖的派生指标有哪些,构建出业务需求指标的分析视图。
        • 2.从分析出来的业务需求视图里面,可以提炼到表格汇总,然后寻找共用的派生指标有哪些
        • 3.根据派生指标,来进行设计DWS层表格,在DWS层创建表格和派生指标关系?一对多;哪些派生指标共用公共派生指标表格呢?
          • 将业务过程相同、统计周期相同、统计粒度相同的派生指标汇总到一个派生指标对应的表格中,这样DWS层表格就会减少很多。
            • 业务过程相同:来自于同一张事实表
            • 统计周期相同:在进行过滤的时候,过滤的分区也相同。
              • 不同周期的可以放在一个表格中,但是这样存储的话,在进行数据装载的时候,如果牵涉到历史至今的周期和最近一天的周期,那么会全量扫描dwd层全表,但是最新一天的数据,仅仅跟前一日的分区有关系,数据装载的效率降低。
              • 建议将不同周期的存放在不同的表格中,即便是业务过程和统计粒度相同。
            • 统计粒度相同: 统计粒度相同的话,派生指标计算完毕的数据都是一个值,对应到的都是统计粒度维度,这些计算完的指标,新增一个字段,将结果存放进去即可。
    • 2.DWS层的数据存储格式为ORC列式存储 + snappy压缩。
    • 3.DWS层表名的命名规范为:dws_数据域_统计粒度_业务过程_统计周期(1d/nd/td)
      注:1d表示最近1日,nd表示最近n日,td表示历史至今。

二、DWS层设计分析 - 1d/nd

1.DWS层设计一:不考虑用户维度

  • 1.首先需要对ADS层业务需求进行明确,需求如下:
    • 1.各品牌商品交易统计
    • 2.各品类商品交易统计
统计周期统计粒度指标
最近1、7、30日品牌订单数
最近1、7、30日品牌订单人数
最近1、7、30日品牌退单数
最近1、7、30日品牌退单人数
统计周期统计粒度指标
最近1、7、30日品类订单数
最近1、7、30日品类订单人数
最近1、7、30日品类退单数
最近1、7、30日品类退单人数
  • 2.构建指标体系,对于需求进行指标分析,分析出每个需求对应什么类型指标

    • 各品牌的指标体系分析
      在这里插入图片描述

    • 各品类的指标体系分析
      在这里插入图片描述

  • 3.抽取派生指标,将刚刚思维导图中汇总的指标体系,梳理到表格中,抽取共用的派生指标
    在这里插入图片描述

  • 4.设计DWS层汇总表,根据刚刚梳理的指标体系表格,梳理出DWS层需要创建哪些表格。
    DWS层表名的命名规范为:dws_数据域_统计粒度_业务过程_统计周期(1d/nd/td)

    • 针对表格第一行和第二行,设计表格名:dwd_trade_tm_order_1d
    • 行信息规划:每行代表此品牌最近1天下单总数量
    • 列字段规划:品牌id,聚合后的值(下单次数),聚合后的值(下单人数),品牌的名称(可以加,可以不加,直接关联维度表即可)
    • 分区规划:每天计算,最近一日的汇总结果。按天创建分区,每天分区里面存放当天的汇总结果
  • 5.创建dwd_trade_tm_order_1d表格的DDL语句

    • 数仓表格设计的时候,尽量避免后期改表操作,怎么避免?
        1. 在DWS添加指标信息的时候,尽量考虑全面,参考维度是:DWD层的相关的表格的度量值。
    • 最近1天指标DDL语句如下:
create external table dws_trade_tm_order_1d
(
	tm_id string comment '品牌id',
	tm_name string comment '品牌名称',
	order_count bigint comment '最近1日下单次数',
	order_user_count bigint comment '最近1日下单人数',
	order_num bigint comment '最近1日下单件数',
	order_total_amount decimal(16,2) comment '最近1日下单金额'
) comment '交易域品牌粒度订单最近1日汇总事实表'
	partition by (dt string)
	stored as orc
	location '/warehouse/gmall/dws/dws_trade_tm_order_1d'
	tblproperties('orc.compress'='snappy')
  • 6.对于dwd_trade_tm_order_1d表格进行数据装载
    • 装载数据SQL如下:
insert overwrite table dws_trade_tm_order_1d partition(dt='2020-06-14'
SELECT
	tm_id,
	tm_name,
	COUNT(1),
	count(DISTINCT (user_id)),
	sum(sku_num),
	sum(split_total_amount)
from
	(
	SELECT
		sku_id, user_id, sku_num, split_total_amount
	from
		dwd_trade_order_detail_inc
	where
		dt = '2020-06-14' )od
left JOIN (
	select
		id, tm_id, tm_name
	FROM
		dim_sku_full
	where
		dt = '2020-06-14' )sku on
	od.sku_id = sku.id
GROUP by
	tm_id,
	tm_name;

  • 7.nd表的创建表格DDL语句:
create external table dws_trade_tm_order_nd
(
tm_id string comment '品牌id',
tm_name string comment '品牌名称',
order_count_7d bigint comment '最近7日下单次数',
order_user_count_7d bigint comment '最近7日下单人数',
order_num_7d bigint comment '最近7日下单件数',
order_total_amount_7d decimal(16,2) comment '最近7日下单金额',
order_count_30d bigint comment '最近30日下单次数',
order_user_count_30d bigint comment '最近30日下单人数',
order_num_30d bigint comment '最近30日下单件数',
order_total_amount_30d decimal(16,2) comment '最近30日下单金额'
) comment '交易域品牌粒度订单最近7日和30日汇总事实表'
	partition by (dt string)
	stored as orc
	location '/warehouse/gmall/dws/dws_trade_tm_order_nd'
	tblproperties('orc.compress'='snappy')
  • 8.nd表的数据装载
    • 存在1d表的数据,优先从1d表中获取,否则直接从dwd层事实表中获取。
insert overwrite table dws_trade_tm_order_nd partition(dt='2020-06-14')
select 
	tm_id,
	tm_name,
	sum(if(dt>=date_sub('2020-06-14',6),order_count,0)), //计算最近7天的数据
	sum(if(dt>=date_sub('2020-06-14',6),order_user_count,0)),
	sum(if(dt>=date_sub('2020-06-14',6),order_num,0)),
	sum(if(dt>=date_sub('2020-06-14',6),order_total_amount,0)),
	sum(order_count),
	sum(order_user_count),
	sum(order_num),
	sum(order_total_amount),
from dws_trade_tm_order_1d
where dt >= date_sub('2020-06-14',29)
group by tm_id,tm_name;
  • 9.nd表的装载语句存在重复计算的问题,一个下单用户 可能在30个分区都有,但是仅仅是一个下单用户,但在计算的时候,每个分区都有此下单用户,没有进行去重操作,那么相加完毕后,全部一个用户就变成了30个用户了,数据不准确了。
    • 怎样解决?
      • 1.从dwd层获取原始数据,最近7天,最近30天,dws层直接去重汇总即可。
      • 2.降低1d表的维度,之前表格不体现用户维度,现在表格体现用户维度,要重新修改1d表格。

2.DWS层设计二:考虑用户维度

  • 1.重新创建1d表 DDL如下:
create external table dws_trade_user_tm_order_1d
(
	user_id string comment '用户id',
	tm_id string comment '品牌id',
	tm_name string comment '品牌名称',
	order_count bigint comment '最近1日下单次数',
	order_num bigint comment '最近1日下单件数',
	order_total_amount decimal(16,2) comment '最近1日下单金额'
) comment '交易域用户品牌粒度订单最近1日汇总事实表'
	partition by (dt string)
	stored as orc
	location '/warehouse/gmall/dws/dws_trade_tm_order_1d'
	tblproperties('orc.compress'='snappy')
  • 2.1d表数据装载语句
insert overwrite table dws_trade_user_tm_order_1d partition(dt='2020-06-14'
SELECT
	user_id,
	tm_id,
	tm_name,
	COUNT(1),
	sum(sku_num),
	sum(split_total_amount)
from
	(
	SELECT
		sku_id, user_id, sku_num, split_total_amount
	from
		dwd_trade_order_detail_inc
	where
		dt = '2020-06-14' )od
left JOIN (
	select
		id, tm_id, tm_name
	FROM
		dim_sku_full
	where
		dt = '2020-06-14' )sku on
	od.sku_id = sku.id
GROUP by
	user_id,
	tm_id,
	tm_name;
  • 3.nd表的创建表格DDL语句:
create external table dws_trade_user_tm_order_nd
(
user_id string comment '用户id',
tm_id string comment '品牌id',
tm_name string comment '品牌名称',
order_count_7d bigint comment '最近7日下单次数',
order_num_7d bigint comment '最近7日下单件数',
order_total_amount_7d decimal(16,2) comment '最近7日下单金额',
order_count_30d bigint comment '最近30日下单次数',
order_num_30d bigint comment '最近30日下单件数',
order_total_amount_30d decimal(16,2) comment '最近30日下单金额'
) comment '交易域用户品牌粒度订单最近7日和30日汇总事实表'
	partition by (dt string)
	stored as orc
	location '/warehouse/gmall/dws/dws_trade_tm_order_nd'
	tblproperties('orc.compress'='snappy')
  • 4.指标体系调整:其他指标也需要跟着调整
    在这里插入图片描述

  • 5.对应需求矩阵
    在这里插入图片描述

  • 6.nd表的数据装载

    • 存在1d表的数据,优先从1d表中获取,否则直接从dwd层事实表中获取。
insert overwrite table dws_trade_user_tm_order_nd partition(dt='2020-06-14')
select 
	user_id ,
	tm_id,
	tm_name,
	sum(if(dt>=date_sub('2020-06-14',6),order_count,0)), //计算最近7天的数据
	sum(if(dt>=date_sub('2020-06-14',6),order_num,0)),
	sum(if(dt>=date_sub('2020-06-14',6),order_total_amount,0)),
	sum(order_count),
	sum(order_num),
	sum(order_total_amount),
from dws_trade_tm_order_1d
where dt >= date_sub('2020-06-14',29)
group by user_id ,tm_id,tm_name;

2.DWS层设计三 :考虑用户+商品维度,形成DWS层汇总表

  • 直接考虑用户+商品维度,创建的表格,就不需要去考虑建表的时候的品牌维度和品类维度了。
  • 只创建一张用户+商品维度的DWS层表格,就可以直接提供给 品牌类需求使用,也可以提供给 品类需求使用,这样比较一下,上面几个设计在处理表的时候,较本设计模式增加了不少工作量;
    • 本设计模式,可以只提供一张表,然后供给品牌和品类需求使用。
    • 创建的DWS层表格粒度越小,将来服务的表格会越多。

最终建表方案:

  • 1.1d建表语句:用户+商品维度建表DDL语句:
DROP TABLE IF EXISTS dws_trade_user_sku_order_1d;
CREATE EXTERNAL TABLE dws_trade_user_sku_order_1d
(
    `user_id`                   STRING COMMENT '用户id',
    `sku_id`                    STRING COMMENT 'sku_id',
    `sku_name`                  STRING COMMENT 'sku名称',
    `category1_id`              STRING COMMENT '一级分类id',
    `category1_name`            STRING COMMENT '一级分类名称',
    `category2_id`              STRING COMMENT '一级分类id',
    `category2_name`            STRING COMMENT '一级分类名称',
    `category3_id`              STRING COMMENT '一级分类id',
    `category3_name`            STRING COMMENT '一级分类名称',
    `tm_id`                     STRING COMMENT '品牌id',
    `tm_name`                   STRING COMMENT '品牌名称',
    `order_count_1d`            BIGINT COMMENT '最近1日下单次数',
    `order_num_1d`              BIGINT COMMENT '最近1日下单件数',
    `order_original_amount_1d`  DECIMAL(16, 2) COMMENT '最近1日下单原始金额',
    `activity_reduce_amount_1d` DECIMAL(16, 2) COMMENT '最近1日活动优惠金额',
    `coupon_reduce_amount_1d`   DECIMAL(16, 2) COMMENT '最近1日优惠券优惠金额',
    `order_total_amount_1d`     DECIMAL(16, 2) COMMENT '最近1日下单最终金额'
) COMMENT '交易域用户商品粒度订单最近1日汇总事实表'
    PARTITIONED BY (`dt` STRING)
    STORED AS ORC
    LOCATION '/warehouse/gmall/dws/dws_trade_user_sku_order_1d'
    TBLPROPERTIES ('orc.compress' = 'snappy');
  • 2.nd建表语句:DDL语句
DROP TABLE IF EXISTS dws_trade_user_sku_order_nd;
CREATE EXTERNAL TABLE dws_trade_user_sku_order_nd
(
    `user_id`                    STRING COMMENT '用户id',
    `sku_id`                     STRING COMMENT 'sku_id',
    `sku_name`                   STRING COMMENT 'sku名称',
    `category1_id`               STRING COMMENT '一级分类id',
    `category1_name`             STRING COMMENT '一级分类名称',
    `category2_id`               STRING COMMENT '一级分类id',
    `category2_name`             STRING COMMENT '一级分类名称',
    `category3_id`               STRING COMMENT '一级分类id',
    `category3_name`             STRING COMMENT '一级分类名称',
    `tm_id`                      STRING COMMENT '品牌id',
    `tm_name`                    STRING COMMENT '品牌名称',
    `order_count_7d`             STRING COMMENT '最近7日下单次数',
    `order_num_7d`               BIGINT COMMENT '最近7日下单件数',
    `order_original_amount_7d`   DECIMAL(16, 2) COMMENT '最近7日下单原始金额',
    `activity_reduce_amount_7d`  DECIMAL(16, 2) COMMENT '最近7日活动优惠金额',
    `coupon_reduce_amount_7d`    DECIMAL(16, 2) COMMENT '最近7日优惠券优惠金额',
    `order_total_amount_7d`      DECIMAL(16, 2) COMMENT '最近7日下单最终金额',
    `order_count_30d`            BIGINT COMMENT '最近30日下单次数',
    `order_num_30d`              BIGINT COMMENT '最近30日下单件数',
    `order_original_amount_30d`  DECIMAL(16, 2) COMMENT '最近30日下单原始金额',
    `activity_reduce_amount_30d` DECIMAL(16, 2) COMMENT '最近30日活动优惠金额',
    `coupon_reduce_amount_30d`   DECIMAL(16, 2) COMMENT '最近30日优惠券优惠金额',
    `order_total_amount_30d`     DECIMAL(16, 2) COMMENT '最近30日下单最终金额'
) COMMENT '交易域用户商品粒度订单最近n日汇总事实表'
    PARTITIONED BY (`dt` STRING)
    STORED AS ORC
    LOCATION '/warehouse/gmall/dws/dws_trade_user_sku_order_nd'
    TBLPROPERTIES ('orc.compress' = 'snappy');
  • 3.指标体系和需求矩阵调整后结果
    在这里插入图片描述
    在这里插入图片描述

三、DWS层设计分析 - td 历史至今

1.以新增下单人数的需求为例

  • 需求如下:
    在这里插入图片描述
  • 如果根据需求指标来直接处理的话,可能计算量以及sql复杂程度很高,可以换一种思路来解决此类需求;
  • 维护一张表格,首次该用户下单的信息维护到这张表格里面,怎样整合这张表,需要根据dwd层全表数据进行汇总,然后将全量数据,根据需求进行逻辑计算,将所需数据维护到dws层的汇总表中,历史全量数据在首次导入的时候,进行sql处理后录入,每日新增数据只需要判断此表格有没有该用户记录即可,没有该用户直接插入表格。
  • 创建表格:表格命名:dws_trade_user_order_td
    • 每行代表信息:某用户首次下单信息,以及用户维度其他信息
    • 每列信息:与用户相关的维度信息都可以汇总到此表格中
    • 分区:按天创建分区,每天存放的数据都是历史至今的最新数据。
    • 具体表格创建语句如下:
DROP TABLE IF EXISTS dws_trade_user_order_td;
CREATE EXTERNAL TABLE dws_trade_user_order_td
(
    `user_id`                   STRING COMMENT '用户id',
    `order_date_first`          STRING COMMENT '首次下单日期',
    `order_date_last`           STRING COMMENT '末次下单日期',
    `order_count_td`            BIGINT COMMENT '下单次数',
    `order_num_td`              BIGINT COMMENT '购买商品件数',
    `original_amount_td`        DECIMAL(16, 2) COMMENT '原始金额',
    `activity_reduce_amount_td` DECIMAL(16, 2) COMMENT '活动优惠金额',
    `coupon_reduce_amount_td`   DECIMAL(16, 2) COMMENT '优惠券优惠金额',
    `total_amount_td`           DECIMAL(16, 2) COMMENT '最终金额'
) COMMENT '交易域用户粒度订单历史至今汇总事实表'
    PARTITIONED BY (`dt` STRING)
    STORED AS ORC
    LOCATION '/warehouse/gmall/dws/dws_trade_user_order_td'
    TBLPROPERTIES ('orc.compress' = 'snappy');
  • 装载数据:
    • 如果每次都求dwd层表格中全量数据的话, 太损耗计算资源,可以基于前一日计算结果进行计算。这样比较高效解决数据问题。
  • 首日全量装载sql:
insert overwrite table dws_trade_user_order_td partition(dt='2020-06-14')
select
    user_id,
    min(dt) login_date_first,
    max(dt) login_date_last,
    sum(order_count_1d) order_count,
    sum(order_num_1d) order_num,
    sum(order_original_amount_1d) original_amount,
    sum(activity_reduce_amount_1d) activity_reduce_amount,
    sum(coupon_reduce_amount_1d) coupon_reduce_amount,
    sum(order_total_amount_1d) total_amount
from dws_trade_user_order_1d
group by user_id;
  • 每日增量装载sql:
  • 方案一:之间使用full outer join ,然后获取的数据进行判断即可
insert overwrite table dws_trade_user_order_td partition(dt='2020-06-15')
select
    nvl(old.user_id,new.user_id),
    if(new.user_id is not null and old.user_id is null,'2020-06-15',old.order_date_first),
    if(new.user_id is not null,'2020-06-15',old.order_date_last),
    nvl(old.order_count_td,0)+nvl(new.order_count_1d,0),
    nvl(old.order_num_td,0)+nvl(new.order_num_1d,0),
    nvl(old.original_amount_td,0)+nvl(new.order_original_amount_1d,0),
    nvl(old.activity_reduce_amount_td,0)+nvl(new.activity_reduce_amount_1d,0),
    nvl(old.coupon_reduce_amount_td,0)+nvl(new.coupon_reduce_amount_1d,0),
    nvl(old.total_amount_td,0)+nvl(new.order_total_amount_1d,0)
from
(
    select
        user_id,
        order_date_first,
        order_date_last,
        order_count_td,
        order_num_td,
        original_amount_td,
        activity_reduce_amount_td,
        coupon_reduce_amount_td,
        total_amount_td
    from dws_trade_user_order_td
    where dt=date_add('2020-06-15',-1)
)old
full outer join
(
    select
        user_id,
        order_count_1d,
        order_num_1d,
        order_original_amount_1d,
        activity_reduce_amount_1d,
        coupon_reduce_amount_1d,
        order_total_amount_1d
    from dws_trade_user_order_1d
    where dt='2020-06-15'
)new
on old.user_id=new.user_id;
  • 方案二:两部分子查询之间使用union all进行关联
SELECT
	user_id,
	min(order_date_first) ,
	max(order_date_last),
	sum(order_count_td),
	sum(order_num_td),
	sum(original_amount_td),
	sum(activity_reduce_amount_td),
	sum(coupon_reduce_amount_td),
	sum(total_amount_td)
from
	(
	select
		user_id, order_date_first, order_date_last, order_count_td, order_num_td, original_amount_td, activity_reduce_amount_td, coupon_reduce_amount_td, total_amount_td
	from
		dws_trade_user_order_td
	where
		dt = date_add('2020-06-15',-1)
UNION ALL
	select
		user_id, '2020-06-15', '2020-06-15', order_count_1d, order_num_1d, order_original_amount_1d, activity_reduce_amount_1d, coupon_reduce_amount_1d, order_total_amount_1d
	from
		dws_trade_user_order_1d
	where
		dt = '2020-06-15'
	GROUP by
		user_id ) t1
group by
	user_id ;
  • hive 中sql语法:

    • nvl(字段1,字段2) :取两个字段中不为空的那个字段,如果都不为空,取前一个,两个都为空,就不取。
  • 开窗和分组

    • 开窗:在原有表格列的基础上,添加一列开窗列,可以基于此列进行分析数据
    • 分组:改变原有表格的粒度, 结果的粒度跟原来表格的粒度不一样了。

三、DWS层设计分析 - 总结

  • dws层设计要点:1d表表结构设计,nd表表结构设计,td表表结构设计,以及对应的数据装载。
    • 1d表表结构:
      • 行设计:派生指标的粒度决定的
      • 列设计:粒度的id,派生指标决定,设计时需要有一定的前瞻性,参考与之对应的dwd层的事实表的度量值
      • 分区设计: 按天分区,每天分区放的是当天明细的汇总结果,跟明细表分区对应
      • 数据装载:dwd层与之对应的明细表,从明细表中获取一个分区的数据,之后进行汇总,汇总完成后放到汇总表一天的分区里面。
    • nd表表结构:
      • 行设计:派生指标的粒度决定的
      • 列设计:跟1d表相比,多n维度字段,7d的指标,30d的指标
      • 分区设计:按天分区,截止当天的,最近N天的汇总数据
      • 数据装载:优先从1d表里面取数,如果没有1d表,那就去dwd层明细表取数。
        • 直接拿30天的求和,然后在sql里面加个判断,获取最近7天的数据,这样就可以通过一个sql实现不同周期的计算。
    • td表表结构:
      • 行设计:派生指标的粒度决定的
      • 列设计:派生指标决定
      • 分区设计:按天分区,每个分区里面存放历史截止当天的汇总数据。
      • 数据装载:
        • 首日: 从dws层的1d或者dwd层明细表获取全表数据,优先1d表。
        • 每日:首先拿前一天的分区结果,然后拿1d表或者明细表里今天的结果,做加法运算,join或者union。

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

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

相关文章

骨骼控制(一)——动画动态节点(AnimDynamics)

文章目录一、引言二、骨骼控制三、UE蓝图中提供的骨骼控制节点——AnimDynamics动画蓝图节点1、什么是AnimDynamics动画蓝图节点①使用盒体计算惯性②使用约束来限制移动2、AnimDynamics节点的几种常用例子①单骨骼模拟②骨骼链模拟 <h2 id1>③群魔乱舞&#xff08;这是错…

YOLOv8之C2f模块——与YOLOv5的C3模块对比

一、源码对比 YOLOv8完整工程代码下载&#xff1a;ultralytics/ultralytic   C2f模块源码在ultralytics/nn/modules.py下&#xff0c;源码如下&#xff1a; class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n1, shortcutFalse, g1, e…

安装kibana 报错/访问不了

安装kibana 报错1&#xff0c;elasticsearch.yaml 和kibana.yaml 配置问题2&#xff0c;elasticsearch 和kibana版本不一致3&#xff0c;索引问题1&#xff0c;elasticsearch.yaml 和kibana.yaml 配置问题 我的RPM安装的&#xff0c;配置文件都在/etc/ vim /etc/elasticsearc…

【Python知识点桂电版】02组合数据类型

一、序列序列简介序列是指一种包含多项数据的数据结构&#xff0c;分为不可变序列和可变序列。可变序列可修改序列内的元素如列表&#xff0c;二不可变序列一旦建立就不能修改其中的元素&#xff0c;字符串和元组属于不可变序列。列表和元组的创建列表&#xff1a;列表名 [元素…

大学物理期末大题专题训练总结-热学大题

今天下午去找郑老师权老师等去答疑&#xff0c;老师说大题会考查得比较套路&#xff0c;计算不难。明天就要考试了&#xff0c;再把大题常见题型总结一下&#xff0c;热学这块我做完了蓝本的热学题目&#xff0c;发现了如下三种&#xff1a;有关循环过程曲线的&#xff1a;给出…

简历信息提取论文笔记Information Extraction from Resume Documents in PDF Format

标题&#xff1a;Information Extraction from Resume Documents in PDF Format下载地址&#xff1a;https://library.imaging.org/ei/articles/28/17/art00013长度&#xff1a;8页发表时间&#xff1a;2016引用量cite27先读标题、摘要、结论、然后 methods/experiment design,…

大数据NiFi(二十):实时同步MySQL数据到Hive

文章目录 实时同步MySQL数据到Hive 一、开启MySQL的binlog日志 1、登录mysql查看MySQL是否开启binlog日志 2 、开启mysql binlog日志 3、重启mysql 服务&#xff0c;重新查看binlog日志情况 二、​​​​​​​​​​​​​​配置“CaptureChangeMySQL”处理器 1、创建“…

JAVA企业级开发 1.4 Spring_采用Java配置类管理Bean

文章目录一、采用Java配置类管理Bean&#xff08;一&#xff09;打开项目&#xff08;二&#xff09;创建子包&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&#xff09;创建Spring配置类&#xff08;六&#xff09;创建测…

STM32单片机之温湿度检测系统(DTH11、OLED、LCD1602)

LCD1602LCD1602引脚第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱&#xff0c;接地时对比度最高&#xff0c;对比度过高时会产生“鬼影”&#xff0c;使用时可以通过一个 10K 的电位器调整对比度。 第 4 脚&…

Windows下命令执行绕过技巧总结(渗透测试专用)

一、连接符1、双引号不要求双引号闭合举例&#xff1a;"who"a"mi" //闭合的 "who"a"mi //不闭合的2、圆括号必须在两边&#xff0c;不能包括中间的字符。举例&#xff1a;((whoami))3、^符号&#xff08;转译符号&#xff09;不可以在结尾&…

Rasa 3.x 学习系列-摆脱意图:一种新的对话模式

Rasa 3.x 学习系列-摆脱意图:一种新的对话模式 在2019年的一篇文章中,Alan Nichol写道 :是时候摆脱意图了。一年后,Rasa发布了Rasa中的第一个无意图(或“端到端”)对话模型。现在,我们宣布迈出了一个重要的步伐,将LLM的强大功能带入Rasa的对话管理中。 首先,意图非常…

YOLOV5s+Shufflenetv2+VOC数据集+迁移学习

前言&#xff1a;更改YOLOV5的backbone网络为 Shufflenetv2&#xff0c;便于达到轻量化的目的 1. 试运行YOLOv5 b站推土机 2. VOC数据集处理 3. 更改轻量级网络 参考魔改yolov5 3.1 在common.py末尾加入以下代码 #添加轻量化模块Shufflenetv2 # ------------------------…

人工智能-机器视觉篇搞定(笔记)

考书目《人工智能之机器视觉》–程晨 1.从计算机读取一张图片显示 ##获取图片 import cv2 imcv2.imread("im.jpg") cv2.imshow("my",im) cv2.waitKey() cv2.destroyAllWindows()2.显示视频帧 import cv2 #cap cv2.VideoCapture("video.mp4")获…

shell脚本入门

实习的时候第一个月的考核就是如何部署一个云资源&#xff0c;当时走的捷径&#xff08;杠杠的搜索能力hhhh&#xff09;找到了一个shell脚本一键部署&#xff0c;后来被leader问起来就如实说了&#xff0c;leader问有没有看懂shell脚本中的逻辑……&#xff08;没有&#xff0…

代码随想录第四十二天| ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

01背包问题 模型详解 描述 在一个容量有限的 背包里装若干物品&#xff0c;这些物品重量不同&#xff0c;价值不同。如何装使这些背包内物品价值最大。 &#xff08;1&#xff09;如果物品可以分割&#xff0c;直接用贪心算法&#xff0c;首先装价值密度最大的物品 &#xff…

acwing3485最大异或和(trie树,贪心)

给定一个非负整数数列 a&#xff0c;初始长度为 N。 请在所有长度不超过 M 的连续子数组中&#xff0c;找出子数组异或和的最大值。 子数组的异或和即为子数组中所有元素按位异或得到的结果。 注意&#xff1a;子数组可以为空。 输入格式 第一行包含两个整数 N,M。 第二行…

【数字IC基础】黑盒验证、白盒验证、 灰盒验证

文章目录 一、黑盒验证二、白盒验证三、灰盒验证一、黑盒验证 1、黑盒验证:大多数基于仿真的验证环境都是黑盒验证;2、不需要知道设计的内部结构和特性,只需要在输入端口打激励,观察输出即可;3、验证工程师学习设计的规格,然后编写验证环境中的 drivers, monitors, check…

如何提高机器人专业课讲师的收入

先放一些总结&#xff1a;为什么我是不合格的高校机器人工程专业讲师&#xff1f;2020不合格肯定收入不会提升&#xff0c;甚至失业风险会非常高的。为何所做的课程努力几乎全部失败呢&#xff1f;→机器人工程类← 2022不能一次次失败&#xff0c;因为只有自己会为失败买单&am…

【经典蓝牙】蓝牙 A2DP协议分析

A2DP 介绍 A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议&#xff0c; 用于传输单声道&#xff0c; 双声道音乐&#xff08;一般在 A2DP 中用于 stereo 双声道&#xff09; &#xff0c; 典型应用为蓝牙耳机。 A2DP旨在通过蓝牙连接传输高质量的立体声音…

【教程】Notion笔记多平台设置中文显示

这个笔记软件界面挺好看&#xff0c;惊艳到了。 目录 网页版 桌面端 Windows版 Mac端 安卓端 网页版 直接安装这个插件即可&#xff0c;Chrome/Edge适用&#xff1a;Notion中文版 桌面端 都要去这个github下载语言包&#xff0c;用于替换文件&#xff1a;https://github.c…