连接数据库

简介

配置数据库连接的方式为:系统设置 -> 业务建模 -> 数据源管理

截止2026年1月6日,支持的数据库有:

  • mysql/doris/starrocks/TiDB/gbase(均使用mysql连接器)
  • postgres/GreenPlum/Hologres(均使用pg连接器)
  • clickhouse
  • oracle
  • impala
  • sybase
  • 其他JDBC驱动

其中,oracle、impala、sybase、其他JDBC驱动的支持不在标准产品中,需要额外安装一个sql连接器来进行支持。

注意事项

因为我们的系统在 Docker 容器中运行,如果连接的数据库地址在 localhost,请使用 host.docker.internal 替代 localhost

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:
    - udbc # 添加这一行

如果需要在 K8s 或其他非 docker-compose 场景下让 app 连接到 UDBC,可以配置以下两个环境变量:

变量说明默认值
UDBC_HOSTUDBC 服务的主机地址udbc
UDBC_PORTUDBC 服务的端口8080

启动

在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:mysql://192.168.1.100:3306/mydb",
    "user": "Lxxx",
    "password": "xxx"
  }'

其中的参数解释:

参数名解释是否必填
sql具体跑的sql
jdbcUrljdbc连接字符串
user用户名
password密码

其中,user和password是选填。没有用户名密码的时候或者用户名密码写到jdbcUrl里面的时候可以不填。

返回格式:

成功:

{
    results: [
        {id: 1, name: "张三"},
    ]
}

失败:

{
    error: "error message"
}

注意:如果需要修改/添加驱动,完成后要重启容器,重启方式为:docker restart yiask_udbc

Data Agent中的配置

等UDBC服务器成功运行后,就可以开始新建数据源啦!

点击新建数据源, 选择相应的数据库即可,填入必要参数。保存后,点击测试连接,也可以去 测试与核验 -> SQL测试器 里面跑一个SQL进行测试。

使用 AI 员工辅助

如果不熟悉连接配置,可点击页面右下角的 表单助理 Avery,使用自然语言描述数据源,例如"连接到内网 MySQL,主机 10.0.0.5,端口 3306,数据库 sales"。Avery 会自动生成连接配置并填入表单,你只需确认并保存即可。

多数据库直连

本系统支持同时连接多数据库。可以支持某些表在数据库A,某些表在数据库B。

如果不同数据库的业务不重叠、没有共用的实体表,则不需要额外处理。如果不同数据库有相同的实体表,则需要遵循以下原则:

  1. 事件表X如果在数据库X,则其所涉及的所有实体表都必须在数据库X中存在。
  2. 事件表A如果在数据库A事件表B如果在数据库B,且事件表A事件表B有相同维度实体表A,那么实体表A必须同时存在于数据库A数据库B且数据一模一样。