clickhouse数据库迁移Doris——建表部分
2、对于UInt无符号整形,clickhouse中某表id字段为UInt,在Doris中为int,迁移过程中,对于UInt要做转换吗?3、对于float类型,在Doris中要改为decimal,不然的话报错:`fee` Float(32) NULL,1、为什么在Doris上varchar类型相比于MySQL中,字段长度要扩大三倍左右?答:根据MySQL数据库作参考,以MySQL为标准(本次示例cl
·
目录
一、下载datagrip
- 官网下载datagripDownload DataGrip: Cross-Platform IDE for Databases & SQL
- 使用datagrip连接数据库
- 新建项目

二、对比clickhouse和Doris的建表语句
1.Doris的建表语句
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL COMMENT '名称',
`name` varchar(50) NULL,
`age` int(11) NULL
) ENGINE = OLAP UNIQUE KEY(`id`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"is_being_synced" = "false",
"storage_format" = "V2",
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false"
);
ENGINE = OLAP UNIQUE KEY(`id`)- 存储引擎:指定了
OLAP存储引擎,这表示这个表用于在线分析处理。 - 唯一键:
UNIQUE KEY(id),以id为唯一键,即在id列上不能出现重复的记录,适用于查找和过滤数据的唯一标识。
- 存储引擎:指定了
DISTRIBUTED BY HASH(`id`) BUCKETS 1- 分布方式:
DISTRIBUTED BY HASH(id)表示将数据按照id字段进行哈希分布,用于在多个节点间分布数据。 - 桶数:
BUCKETS 1表示数据被分布到 1 个分桶中,即实际存储只会有一个分片。在分布式系统中,这通常用于小规模表。
- 分布方式:
- 表的属性设置定义了表的其他配置:
"replication_allocation" = "tag.location.default: 1":表示副本配置,将副本分配到标签为tag.location.default的位置,副本数量为 1。此设置决定了数据的备份策略。"is_being_synced" = "false":表示该表当前不处于同步状态,一般用于控制表的同步机制。"storage_format" = "V2":设置数据存储格式为V2,Doris 支持多种存储格式,V2格式支持压缩和更高的存储效率。"light_schema_change" = "true":开启轻量级模式的 Schema 变更,此选项允许更快速地进行列修改、删除等操作。"disable_auto_compaction" = "false":表示自动压缩功能未禁用,即会自动对表中的数据进行整理和压缩。"enable_single_replica_compaction" = "false":单副本压缩未启用,这样可以避免过多资源消耗,一般在数据量较大或性能优化时使用
2、clickhouse的建表语句
-
ENGINE = ReplacingMergeTree- 存储引擎:
ReplacingMergeTree是 ClickHouse 的一种表引擎,允许在插入重复数据时进行去重。它在更新场景下非常有用,适合表中存在可重复的主键(这里是psre_id)的情况。 - 使用
ReplacingMergeTree引擎可以减少冗余数据,使数据保持最新状态。
- 存储引擎:
SETTINGS index_granularity =8192- index_granularity:索引粒度,设置为
8192。此配置决定了每个数据块的行数,即每 8192 行数据会创建一个索引。 - 较大的
index_granularity值可以减少存储的索引数量,从而节省空间,但可能会增加查询的扫描范围。 8192是 ClickHouse 的默认粒度设置,适用于大多数场景。
- index_granularity:索引粒度,设置为
三、修改clickhouse建表语句,部署Doris
1、查询clickhouse建表语句
show create table crm.deptinfo;

2、拿到建表语句,进行修改
CREATE TABLE crm.dic_date
(
`date_key` Int32,
`date_value` Nullable(Date),
`day_of_week` Nullable(Int32),
`day_of_month` Nullable(Int32),
`day_of_year` Nullable(Int32),
`week_of_year` Nullable(Int32),
`month_of_year` Nullable(Int32),
`quarter_of_year` Nullable(Int32),
`year` Nullable(Int32),
`is_weekend` Nullable(Int8)
)
ENGINE = ReplacingMergeTree
ORDER BY date_key
SETTINGS index_granularity = 8192
- 注意事项,一些格式要注意修改,如:
- `id` Int32——`id` Int(32)
- `di_number` Nullable(String), ——`di_number` varchai(800) NULL,(varchar()根据情况修改)
- CH中允许为空Nullable,在Doris中要标注出NULL,CH中无Nullable,Doris中为NOT NULL
- 存储引擎、唯一键和属性设置

要做修改为下面部分代码

3、最终得到修改完成的Doris建表语句
CREATE TABLE `dic_date` (
`date_key` int(11) NOT NULL,
`date_value` date NULL,
`day_of_week` int(11) NULL,
`day_of_month` int(11) NULL,
`day_of_year` int(11) NULL,
`week_of_year` int(11) NULL,
`month_of_year` int(11) NULL,
`quarter_of_year` int(11) NULL,
`year` int(11) NULL,
`is_weekend` int(11) NULL
) ENGINE = OLAP UNIQUE KEY(`date_key`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`date_key`) BUCKETS 1 PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"is_being_synced" = "false",
"storage_format" = "V2",
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false"
);
四、遇到的问题
1、为什么在Doris上varchar类型相比于MySQL中,字段长度要扩大三倍左右?是每一个都要等比扩大三倍吗?
答:MySQL字符,Doris字节;一个字符约等于三个字节(Byte)
2、对于UInt无符号整形,clickhouse中某表id字段为UInt,在Doris中为int,迁移过程中,对于UInt要做转换吗?
答:根据MySQL数据库作参考,以MySQL为标准(本次示例clickhouse数据库是从MySQL中迁来的)
3、对于float类型,在Doris中要改为decimal,不然的话报错:`fee` Float(32) NULL,
^
Encountered: (
Expected: COMMA, IDENTIFIER
更多推荐




所有评论(0)