SpringBoot+Mybatis-Plus项目接入ClickHouse数据源

一、 引入相关依赖

		<!--clickhouse-->
        <dependency>
            <groupId>com.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>0.3.2-patch8</version>
        </dependency>
        <!--多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

二、 配置文件

spring:
  datasource:
    click_house:
      user: user
      password: password
      driver-class-name: ru.yandex.clickhouse.ClickHouseDriver
      url: jdbc:clickhouse://ip:port/库名

三、 数据库语句注意事项

	CREATE 两种方式
		1、创建表时直接同步数据
CREATE TABLE 表名 ENGINE = ReplacingMergeTree ORDER BY id AS
SELECT * FROM mysql(数据库连接路径, 库名,表名, 帐号, 密码);

注意:这种创建会复制原表的数据库结构及数据,但当原表字段允许为空时,新表的字段会默认为Nullable,当代码中获取数据结果规范类型时,会报类型转换错误。
注意:这种创建可以添加分片字段,当原表中该字段允许为空时,创建语句会报错,参与Order by 的字段,也会报错
2、单独创建表

CREATE TABLE 表名(
       `Integer` UInt32,
       `Long` UInt64,
       `Decimal` Decimal(20,4),
       `DateTime` DateTime,
       `String` String,
       `create_time` DateTime DEFAULT now(),
       `update_time` DateTime DEFAULT now()
)ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(update_time)
PRIMARY KEY id
ORDER BY (id,content_id,order_id)

注意:这种创建方式不会同步原表数据,可以先用同步方式创建,然后将创建后的表当做数据源,再同步到单独创建表中
创建表时,注意设置引擎及分区字段,排序字段,ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行数据分区操作,比如通过toYYYYMM()将数据按月进行分区、toMonday()将数据按照周几进行分区
Order by 数据字段不仅会被用来当作排序字段,还会被用来当作用于去重的依据,执行optimize手动触发合并 OPTIMIZE TABLE table_name final

INSERT
1、单条插入

INSERT INTO 表名 (*) VALUES (1, 'a', 1) ;

2、批量插入

INSERT INTO 表名 [(列名1, 列名2, 列名3)] FORMAT Values (v11, v12, v13), (v21, v22, v23)

注意:批量新增时与MYSQL 不同,一定要加FORMAT 否则会抛出空值异常

四、 分区操作指令

	DETACH PARTITION - 将分区移动到detached目录并忘记它。
	DROP PARTITION — 删除分区。
	ATTACH PART|PARTITION — 将detached目录中的数据块或分区添加到表中。
	ATTACH PARTITION FROM — 将数据分区从一个表复制到另一个表并添加。
	REPLACE PARTITION — 将数据分区从一个表复制到另一个表并替换。
	MOVE PARTITION TO TABLE — 将数据分区从一个表移动到另一个表。
	CLEAR COLUMN IN PARTITION — 重置分区中指定列的值。
	CLEAR INDEX IN PARTITION — 重置分区中指定的二级索引。
	FREEZE PARTITION — 创建分区的备份。
	UNFREEZE PARTITION — 删除分区的备份。
	FETCH PARTITION|PART — 从另一台服务器下载数据块或分区。
	MOVE PARTITION|PART — 将分区/数据块移动到另一个磁盘或卷。
	UPDATE IN PARTITION — 按条件更新分区内的数据。
	DELETE IN PARTITION — 按条件删除分区内的数据。

五、 数据同步

	新版clickhouse提供了一个实验性的功能,可以将clickhouse伪装成mysql的一个备库去实时对齐mysql中的数据,当mysql库表数据发生变化时会实时同步到clickhouse中;这样就省掉了单独维护实时spark/flink任务读取kafka数据再存入clickhouse的环节,大大降低了运维成本提升了效率。
CREATE DATABASE ckdb ENGINE = MaterializeMySQL('IP:端口', '数据库', '帐号', '密码');
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值