赞
踩
可以发现,user_id
、date
、age
...等没有设置 AggregationType, 那么这几个字段就成了一个key了。设置了
AggregationType 字段,说明该列的属性已经成value了。
我们导入一张表
它在doris里实际存储为:
具体流程为:前两条记录属于是一个key(user_id
、date
、age
的值一样,就要合并这两条记录),然后cost选取的sum类型的。所以聚合结果就为35
可以通过 精细key里某个列属性来保存完成的。
比如加了一个精细的时间戳。
这样合并的就少了
在用户的眼里,数据都是聚集成最后阶段的。
但在Doris的过程的不同阶段中,数据的聚集程度是不同德。
1.一批一批的聚合。
2.底层开始对这些不同批的聚合。
3.在最终查询阶段,会对涉及的数据,再进行最终的聚合。
在某些多维的分析场景下,我们希望key是唯一的。
在每次读的时候合并。
在1.2版本之前,该模型本质上是聚合模型的一个特例,也是一种简化的表结构表示方式。由于聚合模型的实现方式是读时合并(merge on read),因此在一些聚合查询上性能不佳(参考后续章节聚合模型的局限性的描述)。
相当于聚合类型。
其建表语句为
在每次写的时候合并
比如说,先后导入两个批次的数据
如果select count(*) from table;
的正确结果应该为 4,因为这个时候已经根据键聚合完毕。count(*)是count最终聚合结果。
如果我们只扫描 user_id
这一列,如果加上查询时聚合,最终得到的结果是 3(10001, 10002, 10003)。如果不加查询时聚合,则得到的结果是 5(两批次一共5行数据)。
所以我们在count的时候,必须得覆盖 AGGREGATE key里的属性。
doris的分区和桶之间的关系
在Doris数据库中,分区和桶是两个不同的概念,它们之间存在一定的关系。下面是对它们的解释:
分区(Partition):分区是指将数据按照某个特定的维度进行划分和存储的方式。在Doris中,可以根据表的某个列或表达式来定义分区。通过将数据分散到不同的分区中,可以实现数据的分割、并行处理和查询优化。分区可以根据不同的维度进行划分,例如时间、地理位置或其他业务相关的属性。
桶(Bucket):桶是指将分区中的数据进一步划分为更小的单元。桶是Doris中用于存储和管理数据的基本单元。每个分区可以包含多个桶,每个桶存储一部分数据。桶的数量可以根据需求进行配置,以平衡数据的均匀分布和查询性能。
关系:
在Doris中,分区和桶的设计对数据的存储和查询效率有着重要的影响。适当的分区和桶的划分策略可以提高查询性能、并行处理能力和数据加载的速度。因此,在设计Doris表时,需要考虑合适的分区和桶的划分方案,以满足业务需求和数据管理的要求。
创建一个表指定为olap类型,ENGINE=OLAP
- CREATE TABLE your_olap_table (
- column1 datatype,
- column2 datatype,
- ...
- ) ENGINE=OLAP;
OLAP是星形的数据模型设计
在OLAP(联机分析处理)中,事实表(Fact Table)和维度表(Dimension Table)是两种不同类型的表,它们具有以下区别:
事实表:
维度表:
事实表和维度表之间的关系:
总结起来,事实表包含了具体的度量数据,而维度表提供了对事实数据的上下文信息和描述。事实表和维度表之间的关联关系是OLAP分析的基础,通过这种关联可以进行多维分析和灵活的数据切片。
有的时候,我们需要两张大表中 的属性,需要对这两张大表进行连接。
但是连接后产生的新表,可能有大部分字段我们不会用,还是被拼接起来了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。