安装部署doris集群
| 机器IP | 节点 |
|---|---|
| 192.168.218.220 | fe+be |
| 192.168.218.221 | be |
| 192.168.218.227 | be |
前期准备
systemctl stop firewalld
systemctl disable firewalld
#永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
#设置系统最大打开文件句柄数
vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
临时设置
ulimit -n 1000000
#修改虚拟内存区域数量
sysctl -w vm.max_map_count=3000000
安装jdk及依赖包
yum install -y build-essential gcc-10 g++-10 java-1.8.0-openjdk.x86_64 maven cmake byacc flex automake libtool-bin bison binutils-dev libiberty-dev zip unzip libncurses5-dev curl git ninja-build python
#配置java环境变量
cat >>/etc/profile <<EOF
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
source /etc/profile
安装解压Doris安装包
tar -zxf apache-doris-2.1.5-bin-x64.tar.gz
cd apache-doris-2.1.5-bin-x64
cd fe/conf
vim fe.conf
CUR_DATE=`date +%Y%m%d-%H%M%S`
#CUR_DATE 变量设置为当前日期和时间,格式为 YYYYMMDD-HHMMSS。
# Log dir
LOG_DIR = /data/doris/log/fe
#LOG_DIR 变量定义了日志文件的存储目录,默认为 /data/doris/log/fe。
# CMS JAVA OPTS 启动参数,默认 Java 最大堆内存为 8GB,在 JAVA_OPTS 参数中指定 -Xmx 选项可以调整 Java 最大堆内存。
JAVA_OPTS="-Dsun.security.krb5.debug=true -Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/data/doris/log/fe/fe.gc.log.$CUR_DATE"
meta_dir = /data/doris-meta
#meta_dir 定义了存储元数据的目录,默认值是 ${DORIS_HOME}/doris-meta。此目录在启动 Frontend 之前必须创建。
http_port, rpc_port, query_port, edit_log_port, arrow_flight_sql_port 分别定义了 HTTP 服务端口、RPC 端口、查询端口、编辑日志端口和 Arrow Flight SQL 端口。默认配置如下:
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
arrow_flight_sql_port = -1(未启用)
priority_networks = 10.10.10.0/24;192.168.0.0/16
priority_networks 是一个可选配置,用于指定使用的 IP 地址范围,采用 CIDR 格式或单一 IP 格式。该配置为可选项,默认值为空
og_roll_size_mb:定义日志文件的滚动大小,单位为 MB。
sys_log_level:系统日志级别,设置为 INFO,可以选择的级别包括 INFO、WARN、ERROR、FATAL。
sys_log_mode:系统日志模式,设置为 NORMAL。可选的模式还有 BRIEF 和 ASYNC。
启动fe
/opt/apache-doris-2.1.5-bin-x64/fe/bin/start_fe.sh --daemon
查看启动日志确保服务启动成功
tail -f /data/doris/log/fe/日志.log
修改be配置
## 在 storage_root_path 中使用 medium 指定磁盘类型
## /home/disk1/doris,medium:HDD: 表示该目录存储冷数据;
## /home/disk2/doris,medium:SSD: 表示该目录存储热数据;
storage_root_path=/home/disk1/doris,medium:HDD;/home/disk2/doris,medium:SSD
220的be
priority_networks = 192.168.218.220/24
221的be
priority_networks = 192.168.218.221/24
227的be
priority_networks = 192.168.218.227/24
mkdir -p /home/disk1/doris
mkdir -p /home/disk2/doris
启动be
/opt/apache-doris-2.1.5-bin-x64/be/bin/start_be.sh --daemo
在192.168.218.221和192.168.218.227上都操作只需开启be
在fe上添加be
ALTER SYSTEM ADD FOLLOWER "192.168.218.220:9010";
alter system add backend "192.168.218.220:9050";
alter system add backend "192.168.218.221:9050";
alter system add backend "192.168.218.227:9050";
ALTER SYSTEM ADD BROKER broker1 "192.168.218.220:8000";
ALTER SYSTEM ADD BROKER broker2 "192.168.218.221:8000";
ALTER SYSTEM ADD BROKER broker3 "192.168.218.227:8000";
一键启停集群脚本
#!/bin/bash
case $1 in
"start")
for host in 192.168.218.221 192.168.218.220 192.168.218.227 ; do
echo "========== 在 $host 上启动 fe ========="
ssh $host "source /etc/profile; /opt/doris/fe/bin/start_fe.sh --daemon"
for host in hadoop102 hadoop103 hadoop104 ; do
echo "========== 在 $host 上启动 be ========="
ssh $host "source /etc/profile; /opt/doris/be/bin/start_be.sh --daemon"
done
;;
"stop")
for host in 192.168.218.221 192.168.218.220 192.168.218.227 ; do
echo "========== 在 $host 上停止 fe ========="
ssh $host "source /etc/profile; /opt/doris/fe/bin/stop_fe.sh "
done
for host in hadoop102 hadoop103 hadoop104 ; do
echo "========== 在 $host 上停止 be ========="
ssh $host "source /etc/profile; /opt/doris/be/bin/stop_be.sh "
done
;;
*)
echo "你启动的姿势不对"
echo " start 启动doris集群"
echo " stop 停止stop集群"
;;
esac
Doris基础使用
用户创建
Doris采用MySQL协议进行通信,可以通过MySQL client 或者 MySQL JDBC连接到 Doris 集群。Doris集群内置root用户,密码默认为空,root 用户默认拥有集群所有权限,例如:权限变更权限(Grant_priv )、节点变更权限(Node_priv ,包括 FE、BE、BROKER 节点的添加、删除、下线等操作)。
mysql> SET PASSWORD FOR 'root' = PASSWORD('your_password');
Query OK, 0 rows affected (0.00 sec)
创建数据库
mysql> create database example_db;
Query OK, 0 rows affected (0.02 sec)
给予用户权限
#给test用户进行数据库访问授权
mysql> GRANT ALL ON example_db TO test;
Query OK, 0 rows affected (0.08 sec)
创建数据库的表
mysql> use example_db;
Database changed
#创建 example_db.example_tbl 表
CREATE TABLE IF NOT EXISTS example_db.example_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
mysql> show tables;
+----------------------+
| Tables_in_example_db |
+----------------------+
| example_tbl |
+----------------------+
1 row in set (0.01 sec)
测试准备一些数据
[root@node1 ~]# mkdir data
[root@node1 ~]# cd data && vim test.csv
10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10
10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2
10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22
10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5
10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11
10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3
10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6
curl --location-trusted -u root:123 -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/example_db/example_tbl/_stream_load
可以看到
[root@localhost data]# curl --location-trusted -u root:123 -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/example_db/example_tbl/_stream_load
{
"TxnId": 36,
"Label": "297f20b1-40c0-44b1-a4fa-1dfeedd6300e",
"Comment": "",
"TwoPhaseCommit": "false",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 7,
"NumberLoadedRows": 7,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 400,
"LoadTimeMs": 269,
"BeginTxnTimeMs": 26,
"StreamLoadPutTimeMs": 156,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 57,
"CommitAndPublishTimeMs": 28
}
-T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径。
-u root : 123这里是用户名密码,我们使用默认用户root,密码默认为空。
127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port。
NumberLoadedRows: 表示已经导入的数据记录数
NumberTotalRows: 表示要导入的总数据量
Status :Success 表示导入成功
查询数据表
select * from example_tbl;
MySQL [example_db]> select * from example_tbl;
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10000 | 2017-10-01 | 北京 | 20 | 0 | 2017-10-01 07:00:00 | 35 | 10 | 2 |
| 10001 | 2017-10-01 | 北京 | 30 | 1 | 2017-10-01 17:05:45 | 2 | 22 | 22 |
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
| 10003 | 2017-10-02 | 广州 | 32 | 0 | 2017-10-02 11:20:00 | 30 | 11 | 11 |
| 10004 | 2017-10-01 | 深圳 | 35 | 0 | 2017-10-01 10:00:15 | 100 | 3 | 3 |
| 10004 | 2017-10-03 | 深圳 | 35 | 0 | 2017-10-03 10:20:22 | 11 | 6 | 6 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
6 rows in set (0.140 sec)
MySQL [example_db]> select * from example_tbl where city='上海';
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
1 row in set (0.036 sec)
MySQL [example_db]> select city, sum(cost) as total_cost from example_tbl group by city;
+--------+------------+
| city | total_cost |
+--------+------------+
| 北京 | 37 |
| 上海 | 200 |
| 广州 | 30 |
| 深圳 | 111 |
+--------+------------+
4 rows in set (0.127 sec)
创建表语法结构
SQL语法结构
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]
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
- column_comment:列注释。
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",
...
engine_type
engine_type表示表引擎类型,在Apache Doris中表分为普通表和外部表,两类表主要通过ENGINE类型来标识是那种类型的表。普通表就是Doris中创建的表ENGINE为OLAP,OLAP是默认的Engine类型;外部表有很多类型,ENGIE也不同,例如:MYSQL、BROKER、HIVE、ICEBERG 、HUDI。
示例:
ENGINE=olap
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)
table_comment
table_comment表示表注释,示例:
COMMENT "This is my first DORIS table"
partition_desc
partitioin_desc表示分区信息,支持三种写法
1.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", ...)
)
2.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, ))
)
3.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
)
distribution_desc
distribution_desc定义数据分桶方式。有两种方式分别为HASH分桶语法和RANDOM分桶语法。
Hash 分桶
语法: DISTRIBUTED BY HASH (k1[,k2 …]) [BUCKETS num]
说明: 使用指定的 key 列进行哈希分桶。
Random 分桶
语法: DISTRIBUTED BY RANDOM [BUCKETS num]
说明: 使用随机数进行分桶
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)
)
示例:
CREATE TABLE IF NOT EXISTS my_database.my_table
(
id INT NOT NULL,
name VARCHAR(100),
created_at DATE,
PRIMARY KEY (id)
)
ENGINE=OLAP
COMMENT 'This table stores user data.'
PARTITION BY RANGE (created_at) (
PARTITION p2023 VALUES LESS THAN ('2024-01-01'),
PARTITION p2024 VALUES LESS THAN ('2025-01-01')
)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES ('replication_allocation' = 'tag.location.default: 3');
CREATE TABLE `rec_data` (
`Id` VARCHAR(255) NOT NULL,
`TagId` VARCHAR(255) NOT NULL,
`RealTime` DATETIME(3) NOT NULL,
`RealValue` VARCHAR(255) NULL,
`CreateTime` DATETIME NOT NULL
)
ENGINE=OLAP
DUPLICATE KEY(`Id`, `TagId`, `RealTime`)
AUTO PARTITION BY RANGE (date_trunc(`RealTime`, 'day'))
()
DISTRIBUTED BY HASH(`Id`) BUCKETS AUTO
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"min_load_replica_num" = "-1",
"is_being_synced" = "false",
"storage_medium"= "hdd",
"storage_format" = "V2",
"inverted_index_storage_format" = "V1",
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "9000",
"group_commit_data_bytes" = "134217728"
);
字段含义
Id: 字符串类型,最大长度 255,不能为空。用作标识符。
TagId: 字符串类型,最大长度 255,不能为空。用于标识标签。
RealTime: 带有 3 位小数的日期时间类型,不能为空。表示真实时间。
RealValue: 字符串类型,最大长度 255,可以为 null。表示实时值。
CreateTime: 日期时间类型,不能为空。表示创建时间。
引擎和主键定义
ENGINE=OLAP
DUPLICATE KEY(`Id`, `TagId`, `RealTime`)
ENGINE=OLAP: 使用 OLAP 引擎,适合处理大规模的数据分析和复杂查询。
DUPLICATE KEY(Id, TagId, RealTime): 定义了一个重复键(主键),表示这三列的组合在表中必须是唯一的。这意味着可以有相同的 Id 和 TagId,但对于同一时间的 RealTime 记录,必须是唯一的。
自动分区设置
AUTO PARTITION BY RANGE (date_trunc(`RealTime`, 'day'))
()
AUTO PARTITION BY RANGE: 使用范围分区,基于 RealTime 字段进行分区。date_trunc(RealTime, ‘day’) 将 RealTime 截断到天级别,从而按天分区。这种方法可以有效地管理数据,因为它允许系统在查询时自动识别和优化数据访问。
(): 这里没有定义具体的分区规则,表示系统将自动管理分区的创建。
数据分布
DISTRIBUTED BY HASH(`Id`) BUCKETS AUTO
DISTRIBUTED BY HASH(Id): 使用 Id 字段进行哈希分布,确保数据在不同的节点之间均匀分布。
BUCKETS AUTO: 系统会自动决定分布桶的数量,通常根据数据量和负载进行调整,以达到最佳性能。
表的属性配置
replication_allocation = "tag.location.default: 1": 指定副本的分配策略,表示在默认位置放置一个副本。
min_load_replica_num = "-1": 最小负载副本数设为 -1,通常表示没有具体要求。
is_being_synced = "false": 表示当前表没有正在进行同步。
storage_medium= "hdd": 存储介质选择为硬盘(HDD),这通常适合大规模的数据存储。
storage_format = "V2": 使用 V2 存储格式,通常代表更高的存储效率和性能。
inverted_index_storage_format = "V1": 反向索引存储格式为 V1,可能影响到搜索效率。
light_schema_change = "true": 启用轻量级模式更改,允许对表结构进行非破坏性更改,避免全表重建。
disable_auto_compaction = "false": 启用自动压缩,以节省存储空间并提高查询效率。
enable_single_replica_compaction = "false": 禁用单副本压缩,意味着即便是单个副本的数据也不会进行压缩。
group_commit_interval_ms = "9000": 设置组提交的时间间隔为 9000 毫秒,影响写入性能和效率。
group_commit_data_bytes = "134217728": 设置组提交的数据字节数为 134217728 字节(即 128 MB),同样影响写入性能。
CREATE TABLE `rec_queueData` (
`Id` VARCHAR(255),
`CreateTime` DATETIME,
`QueueName` VARCHAR(256),
`DataId` BIGINT,
`Data` VARCHAR(255),
`IsDatatrue` BOOLEAN,
`Tagid` VARCHAR(255),
`Dtime` DATETIME(3),
`ExeStatus` BOOLEAN,
`ExeMsg` VARCHAR(255),
`ExeIp` VARCHAR(255),
`PubStatus` BOOLEAN,
`PubMsg` VARCHAR(255),
`PubTime` DATETIME,
`ExeTime` DATETIME,
`IsDeleted` BOOLEAN
)
ENGINE=OLAP
UNIQUE KEY(`Id`, `CreateTime`,`QueueName`)
PARTITION BY RANGE(`CreateTime`)()
DISTRIBUTED BY HASH(`Id`) BUCKETS AUTO
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"is_being_synced" = "false",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.time_zone" = "Asia/Shanghai",
"dynamic_partition.start" = "-6",
"dynamic_partition.end" = "1",
"dynamic_partition.prefix" = "p_",
"dynamic_partition.replication_allocation" = "tag.location.default: 1",
"dynamic_partition.buckets" = "10",
"dynamic_partition.create_history_partition" = "true",
"dynamic_partition.history_partition_num" = "-1",
"dynamic_partition.hot_partition_num" = "0",
"dynamic_partition.reserved_history_periods" = "NULL",
"dynamic_partition.storage_policy" = "",
"storage_format" = "V2",
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false"
);
字段说明
Id (VARCHAR(255)): 记录的唯一标识符,字符串类型。通常用于区分不同的记录。
CreateTime (DATETIME): 记录创建的时间,格式为日期和时间。
QueueName (VARCHAR(256)): 队列的名称,用于标识数据所属的队列。
DataId (BIGINT): 数据的标识符,通常用于关联其他表中的记录。
Data (VARCHAR(255)): 存储的数据内容,可以是任意字符串。
IsDatatrue (BOOLEAN): 布尔值,指示数据是否有效(true)或无效(false)。
Tagid (VARCHAR(255)): 标签标识符,用于进一步分类或标识数据。
Dtime (DATETIME(3)): 数据时间,精确到毫秒,用于记录数据的时间戳。
ExeStatus (BOOLEAN): 执行状态,指示操作是否成功(true)或失败(false)。
ExeMsg (VARCHAR(255)): 执行消息,提供关于执行状态的详细信息。
ExeIp (VARCHAR(255)): 执行的 IP 地址,通常用于记录操作来源。
PubStatus (BOOLEAN): 发布状态,指示数据是否已被发布(true)或未发布(false)。
PubMsg (VARCHAR(255)): 发布消息,提供关于发布状态的详细信息。
PubTime (DATETIME): 数据发布的时间。
ExeTime (DATETIME): 执行操作的时间。
IsDeleted (BOOLEAN): 删除标志,指示记录是否已被删除(true 表示已删除,false 表示未删除)。
索引与约束
UNIQUE KEY: 在 (Id, CreateTime, QueueName) 上建立唯一索引,确保这三列的组合在表中是唯一的,防止重复记录。
分区和分布设置
PARTITION BY RANGE(CreateTime)(): 使用 CreateTime 字段进行范围分区(目前未定义具体分区策略)。
DISTRIBUTED BY HASH(Id) BUCKETS AUTO: 通过 Id 字段进行哈希分布,系统将自动管理分区桶的数量。
表的属性
ENGINE=OLAP: 指定使用 OLAP 引擎,适合大规模分析查询。
PROPERTIES: 设置了一系列属性,控制表的行为和性能,包括:
动态分区: 启用动态分区功能,允许根据时间自动创建和管理分区。
副本分配: 控制副本的分配,确保数据的高可用性。
存储格式: 指定使用 V2 格式,可能涉及到存储性能优化。
轻量级模式更改: 允许轻量级的模式变化,以支持后续的修改。
分区相关配置
dynamic_partition.enable = "true": 启用动态分区功能,允许系统根据时间自动创建和管理分区。
dynamic_partition.time_unit = "DAY": 指定动态分区的单位是按天分区。
dynamic_partition.time_zone = "Asia/Shanghai": 指定动态分区使用的时区为上海时间。
dynamic_partition.start = "-6": 表示分区从当前时间的前 6 天开始。
dynamic_partition.end = "1": 表示分区的结束时间为当前时间的后 1 天。
dynamic_partition.prefix = "p_": 指定分区名称的前缀为 p_,分区的名称会以 p_ 开头,例如 p_20231018。
dynamic_partition.replication_allocation = "tag.location.default: 1": 配置分区的副本分配。这里表示将数据副本放在默认位置的 1 个副本上。
dynamic_partition.buckets = "10": 指定分区桶的数量为 10。
dynamic_partition.create_history_partition = "true": 启用历史分区的创建。
dynamic_partition.history_partition_num = "-1": 表示没有历史分区限制,系统会自动管理历史分区。
dynamic_partition.hot_partition_num = "0": 指定热分区的数量为 0,这意味着所有分区都为冷数据分区。
dynamic_partition.reserved_history_periods = "NULL": 没有限制保留的历史分区数。
存储和压缩设置
storage_format = "V2": 使用 V2 存储格式,V2 格式通常意味着更高的存储效率和更快的读写速度。
disable_auto_compaction = "false": 禁用自动压缩。压缩可以节省存储空间,且提升查询速度。
enable_single_replica_compaction = "false": 禁用单副本压缩,这意味着即便是单副本的数据也不会进行压缩。
其他设置
light_schema_change = "true": 启用轻量级模式更改。意味着在进行模式(例如表结构)更改时,不需要全表重建,系统会自动调整。
is_being_synced = "false": 指定表是否正在同步,当前设置为不进行同步。
replication_allocation = "tag.location.default: 1": 继续设置副本分配策略,将副本放置在默认标签位置。
1万+

被折叠的 条评论
为什么被折叠?



