大数据Doris(十):Doris基础介绍

news2024/10/2 12:32:42

文章目录

Doris基础介绍

一、基本概念

二、建表语法及参数解释

1、column_definition_list

2、index_definition_list

3、engine_type

4、key_type

5、table_comment

6、partition_desc

7、distribution_desc

8、rollup_list

9、properites

三、数据类型


Doris基础介绍

一、基本概念

在 Doris 中,数据都以表(Table)的形式进行逻辑上的描述,一张表包括行(Row)和列(Column),Table中又有分区(partition)和分桶(tablet)概念,下面分别介绍这些概念。

  • ROW&Column

Row 代表用户的一行数据,Column用于描述一行数据中不同的字段。Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应维度列和指标列。从聚合模型的角度来说,Key 列相同的行,会聚合成一行。其中 Value 列的聚合方式由用户在建表时指定。具体可以参考数据模型小节。

  • Tablet&Partition

在 Doris 的存储引擎中,用户Table数据被水平划分为若干个数据分片(Tablet,也称作数据分桶)。每个 Tablet 包含若干数据行。各个 Tablet 之间的数据没有交集,并且在物理上是独立存储的。

多个 Tablet 在逻辑上归属于不同的分区(Partition)。一个 Tablet 只属于一个 Partition。而一个 Partition 包含若干个 Tablet。 因为 Tablet 在物理上是独立存储的,所以可以视为 Partition 在物理上也是独立。Tablet 是数据移动、复制等操作的最小物理存储单元

若干个 Partition 组成一个 Table。 Partition 可以视为是逻辑上最小的管理单元。数据的导入与删除,都可以或仅能针对一个 Partition 进行。

二、建表语法及参数解释

Doris的建表语句如下:

CREATE TABLE [IF NOT EXISTS] [database.]table
(
column_definition_list,
[index_definition_list]
)
[engine_type]
[keys_type]
[table_comment]
[partition_desc]
[distribution_desc]
[rollup_list]
[properties]

注意:

  • Doris建表时一个同步命令,SQL执行完成即返回结果,命令返回成功即表示建表成功。
  • IF NOT EXISTS 表示如果没有创建过该表,则创建。注意这里只判断表名是否存在,而不会判断新建表结构是否与已存在的表结构相同。所以如果存在一个同名但不同构的表,该命令也会返回成功,但并不代表已经创建了新的表和新的结构。

1、column_definition_list

column_definition_list 表示定义的列信息,一个表中可以定义多个列,每个列的定义如下:

column_name column_type [KEY] [aggr_type] [NULL] [default_value] [column_comment]

以上定义列参数解释如下:

  • column_name:列名;
  • column_type:列类型,Doris支持常见的列类型:INT、BIGING、FLOAT、DATE、VARCHAR等,详细参考数据类型小节;
  • aggr_type:表示聚合类型,支持以下聚合类型:

SUM:求和。适用数值类型。
MIN:求最小值。适合数值类型。
MAX:求最大值。适合数值类型。
REPLACE:替换。对于维度列相同的行,指标列会按照导入的先后顺序,后倒入的替换先导入的。
REPLACE_IF_NOT_NULL:非空值替换。和 REPLACE 的区别在于对于null值,不做替换。这里要注意的是字段默认值要给NULL,而不能是空字符串,如果是空字符串,会给你替换成空字符串。
HLL_UNION:HLL 类型的列的聚合方式,通过 HyperLogLog 算法聚合。
BITMAP_UNION:BIMTAP 类型的列的聚合方式,进行位图的并集聚合。

  • default_value:列默认值,当导入数据未指定该列的值时,系统将赋予该列default_value。语法为 default default_value,当前default_value支持两种形式: 

 

#1.用户指定固定值,如:
k1 INT DEFAULT '1',
k2 CHAR(10) DEFAULT 'aaaa'

#2.系统提供的关键字,目前只用于DATETIME类型,导入数据缺失该值时系统将赋予当前时间
dt DATETIME DEFAULT CURRENT_TIMESTAMP

示例如下:

