magic-boot 整合 Clickhouse 及在 magic-api 中的基本使用

magic-boot 整合 Clickhouse 及在 magic-api 中的基本使用

朱治龙
2024-02-21 / 0 评论 / 157 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年02月22日,已超过267天没有更新,若内容或图片失效,请留言反馈。

项目有用到 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

评论 (0)

取消