SQLLab 在线数据库查询
一、SQLLab 简介
SQLLab 用来对接各类型数据库,可以在计算平台内直接查询数据库中的数据,避免在计算平台和数据库客户端之间来回切换。
查询采用异步任务方式执行:提交查询后生成一条查询记录(异步任务),平台轮询任务状态,运行结束后可在线查看或下载结果。
二、SQLLab 使用
1. 连接数据库
选择好数据库类型(引擎)后,按照规定的格式填写连接串(含用户名、密码、主机、端口、库名等)。
平台内置支持的引擎及连接串模板如下(来源:myapp/views/view_sqllab.py:41-51 的 db_uri_demo):
| 引擎 (engine) | 连接串模板 |
|---|---|
| mysql | mysql+pymysql://$username:$password@$host:3306/$database |
| postgres | postgresql+psycopg2://$username:$password@$host:5432/$database |
| clickhouse | clickhouse+native://$username:$password@$host:9000/$database |
| hive | hive://$host:10000/default?auth=NOSASL |
| presto | presto://$username:$password@$host:8080/$catalog/$schema |
| impala | impala://host:port/database |
| dm(达梦) | dm+dmPython://$username:$password@$host:5236/$schema |
| gauss | postgresql+psycopg2://$username:$password@$host:5432/$database |
说明:平台还会把你近 30 天内查询成功过的连接串自动加入下拉候选,方便复用(
view_sqllab.py:109-111)。
历史文档中常用示例:
- MySQL:
mysql+pymysql://<username>:<password>@mysql-service.infra:3306/<database> - PostgreSQL:
postgresql+psycopg2://<username>:<password>@postgresql.kubeflow:5432/<database> - ClickHouse:
clickhouse+native://username:password@host:port/database(默认端口 9000) - Hive:
hive://host:10000/default?auth=NOSASL或hive://username:passwd@host:10000/default?auth=LDAP
2. 查询数据库
在 SQLLab 窗口中填写需要查询的语句,点击运行即可。查询结果可以在线查看,也可以下载(结果以 CSV 形式保存在服务端 /data/k8s/kubeflow/global/sqllab/result/<查询id>.csv,见 myapp/utils/sqllab/base_impl.py:67)。
注意事项:
- SQL 必须包含
limit:这是平台的硬性校验,不含limit会直接报错"查询sql必须包含limit"(myapp/utils/sqllab/base_impl.py:53-54)。 - 仅适合 select 查询:查询通过
pandas.read_sql_query执行(view_sqllab.py异步任务handle_task),因此实际只适合 select 类只读查询。
说明:代码层面只强制校验"SQL 必须包含 limit"(
myapp/utils/sqllab/base_impl.py:53-54),并无针对非 select 语句的显式拦截。"仅支持 select"是执行方式的天然限制——查询通过pandas.read_sql_query/read_sql执行(base_impl.py:73、:82、:89),只适合返回结果集的只读查询。

MySQL 查询示例
SQL:
select * from ab_user limit 1;
数据库:mysql+pymysql://<username>:<password>@mysql-service.infra:3306/<database>
PostgreSQL 查询示例
SQL:
select * from task limit 1;
数据库:postgresql+psycopg2://<username>:<password>@postgresql.kubeflow:5432/<database>
ClickHouse 查询示例
SQL:
select * from task limit 1;
数据库:clickhouse+native://username:password@host:port/database
Hive 查询示例
SQL:
select * from test limit 1;
数据库:hive://host:10000/default?auth=NOSASL 或 hive://username:passwd@host:10000/default?auth=LDAP
在线查看查询结果如图所示:

3. 可能出现的错误
如果查询任务运行显示 fail,排查顺序:
- 数据库的账号、密码、主机、端口等连接信息是否正确;
- 所写的查询语句是否被支持、是否正确;
- 是否加了
limit(未加 limit 必报错)。
三、接口参考(供检索)
SQLLab 后端路由前缀为 /idex(myapp/views/view_sqllab.py:103 中 route_base = '/idex'),主要接口:
| 接口 | 方法 | 说明 |
|---|---|---|
/idex/config |
GET/POST | 获取引擎与连接串候选配置 |
/idex/submit_task |
POST | 提交 SQL 查询任务,返回 task_id |
/idex/look/<task_id> |
GET | 查询任务状态(stage/state 等) |
/idex/result/<task_id> |
GET | 获取查询结果 |
/idex/download_url/<task_id> |
GET | 获取结果下载地址 |
/idex/stop/<task_id> |
GET | 终止查询任务 |
浏览器侧访问后端接口需带
/backend前缀(平台 URL 前缀架构),上表为后端实际路由路径。