k1 TINYINT,
k2 DECIMAL(10,2) DEFAULT "10.5",
k4 BIGINT NULL DEFAULT "1000" COMMENT "This is column k4",
v1 VARCHAR(10) REPLACE NOT NULL,
v2 BITMAP BITMAP_UNION,
v3 HLL HLL_UNION,
v4 INT SUM NOT NULL DEFAULT "1" COMMENT "This is column v4"
  • column_comment:列注释。

2、index_definition_list

index_definition_list表示定义的索引信息。定义索引可以是一个或多个,多个使用逗号隔开。索引定义语法如下:

INDEX index_name (col_name) [USING BITMAP] COMMENT 'xxxxxx'

示例:

INDEX idx1 (k1) USING BITMAP COMMENT "This is a bitmap index1",
INDEX idx2 (k2) USING BITMAP COMMENT "This is a bitmap index2",
...

3、engine_type

engine_type表示表引擎类型,在Apache Doris中表分为普通表和外部表,两类表主要通过ENGINE类型来标识是那种类型的表。普通表就是Doris中创建的表ENGINE为OLAP,OLAP是默认的Engine类型;外部表有很多类型,ENGIE也不同,例如:MYSQL、BROKER、HIVE、ICEBERG 、HUDI。

示例:

ENGINE=olap

4、key_type

key_type表示数据类型。用法如下:

key_type(col1, col2, ...)

key_type 支持以下模型:

  • DUPLICATE KEY(默认):其后指定的列为排序列。
  • AGGREGATE KEY:其后指定的列为维度列。
  • UNIQUE KEY:其后指定的列为主键列。

示例:

DUPLICATE KEY(col1, col2),
AGGREGATE KEY(k1, k2, k3),
UNIQUE KEY(k1, k2)

5、table_comment

table_comment表示表注释,示例:

COMMENT "This is my first DORIS table"

6、partition_desc

partitioin_desc表示分区信息,支持三种写法

LESS THAN:仅定义分区上界。下界由上一个分区的上界决定。

PARTITION BY RANGE(col1[, col2, ...])
(
    PARTITION partition_name1 VALUES LESS THAN MAXVALUE|("value1", "value2", ...),
    PARTITION partition_name2 VALUES LESS THAN MAXVALUE|("value1", "value2", ...)
)

FIXED RANGE:定义分区的左闭右开区间

PARTITION BY RANGE(col1[, col2, ...])
(
    PARTITION partition_name1 VALUES [("k1-lower1", "k2-lower1", "k3-lower1",...), ("k1-upper1", "k2-upper1", "k3-upper1", ...)),
    PARTITION partition_name2 VALUES [("k1-lower1-2", "k2-lower1-2", ...), ("k1-upper1-2", MAXVALUE, ))
)

MULTI RANGE :批量创建 RANGE 分区,定义分区的左闭右开区间,设定时间单位和步长,时间单位支持年、月、日、周和小时。

PARTITION BY RANGE(col)
(
   FROM ("2000-11-14") TO ("2021-11-14") INTERVAL 1 YEAR,
   FROM ("2021-11-14") TO ("2022-11-14") INTERVAL 1 MONTH,
   FROM ("2022-11-14") TO ("2023-01-03") INTERVAL 1 WEEK,
   FROM ("2023-01-03") TO ("2023-01-14") INTERVAL 1 DAY
)

注意:该特性是Doris1.2.1版本后新增。

7、distribution_desc

distribution_desc定义数据分桶方式。有两种方式分别为HASH分桶语法和RANDOM分桶语法。

Hash 分桶

语法: DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num]

说明: 使用指定的 key 列进行哈希分桶。

Random 分桶

语法: DISTRIBUTED BY RANDOM [BUCKETS num]

说明: 使用随机数进行分桶。

8、rollup_list

rollup_list指的是建表的同时可以创建多个物化视图(ROLLUP),多个物化视图使用逗号隔开,语法如下:

ROLLUP (rollup_definition[, rollup_definition, ...])

以上语法中rollup_definition是定义多个物化视图,语法如下:

rollup_name (col1[, col2, ...]) [DUPLICATE KEY(col1[, col2, ...])] [PROPERTIES("key" = "value")]

示例:

