项目有用到 Clickhouse
作为数仓, magic-boot 作为万金油般的存在,肯定是需要整合 Clickhouse
获取数据的,下面我们就开始吧。
一、整合 clickhouse-jdbc 驱动
根据clickhouse 官方文档的指引,在项目的 Maven 依赖管理文件(pom.xml)中的 dependencies 节点添加如下依赖项:
<dependency>
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<classifier>all</classifier>
<version>0.6.0</version>
</dependency>
注:dependency 中一定要添加 <classifier>all</classifier>
,否则会出现找不到依赖的className的异常
二、magic-api 中添加数据源
在 magic-api 主界面右侧的 DataSource 面板中,单击「+」按钮,打开「创建数据源」弹出层,如下图所示:
相关表单项填写如下:
- 名称:任意,只要自己能区别数据源即可
- Key:为便于在代码中引用,尽量采用简写
- URL:jdbc:(ch|clickhouse)[:<protocol>]://endpoint1,endpoint2,...?param1=value1¶m2=value2
- 用户名:用户名
- 密码:密码
- 驱动类:com.clickhouse.jdbc.ClickHouseDriver
- 类型:com.zaxxer.hikari.HikariDataSource。用Hikari 和 Druid 连接池测试都没碰到问题。
本次测试填写后的连接池示例如下图所示:
在 magic-api 中写测试代码进行功能验证
创建数据表
db['CH'].update("""
CREATE TABLE test_for_magic_boot
(
`id` UUID,
`user_name` String,
`real_name` String,
`birthday` Date,
`gender` String
)
ENGINE = MergeTree
ORDER BY birthday
SETTINGS index_granularity = 8192;
""");
添加测试数据
// 添加数据要使用 update方法,使用insert 方法会报错。
// https://gitee.com/ssssssss-team/magic-api/issues/I4SQYW
db['CH'].update(`insert into test_for_magic_boot(id,user_name,real_name,birthday,gender) values(#{uuid()},'shiyu', '时羽','1991-12-15', 'F'),(#{uuid()},'lint', '李宁涛','1985-11-19', 'M'),(#{uuid()},'gaowz', '高文中','1968-01-23', 'M')`)
修改测试数据
db['CH'].update(`update test_no_index set real_name='时大款' where user_name='shiyu'`)
Clickhouse 更新操作有一些限制
- 索引列不能进行更新
- 分布式表不能进行更新
- 不适合频繁更新或point更新
查询数据
return db['CH'].select('select * from test_for_magic_boot')
删除数据
db['CH'].update(`delete from test_for_magic_boot where user_name='lint'`)
删除测试数据表
db['CH'].update('drop table test_for_magic_boot');
评论 (0)