连接数据库
简介
配置数据库连接的方式为:系统设置 -> 业务建模 -> 数据源管理
截止2025年11月6日,支持的数据库有:
- mysql/doris/starrocks/TiDB/gbase(均使用mysql连接器)
- postgres/GreenPlum(均使用pg连接器)
- clickhouse
- oracle
- impala
- sybase
- 其他JDBC驱动
其中,oracle、impala、sybase、其他JDBC驱动的支持不在标准产品中,需要额外安装一个sql连接器来进行支持。
sql连接器
我们额外提供了一个名为UDBC(全称 Universal Database Connectivity)的镜像包。他是一个基于JAVA jdbc的API服务器,接受一个jdbcUrl和一个sql。然后返回数据查询结果。
UDBC下载及导入
UDBC的镜像包下载地址为:点此下载
下载完成后,通过docker load -i yiask_udbc_0.0.6.tar导入到docker镜像中。
docker-compose配置
在docker-compose.yml中添加udbc服务:
udbc: # 直连oracle等数据库时使用
container_name: yiask_udbc
restart: always
image: udbc:0.0.6
volumes:
- /yiask/database/drivers:/app/drivers
其中,/yiask/database/drivers是服务器上用来保存jdbc驱动的文件夹,可以根据具体情况修改此地址。
然后把需要对接的数据库的jdbc jar包放到服务器的drivers目录中。
同时,还要在docker-compose.yml中的app服务上做一个配置的添加
app:
container_name: yiask_xxxx
restart: always
links:
- mongo
- clickhouse
- udbc # 添加这一行
启动
在docker-compose.yml当前目录,重新启动整个项目:
docker compose up -d
测试联通性
启动后,可以用curl测试一下是否可以成功连接。
第一步,进入udbc这个container
docker exec -it yiask_udbc /bin/sh
第二步,调用curl进行测试
curl --location --request POST 'http://localhost:8080/api/v1/runSQL' --header 'Content-Type: application/json' --data-raw '{ "sql": "select 1 as h", "jdbcUrl": "jdbc:odps:xxx", "user": "Lxxx", "password": "xxx" }'
其中的参数解释:
| 参数名 | 解释 | 是否必填 |
|---|---|---|
| sql | 具体跑的sql | 是 |
| jdbcUrl | jdbc连接字符串 | 是 |
| user | 用户名 | 否 |
| password | 密码 | 否 |
其中,user和password是选填。没有用户名密码的时候或者用户名密码写到jdbcUrl里面的时候可以不填。
返回格式:
成功:
{
results: [
{id: 1, name: "张三"},
]
}
失败:
{
error: "error message"
}
注意:如果需要修改/添加驱动,完成后要重启容器,重启方式为:docker restart yiask_udbc
ChatBI中的配置
等UDBC服务器成功运行后,就可以开始新建数据源啦!
点击新建数据源, 选择相应的数据库即可,填入必要参数。保存后,点击测试连接,也可以去 测试与核验 -> SQL测试器 里面跑一个SQL进行测试。
多数据库直连
本系统支持同时连接多数据库。可以支持某些表在数据库A,某些表在数据库B。
如果不同数据库的业务不重叠、没有共用的实体表,则不需要额外处理。如果不同数据库有相同的实体表,则需要遵循以下原则:
- 事件表X如果在数据库X,则其所涉及的所有实体表都必须在数据库X中存在。
- 事件表A如果在数据库A,事件表B如果在数据库B,且事件表A和事件表B有相同维度实体表A,那么实体表A必须同时存在于数据库A和数据库B且数据一模一样。