ROLLUP (
r1 (k1, k3, v1, v2),
r2 (k1, v1)
)

9、properites

在创建表时,可以指定properties设置表属性,详细使用会在后面的文章进行详细介绍。

三、数据类型

Apache Doris支持常见的列数据类型如下:

列类型占用字节描述
TINYINT1字节范围:-2^7 + 1 ~ 2^7 - 1
SMALLINT2字节范围:-2^15 + 1 ~ 2^15 - 1
INT4字节范围:-2^31 + 1 ~ 2^31 - 1
BIGINT8字节范围:-2^63 + 1 ~ 2^63 - 1
LARGEINT16字节范围:-2^127 + 1 ~ 2^127 - 1
BOOLEAN1字节与TINYINT一样,0代表false,1代表true
FLOAT4字节支持科学计数法
DOUBLE12字节支持科学计数法
DECIMAL[(precision, scale)]16字节保证精度的小数类型。默认是 DECIMAL(10, 0)precision: 1 ~ 27scale: 0 ~ 9其中整数部分为 1 ~ 18不支持科学计数法
DECIMALV3[(precision, scale)]16字节更高精度的小数类型。默认是 DECIMAL(10, 0)precision: 1 ~ 38scale: 0 ~ precision
DATE3字节范围:0000-01-01 ~ 9999-12-31
DATEV23字节DATEV2类型相比DATE类型更加高效,在计算时,DATEV2相比DATE可以节省一半的内存使用量。
DATETIME8字节范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59
DATETIMEV28字节范围是0000-01-01 00:00:00[.000000] ~ 9999-12-31 23:59:59[.999999],相比DATETIME类型,DATETIMEV2更加高效,并且支持了最多到微秒的时间精度。
CHAR[(length)]1字节定长字符串。长度范围:1 ~ 255。
VARCHAR[(length)]-变长字符串。长度范围:1 ~ 65533。
STRING-变长字符串。最大(默认)支持1048576 字节(1MB)String类型的长度还受 be 配置 string_type_length_soft_limit_bytes, 实际能存储的最大长度 取两者最小值,String类型只能用在value 列,不能用在 key 列和分区、分桶列
HLL1~16385个字节HyperLogLog 列类型,不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。必须配合 HLL_UNION 聚合类型使用。
BITMAP-bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到2^64 - 1。必须配合 BITMAP_UNION 聚合类型使用。

Apache Doris还支持ARRAY、JSONB类型,具体可以参考官网:

https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-reference/Data-Types/


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

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

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

相关文章

java合并数组的方法

在 Java中,数组是一种重要的数据结构,在 Java中数组的操作方式有两种,一种是直接使用数组来操作,另一种是通过引用计数或者双指针对数组进行操作。对于直接使用数组来操作的方式,我们可以通过两个方法来实现。 一种是将…

C++(多态中)

目录: 1.多态实现原理(再剖析) 2.析构函数加virtual 3.C11新增两个关键字 override 和 final 4.重载、覆盖(重写)、隐藏的对比 5.抽象类 1.多态实现原理(再剖析) 实现出多态的效果,我…

Docker之Docker Compose技术

目录 一、什么是docker compose? 二、安装docker compose 三、使用案例:部署一个简单的fastapi服务 (以下教程是基于环境已将安装了docker服务) 一、什么是docker compose? Compose是一个将多个docker容器组合部署的技术,能通过编写yaml配置文件…

IJCAI2023 | A Systematic Survey of Chemical Pre-trained Models(化学小分子预训练模型综述)

IJCAI_A Systematic Survey of Chemical Pre-trained Models 综述资料汇总(更新中,原文提供):GitHub - junxia97/awesome-pretrain-on-molecules: [IJCAI 2023 survey track]A curated list of resources for chemical pre-trained models 参考资料&…

『python爬虫』09. bs4实战之下载精美壁纸(保姆级图文)

目录 爬取思路代码思路1.拿到主页面的源代码. 然后提取到子页面的链接地址, href2.通过href拿到子页面的内容. 从子页面中找到图片的下载地址 img -> src3.下载图片 3. 完整实现代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏&…

docker 非持久化存储 tmpfs mounts

