SQLLab 在线数据库查询

想在平台内直接连接 MySQL/PostgreSQL/ClickHouse/Hive 等数据库执行 SQL 查询并查看/下载结果时阅读

平台使用 / 数据资产与处理
SQLLabsqllabidexSQL查询在线查询数据库连接mysqlpostgresqlclickhousehiveprestoimpala达梦dmgaussselect

SQLLab 在线数据库查询

一、SQLLab 简介

SQLLab 用来对接各类型数据库,可以在计算平台内直接查询数据库中的数据,避免在计算平台和数据库客户端之间来回切换。

查询采用异步任务方式执行:提交查询后生成一条查询记录(异步任务),平台轮询任务状态,运行结束后可在线查看或下载结果。

二、SQLLab 使用

1. 连接数据库

选择好数据库类型(引擎)后,按照规定的格式填写连接串(含用户名、密码、主机、端口、库名等)。

平台内置支持的引擎及连接串模板如下(来源:myapp/views/view_sqllab.py:41-51db_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=NOSASLhive://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=NOSASLhive://username:passwd@host:10000/default?auth=LDAP

在线查看查询结果如图所示:

输入图片说明

3. 可能出现的错误

如果查询任务运行显示 fail,排查顺序:

  1. 数据库的账号、密码、主机、端口等连接信息是否正确;
  2. 所写的查询语句是否被支持、是否正确;
  3. 是否加了 limit(未加 limit 必报错)。

三、接口参考(供检索)

SQLLab 后端路由前缀为 /idexmyapp/views/view_sqllab.py:103route_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 前缀架构),上表为后端实际路由路径。

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki