Doris学习笔记

1.数据模型

数据模型 - Apache Doris

1.1 Aggregate 模型(聚合)

可以发现,user_iddateage ...等没有设置 AggregationType, 那么这几个字段就成了一个key了。设置了 AggregationType 字段,说明该列的属性已经成value了。

 我们导入一张表

它在doris里实际存储为:

 具体流程为:前两条记录属于是一个key(user_iddateage 的值一样,就要合并这两条记录),然后cost选取的sum类型的。所以聚合结果就为35

1.1.1 在聚合模型下保存明细数据

可以通过 精细key里某个列属性来保存完成的。

比如加了一个精细的时间戳。

 这样合并的就少了

1.1.2 导入数据与已有数据合并

在用户的眼里,数据都是聚集成最后阶段的。

但在Doris的过程的不同阶段中,数据的聚集程度是不同德。

1.一批一批的聚合。

2.底层开始对这些不同批的聚合。

3.在最终查询阶段,会对涉及的数据,再进行最终的聚合。

 1.2 unique模型

在某些多维的分析场景下,我们希望key是唯一的。

1.2.1 读时合并

在每次读的时候合并。

在1.2版本之前,该模型本质上是聚合模型的一个特例,也是一种简化的表结构表示方式。由于聚合模型的实现方式是读时合并(merge on read),因此在一些聚合查询上性能不佳(参考后续章节聚合模型的局限性的描述)。

建表语句

相当于聚合类型。

其建表语句为

1.2.2 写时合并

在每次写的时候合并

1.2.3  读时合并升级成写时合并

2.聚合模型,读时合并可能产生的问题(count有关)

比如说,先后导入两个批次的数据

 如果select count(*) from table; 的正确结果应该为 4,因为这个时候已经根据键聚合完毕。count(*)是count最终聚合结果。

如果我们只扫描 user_id 这一列,如果加上查询时聚合,最终得到的结果是 3(10001, 10002, 10003)。如果不加查询时聚合,则得到的结果是 5(两批次一共5行数据)。

所以我们在count的时候,必须得覆盖 AGGREGATE  key里的属性。

 

 

3.分区和桶

doris的分区和桶之间的关系

在Doris数据库中,分区和桶是两个不同的概念,它们之间存在一定的关系。下面是对它们的解释:

  1. 分区(Partition):分区是指将数据按照某个特定的维度进行划分和存储的方式。在Doris中,可以根据表的某个列或表达式来定义分区。通过将数据分散到不同的分区中,可以实现数据的分割、并行处理和查询优化。分区可以根据不同的维度进行划分,例如时间、地理位置或其他业务相关的属性。

  2. 桶(Bucket):桶是指将分区中的数据进一步划分为更小的单元。桶是Doris中用于存储和管理数据的基本单元。每个分区可以包含多个桶,每个桶存储一部分数据。桶的数量可以根据需求进行配置,以平衡数据的均匀分布和查询性能。

关系:

  • 一个分区可以包含多个桶,每个桶存储该分区下的一部分数据。
  • 桶是在分区内对数据进行细分和存储的单元。
  • 分区和桶的设计可以根据数据的特点和查询需求进行优化,以提高查询性能、并行度和数据分布的均衡性。

在Doris中,分区和桶的设计对数据的存储和查询效率有着重要的影响。适当的分区和桶的划分策略可以提高查询性能、并行处理能力和数据加载的速度。因此,在设计Doris表时,需要考虑合适的分区和桶的划分方案,以满足业务需求和数据管理的要求。

4.doris数据库里的olap表

创建一个表指定为olap类型,ENGINE=OLAP

CREATE TABLE your_olap_table (
  column1 datatype,
  column2 datatype,
  ...
) ENGINE=OLAP;

OLAP是星形的数据模型设计

 

5.OLAP中事实表和维度表

在OLAP(联机分析处理)中,事实表(Fact Table)和维度表(Dimension Table)是两种不同类型的表,它们具有以下区别:

事实表:

  • 事实表包含了具体的度量(Measure)数据,即业务上需要进行分析和计算的数值数据。例如,销售额、数量、利润等。
  • 事实表通常与业务过程中的事件或交易相关联,记录了这些事件或交易发生的详细信息,以支持分析和决策。
  • 事实表是一个大型的表,存储了大量的事实数据记录,通常包含数百万到数十亿行数据。
  • 事实表的关键特点是具有事实数据和与之关联的维度外键(Dimension Foreign Keys),这些外键用于与维度表建立关联关系。

维度表:

  • 维度表包含了描述事实数据的上下文信息,提供了对事实数据的解释和分类。例如,时间维度、产品维度、地理维度等。
  • 维度表中的每一行代表一个唯一的维度值,例如某个特定的时间点、产品、地理位置等。
  • 维度表中的列包含了对维度值的描述性属性,例如时间维度表可能包含年、月、日等属性。
  • 维度表通常比事实表小得多,行数相对较少,但是列数较多。

事实表和维度表之间的关系:

  • 事实表和维度表通过维度外键进行关联。维度外键是事实表中的列,它们与维度表中的主键进行关联,以建立事实表与维度表之间的关系。
  • 通过事实表和维度表的关联,可以进行多维分析,根据不同的维度对事实数据进行切片、钻取和聚合分析。

总结起来,事实表包含了具体的度量数据,而维度表提供了对事实数据的上下文信息和描述。事实表和维度表之间的关联关系是OLAP分析的基础,通过这种关联可以进行多维分析和灵活的数据切片。

6.SQL连接过程中可能出现的笛卡尔积的问题

有的时候,我们需要两张大表中 的属性,需要对这两张大表进行连接。

但是连接后产生的新表,可能有大部分字段我们不会用,还是被拼接起来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值