docker 非持久化存储 tmpfs mounts 简介tmpfs mounts 限制--tmpfs 和 --mount 之间的差异在容器中使用 tmpfs mounts指定 tmpfs 选项 简介 官方文档:https://docs.docker.com/storage/tmpfs/ 与 volume 和 bind mounts 不同,tmpfs mounts 是临时的&…

jdk中juc多线程编程工具

jdk线程池实现原理分析 目录 CompletionService CompletableFuture 基本原理 CompletableFuture的接口 静态方法 handle() vs whenComplete() xxxEither() 异常处理exceptionally() 获取任务结果 结束任务 Semaphore CyclicBarrier CountDownLatch jdk线程池实…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 4 Mining Data Streams

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 4 Mining Data Streams 💡 Skip this chapter due to its difficulty and for me, it is hard to understand. Summary of Chapter 4 The Stream Data Model: This model assumes da…

【微机原理】半导体存储器

目录 一.半导体存储器的分类 二、半导体存储器性能指标 三、半导体存储器的结构 一.半导体存储器的分类 半导体存储器的分类方法有很多种。 1.按器件原理来分:有双极型存储器和MOS型存储器。 双极型:速度快、集成度低、功耗大MOS型:速度慢、集…

“ 探索迷局:解密广度寻路算法 “

专栏文章,自下而上 数据结构与算法——二叉搜索树 数据结构与算法——深度寻路算法 数据结构与算法——二叉树实现表达式树 数据结构与算法——树(三指针描述一棵树) 数据结构与算法——栈和队列<也不过如此> 数据结构与算法——八…

C++的智能指针

文章目录 1. 内存泄漏1.1 什么是内存泄漏1.2 内存泄漏分类 2. 为什么需要智能指针3. 智能指针的使用及原理3.1 RAII3.2 使用RAII思想设计的SmartPtr类3.3 让SmartPtr像指针一样3.3 SmartPtr的拷贝3.4 auto_ptr3.5 unique_ptr3.6 shared_ptr3.6.1 shared_ptr的循环引用3.6.2 wea…

MYSQL-数据库管理(上)

一、数据库概述 一、数据库基本概念 1.1 数据 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。…

机器学习之分类决策树与回归决策树—基于python实现

大家好,我是带我去滑雪! 本期为大家介绍决策树算法,它一种基学习器,广泛应用于集成学习,用于大幅度提高模型的预测准确率。决策树在分区域时,会考虑特征向量对响应变量的影响,且每次仅使用一个分…

vs编译生成动态库

说明 windows版本,vs2019 创建一个动态库 新建一c项目,创建一个dll类型项目。 在头文件中添加一个mylib.h文件: #pragma once#ifndef MYLIB_H #define MYLIB_Hextern "C" __declspec(dllexport) void Hello(); extern "C…

UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(一)

文章目录 1、前言2、在UG NX中修改Feature的颜色操作3、采用NXOpen(C)实现3.1 创建修改特征的方法3.2 调用ModifyFeatureColor方法3.3 测试结果 1、前言 在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们…

优化问题的拉格朗日Lagrange对偶法原理

首先我们定义一般形式的求解x的优化问题: 表示优化的目标函数,上述为最小优化,实际上最大优化可以改写为的形式表示第i个不等式约束表示等式约束 1. Lagrange对偶问题 上述优化问题的拉格朗日Lagrange对偶法求解,是将上述带约束…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#) Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用直方图图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调…

车牌识别系统完整商用级别设计流程

简介 车牌识别(License Plate Recognition)是一种通过计算机视觉技术识别和提取车辆车牌上字符信息的技术。它在交通管理、智慧停车、安防监控等领域有着广泛的应用。 本项目将带完整的了解车牌识别系统设计思路,以及实现流程。 算法部分应…

图书管理系统【控制台+MySQL】(Java课设)

系统类型 控制台类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87737294 更多系统资源库地…

机器学习 --- 绪论

第1关:什么是机器学习 任务描述 ​ 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 ​ 为了完成本关任务,你需要掌握: 什么是机器学习。 什么是机器学习 ​ 相信大家一定都非常喜欢吃西…