数据治理特殊接口
涵盖数据集(/dataset_modelview/api)、维表管理(/dimension_table_modelview/api)、数据血缘(/blood)、LabelStudio 代理(/proxy/labelstudio)、SQL 查询 idex(/idex)。
数据集 /dataset_modelview
代码文件:myapp/views/view_dataset.py(route_base = '/dataset_modelview/api')
数据集详情页渲染协议(多 tab + api/html/table 类型)见 数据集预览接口。
上传数据集
POST /dataset_modelview/api/upload/<dataset_id>
Content-Type: multipart/form-data
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| dataset_id | path | int | 数据集 ID |
| filename | form | string | 文件名 |
| partition | form | string | 分区名(可选) |
| file | form | file | 文件内容 |
| current_chunk | form | int | 分块序号 |
| current_offset | form | int | 字节偏移 |
| total_chunk | form | int | 总分块数 |
| total_size | form | int | 文件总大小 |
响应:
{"status": 0, "message": "success"}
数据集下载(多文件打包/重定向)
GET /dataset_modelview/api/download_file/<dataset_id>
响应:
- 多条
path时尝试服务端打包为{name}-{version}.zip直接下载 - 否则按首条可用
path重定向(http(s) 链接 / 目录归档download_archive//static静态路径) - 再兜底取首条
download_url重定向 - 都为空时返回 400;数据集不存在 404;无权限 401
权限口径:owner 含 * 或包含当前用户,或当前用户为管理员。见 view_dataset.py:426。
下载指定数据集
GET/POST /dataset_modelview/api/download/<dataset_id>
GET/POST /dataset_modelview/api/download/<dataset_id>/<partition>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| dataset_id | path | int | 数据集 ID |
| partition | path | string | 可选,分区名 |
响应:
{
"status": 0,
"result": {"store_type": "local", "download_urls": ["/static/..."]},
"message": "success"
}
另有目录归档下载接口
GET /dataset_modelview/api/download_archive/<dataset_id>/<path_index>(见view_dataset.py:462)。
数据集详情页
GET /dataset_modelview/api/detail/page/<dataset_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| dataset_id | path | int | 数据集 ID |
响应: JSON,详情页配置(result.header 头部 + result.content[] 多 tab,tab 内 groupContent.type 取值 api/html/table)。数据预览 tab 内嵌 api 类型,value 指向 /dataset_modelview/api/preview/dataset/{id}。
⚠️ 已按代码改正:原文档此处写的是 “数据集弹窗预览
GET/POST /dataset_modelview/api/alert/info/<dataset_id>(内嵌 iframe)”,当前代码中详情入口为detail/page/<dataset_id>(view_dataset.py:896),未发现alert/info路由,请确认。
预览数据集
GET/POST /dataset_modelview/api/preview/dataset/<dataset_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| dataset_id | path | int | 数据集 ID |
响应: HTML 表格 / 通用 table 协议({type:"table", value:{columns:[...], rows:[...]}})。读取 CSV 渲染(最多 200 行),媒体列(image/audio/video)自动追加预览列。见 view_dataset.py:1168。
说明(已对照源码核实):原文档列出的按名称预览路由
/preview/<dataset_name>、/preview/<dataset_name>/<dataset_version>、/preview/<dataset_name>/<dataset_version>/<dataset_segment>在当前view_dataset.py中不存在,实际仅提供/preview/dataset/<dataset_id>(view_dataset.py:1168)。
探索数据集
GET/POST /dataset_modelview/api/explore/<dataset_id>
响应: 302 重定向到 Notebook 编辑器
说明: 复制 data-explore.ipynb 和数据集文件到工作空间,启动 Jupyter Notebook 进行交互式探索。
维表管理 /dimension_table_modelview
代码文件:myapp/views/view_dimension.py(route_base = '/dimension_table_modelview/api';远程表动态视图 route_base = '/dimension_remote_table_modelview')
清空维表数据
GET/POST /dimension_table_modelview/api/clear/<dim_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| dim_id | path | int | 维表 ID |
响应: 302 重定向到维表详情页面
说明: 对远程数据库执行 TRUNCATE TABLE。
更新远程表
GET /dimension_table_modelview/api/create_remote_table/<dim_id>
响应: 302 重定向到维表详情页面
说明: 根据维表配置的列信息在远程数据库(MySQL/PostgreSQL)创建或变更表结构。
远程维表 CRUD(动态路由)
GET /dimension_remote_table_modelview/<dim_id>/api/_info # 元信息
GET /dimension_remote_table_modelview/<dim_id>/api/ # 列表
POST /dimension_remote_table_modelview/<dim_id>/api/ # 新增
GET /dimension_remote_table_modelview/<dim_id>/api/<int:pk> # 查看
PUT /dimension_remote_table_modelview/<dim_id>/api/<pk> # 更新
DELETE /dimension_remote_table_modelview/<dim_id>/api/<pk> # 删除
POST /dimension_remote_table_modelview/<dim_id>/api/upload/ # 批量上传
GET /dimension_remote_table_modelview/<dim_id>/api/download_template/ # 下载模板
GET /dimension_remote_table_modelview/<dim_id>/api/download/ # 批量下载
POST /dimension_remote_table_modelview/<dim_id>/api/multi_action/<name> # 批量操作
说明: 每个维表动态注册一组路由,对远程数据库表进行 CRUD 操作。接口规范同标准化接口。
数据血缘 /blood
代码文件:myapp/views/view_blood.py(route_base = '/blood')
血缘节点/边的通用数据结构与上报约定见 通用血缘链路接口。
血缘搜索
GET /blood/search/node
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| keyword | query | string | 搜索关键词 |
| node_id | query | string | 指定节点 ID |
| depth_up | query | int | 上游深度,默认 3 |
| depth_down | query | int | 下游深度,默认 3 |
响应:
{
"status": 0,
"result": {
"blood": [{"id": "node1", "name": "表名", "type": "table", "children": [...]}],
"control": {"focus_node_id": "node1", "node_ops": ["detail"], "direction": "horizontal"}
}
}
说明: BFS 遍历血缘图,匹配 node_id / name / platform / type / label。
血缘节点名称搜索(自动补全)
GET /blood/search/name
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| keyword | query | string | 搜索关键词 |
| limit | query | int | 返回条数,默认 20,最大 100 |
响应:
{
"status": 0,
"result": {
"options": [{"node_id": "id1", "name": "表名", "value": "id1", "label": "表名"}],
"total": 50
}
}
血缘节点详情
GET /blood/show/<node_id>
响应:
{
"status": 0,
"result": {
"tab1": {
"detail": [{"groupName": "基本信息", "groupContent": [...]}],
"link": [{"text": "跳转", "url": "/xxx"}]
},
"_meta": {"node_id": "id1", "name": "表名", "type": "table"}
}
}
LabelStudio代理 /proxy/labelstudio
代码文件:myapp/views/view_labelstudio.py(route_base = '/proxy/labelstudio')
所有接口均为代理接口,转发到 LabelStudio ML Backend。
POST/GET /proxy/labelstudio/<field>/<model_type>/health # 健康检查
POST/GET /proxy/labelstudio/<field>/<model_type>/setup # 模型初始化
POST/GET /proxy/labelstudio/<field>/<model_type>/train # 模型训练
POST/GET /proxy/labelstudio/<field>/<model_type>/webhook # Webhook
POST/GET /proxy/labelstudio/<field>/<model_type>/delete # 删除模型
POST/GET /proxy/labelstudio/<field>/<model_type>/predict # 预测
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| field | path | string | 标注字段 |
| model_type | path | string | 模型类型 |
predict 响应:
{"predictions": [{...}]}
另有
/proxy/labelstudio/projects路由(见view_labelstudio.py)。
SQL查询 /idex
代码文件:myapp/views/view_sqllab.py(route_base = '/idex')
SQL 引擎配置
GET/POST /idex/config
响应: JSON,包含引擎参数配置和可用数据库列表
提交 SQL 查询任务
POST /idex/submit_task
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| sql | body | string | SQL 语句 |
| engine | body | string | 引擎类型 |
| database | body | string | 数据库名 |
响应:
{"task_id": "xxx", "status": "running"}
获取任务状态
GET /idex/look/<task_id>
响应:
{"status": "running|success|error", "progress": 50}
获取查询结果
GET /idex/result/<task_id>
响应:
{"columns": ["col1", "col2"], "rows": [[...], [...]], "error": ""}
下载查询结果
GET /idex/download_url/<task_id>
响应: 重定向到下载 URL 或返回 {"download_url": "..."}
终止查询任务
GET /idex/stop/<task_id>
响应:
{"status": 0, "message": "success"}