doris和clickhouse差不多,目前因为公司在使用doris,所以开始更新这个专栏
基础
基本概念
在 Doris 中,数据以表(Table)的形式进行逻辑上的描述。 一张表包括行(Row)和列(Column)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应维度列和指标列。Doris的key列是建表语句中指定的列,建表语句中的关键字'unique key'或'aggregate key'或'duplicate key'后面的列就是 Key 列,除了 Key 列剩下的就是 Value 列。
Doris 的数据模型主要分为3类:
- Aggregate
- Unique
- Duplicate
因为我之前用的是clickhouse,为了方便知识迁移,先这样比较
| 类型 | ck | doris |
|---|---|---|
| AggregateMergeTree | Aggregate | |
| ReplacingMergeTree | Unique | |
| MergeTree | Duplicate |
Doris 数据类型简介
Doris 支持多种数据类型,用于存储不同类型的数据。以下是一些常见数据类型的概述:
数值类型
- TINYINT: 有符号 8 位整数,范围为 -128 至 127。
- SMALLINT: 有符号 16 位整数,范围为 -32768 至 32767。
- INT: 有符号 32 位整数,范围为 -2147483648 至 2147483647。
- BIGINT: 有符号 64 位整数,范围为 -9223372036854775808 至 9223372036854775807。
- LARGEINT: 同 BIGINT,但用于表示更大的整数,范围为 -1208925819614629174706176 至 1208925819614629174706175。
- FLOAT: 32 位单精度浮点数。
- DOUBLE: 64 位双精度浮点数。
- DECIMAL: 可变精度数值类型,用于存储精确的十进制值。支持小数点和指数。
字符串类型
- CHAR: 固定长度字符串,每个字符占用一个字节。最大长度为 255 个字符。
- VARCHAR: 变长字符串,每个字符占用一个字节。最大长度为 65535 个字符。
- STRING: 变长字符串,支持 UTF-8 编码。最大长度为 2147483647 个字节(约 2 GB)。
其他类型
- DATE: 日期类型,用于存储 YYYY-MM-DD 格式的日期。
- DATETIME: 日期时间类型,用于存储 YYYY-MM-DD HH:MM:SS 格式的日期时间。
- BOOL: 布尔类型,表示 true 或 false。
- HLL: HyperLogLog 类型,用于估计数据流中的基数。
- BITMAP: 位图类型,用于存储稀疏数据。
- QUANTILE_STATE: 分位数状态类型,用于计算数据的分位数。
- ARRAY: 数组类型,用于存储一组相同数据类型的值。
- MAP: 映射类型,用于存储键值对。
选择数据类型
选择合适的数据类型很重要,因为它会影响数据存储、查询性能和数据完整性。以下是一些选择数据类型时需要考虑的因素:
- 数据的性质: 选择能够准确表示数据的类型。例如,如果要存储整数,请选择 INT 或 BIGINT,而不是 FLOAT 或 DOUBLE。
- 数据的存储空间: 选择占用最少存储空间的类型。例如,如果要存储小整数,请选择 TINYINT 或 SMALLINT,而不是 INT 或 BIGINT。
- 查询性能: 选择允许高效查询的类型。例如,如果要经常过滤或排序数据,请选择具有索引的数据类型。
- 数据完整性: 选择能够维护数据完整性的类型。例如,如果要确保数据始终为正,请选择 UNSIGNED 数据类型。
有关 Doris 数据类型的更多详细信息,请参阅 Doris 文档:doris.apache.org/zh-CN/docs/…
doris fe和be
doris由两个部分组成:FE和BE
FE = 'frontend',是一个java应用BE = 'backend',是一个c++应用
fe的入口fe/fe-core/src/main/java/org/apache/doris/DorisFE.java
启动fe
./bin/start_fe.sh --daemon
连接doris
使用普通的mysql客户端或者mysql命令行就能连上doris的fe,我们平时连接doris就是连接上doris的fe
mysql -uroot -P9030 -h127.0.0.1
然后就连上了:
mysql -uroot -P9030 -h127.0.0.1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.7.99
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| __internal_schema |
| information_schema |
| mysql |
+--------------------+
3 rows in set (0.002 sec)
启动be
这个时候fe的日志会抱找不到
System has no available disk capacity or no available BE nodes
2024-06-01 11:39:41,722 INFO (InternalSchemaInitializer|116) [InternalCatalog.createDb():430] create database[__internal_schema] which already exists
2024-06-01 11:39:41,723 WARN (InternalSchemaInitializer|116) [InternalSchemaInitializer.run():82] Statistics storage initiated failed, will try again later
org.apache.doris.common.DdlException: errCode = 2, detailMessage = System has no available disk capacity or no available BE nodes
at org.apache.doris.system.SystemInfoService.checkAvailableCapacity(SystemInfoService.java:824) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.datasource.InternalCatalog.checkAvailableCapacity(InternalCatalog.java:2087) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.datasource.InternalCatalog.createTable(InternalCatalog.java:1163) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.catalog.InternalSchemaInitializer.createTbl(InternalSchemaInitializer.java:161) ~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.catalog.InternalSchemaInitializer.run(InternalSchemaInitializer.java:80) ~[doris-fe.jar:1.2-SNAPSHOT]
我用的是debian,通过下面的帖子
ls -l /sbin/swapon
可以看到debian是有swpon的,但是不在PATH环境变量里面,我们尝试加环境变量:
export PATH="/usr/sbin:${PATH}"
关闭swap区:
sudo swapoff -a
然后启动:
./be/bin/start_be.sh --daemon
发现还是报错,最后发现需要早fe里面注册be 参考
#### 登陆fe
mysql -uroot -P9030 -h127.0.0.1
### 执行sql
ALTER SYSTEM ADD BACKEND "127.0.0.1:9050";
创建表和数据
MySQL [(none)]> use demo;
Database changed
MySQL [demo]> create table mytable ( k1 TINYINT, k2 DECIMAL(10, 2) DEFAULT "10.05", k3 CHAR(10) COMMENT "string column", k4 INT NOT NULL DEFAULT "1" COMMENT "int column" ) COMMENT "my first t
able" DISTRIBUTED BY HASH(k1) BUCKETS 1 PROPERTIES ('replication_num' = '1');
Query OK, 0 rows affected (0.046 sec)
MySQL [demo]> insert into mytable (k1,k2,k3,k4) values (1,1,"aa",1);
Query OK, 1 row affected (0.168 sec)
{'label':'label_718751e2ec22415a_b65313d430399174', 'status':'VISIBLE', 'txnId':'1'}
其他
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
export DORIS_BUILD_PYTHON_VERSION=python3
export NODE_OPTIONS=--openssl-legacy-provider