目录

一、下载datagrip

二、对比clickhouse和Doris的建表语句

三、修改clickhouse建表语句,部署Doris

四、遇到的问题


一、下载datagrip
  1. 官网下载datagripDownload DataGrip: Cross-Platform IDE for Databases & SQL
  2. 使用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 的默认粒度设置,适用于大多数场景。

三、修改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
  1. 注意事项,一些格式要注意修改,如:
    • `id` Int32——`id` Int(32)
    • `di_number` Nullable(String), ——`di_number` varchai(800) NULL,(varchar()根据情况修改)
    • CH中允许为空Nullable,在Doris中要标注出NULL,CH中无Nullable,Doris中为NOT NULL
  2. 存储引擎、唯一键和属性设置

要做修改为下面部分代码

  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

Logo

一站式 AI 云服务平台

更多推荐