Download OpenAPI specification:
Vega Backend Resource(数据资源)相关 API。
Resource 是数据资源主实体,归属于某个 Catalog。每个 Resource 有一种 category:
| category | 类型 | 说明 |
|---|---|---|
table |
物理 | 关系表(mysql / postgresql / clickhouse / 达梦 / oracle) |
index |
物理 | OpenSearch / Elasticsearch 索引 |
topic |
物理 | 消息队列 topic(计划中) |
file |
物理 | 单文件 |
fileset |
物理 | 文件集(计划中) |
metric |
物理 | 指标(计划中) |
api |
物理 | API 数据源(计划中) |
logical_view |
逻辑 | 专业版及以上可用;由 logic_definition 定义,目前仅支持衍生视图 |
dataset |
逻辑 | 文档集合(RAG 索引),documents 子资源走 [resource-data.yaml] |
enabled 和 status 相互独立:enabled=false 表示该资源不可用于查询或构建;
status 反映资源的生命周期和最近发现结果,取值为 active / deprecated / stale。
子资源端点指引:
端点设计遵循 [vega-backend/CLAUDE.md] 的"端点设计规则":批量 GET / DELETE 走 path
(/resources/{ids} 逗号分隔,单条退化),列表过滤走 query。
分页 + 多维过滤获取 Resource 摘要。列表不返回扩展 JSON 字段
source_metadata、schema_definition、index_config、logic_definition;
需要这些字段时使用 GET /resources/{id}。
| name | string 按资源名称或源端标识模糊过滤,匹配任一字段中包含该值的资源 |
| catalog_id | string 按归属 catalog 过滤 |
| category | string Enum: "table" "file" "fileset" "api" "metric" "topic" "index" "logical_view" "dataset" 按类别过滤 |
| status | string Enum: "active" "deprecated" "stale" 按状态过滤 |
| enabled | boolean 按启用状态过滤 |
| last_discover_status | string Enum: "error" "missing" "new" "restored" "unchanged" "updated" 按最近一次探查状态过滤 |
| schema | string 按所属 schema 过滤;过滤在服务端计数和分页之前完成 |
| offset | integer <int64> >= 0 Default: 0 分页偏移量,>=0,默认 0 |
| limit | integer <int64> [ -1 .. 1000 ] Default: 20 每页数量,1-1000,-1 表示不分页,默认 20 |
| sort | string Default: "update_time" Enum: "name" "create_time" "update_time" 排序字段 |
| direction | string Default: "desc" Enum: "asc" "desc" 排序方向 |
{- "entries": [
- {
- "id": "string",
- "catalog_id": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "category": "table",
- "built_in": true,
- "enabled": true,
- "status": "active",
- "status_message": "string",
- "last_discover_status": "string",
- "last_discover_time": 0,
- "schema": "string",
- "source_identifier": "string",
- "local_status": "unavailable",
- "index_name": "string",
- "logic_type": "derived",
- "creator": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "create_time": 0,
- "updater": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "update_time": 0,
- "operations": [
- "string"
]
}
], - "total_count": 0
}创建 Resource。catalog_id 必填且 catalog 必须存在;不存在返回 404
VegaBackend.Resource.CatalogNotFound。
id 字段可选;后端在不指定时生成。category 必须为支持的取值之一。仅 dataset 与 logical_view 允许通过本 API 创建;
其他类别(table / file / fileset / api / metric / topic / index)由 discover 任务产出,
直接调用本接口创建会返回 400 VegaBackend.Resource.CategoryNotCreatable。name 在 catalog 内唯一;冲突返回 409 VegaBackend.Resource.NameExists。category=logical_view 仅在 EE 专业版及以上授权可创建,且必须提交
logic_type=derived 与对应的
logic_definition 对象和非空 schema_definition;字段的 name、original_name、
type 与非空 display_name 必填,type 必须等于绑定的源 Resource 字段类型。
display_name 是 View 自身的显示名,可与源字段不同,最多 255 个字符;
不提供自动继承。同一 View 内输出字段的 name 与 display_name 均不得重复;
display_name 去重比较忽略首尾空白,保存时保留请求值。
重复显示名返回 400 VegaBackend.LogicalView.Duplicated.FieldDisplayName。
源资源仅支持 table/index。
source_metadata 由服务端从源资源生成,请求值不参与写入;
未安装 EE 扩展返回 501;授权版本不足返回 403 Public.Forbidden。
通过字段校验的复合视图定义暂时返回 501。category=dataset 必须给非空 schema_definition;字段名/长度/重复/类型/特征均会校验,
display_name 在校验与保存前去除首尾空白;省略或去空白后为空时使用字段 name,
去空白后重复则返回 400 VegaBackend.Dataset.Duplicated.FieldDisplayName。
其他违反规则的请求返回 400 VegaBackend.Dataset.*(详见错误码族)。Dataset 索引在 Resource
入库前创建,成功响应中的 index_name 是服务端分配的 vega-dataset-<uuidv7>。
新建索引的分片数和副本数遵循 OpenSearch 索引模板及集群默认配置。| id | string <= 40 characters ^[a-z0-9][a-z0-9\-_]{0,39}$ 可选;创建时不指定则后端生成;小写字母、数字、下划线、连字符,不能以下划线开头,最大长度 40 |
| expected_update_time | integer <int64> >= 1 仅 PUT 使用的必填乐观锁版本,取自最近一次查询响应的 |
| catalog_id required | string 所属 catalog ID(必填) |
| name required | string [ 1 .. 255 ] characters 资源名称,必填,最大长度 255 |
| tags | Array of strings <= 5 items [ items [ 1 .. 40 ] characters ] 标签列表(可选),最多 5 个,每个标签非空且最大长度 40,不能包含特殊字符 |
| description | string <= 1000 characters 描述,最大长度 1000 |
| category required | string Enum: "table" "file" "fileset" "api" "metric" "topic" "index" "logical_view" "dataset" 资源类型 |
| built_in | boolean 仅创建时可传;必须与所属 Catalog 的 |
| enabled | boolean Default: true 是否允许该资源用于查询或构建。创建时省略默认 |
| status | string Enum: "active" "deprecated" "stale" |
| schema | string 所属 schema,由发现流程写入 |
| source_identifier | string 物理资源由发现流程写入,SQL 表保存连接器生成的源方言表引用; API 不允许创建物理表资源。PUT 时忽略此字段。 |
object 物理资源的源元数据由发现流程维护,API 不允许创建物理表资源。 请求中的值不参与 derived 逻辑视图写入;PUT 时由内部流程维护。 | |
Array of objects (Property) derived 逻辑视图必填且非空;每个字段的 name、original_name、type、display_name 均必填,display_name 不得为空且最多 255 个字符,可与源字段显示名不同, 同一 View 内忽略首尾空白比较后不得重复(保存原值);输出字段 name 也必须唯一。 GET 返回已保存的 View 显示名;完整 PUT 须显式传入希望保留或更新的值。 type 须与源字段一致。 每个字段省略 features 时继承源字段全部 Feature;显式传 [] 时不公开任何 Feature; 传部分 Feature 时仅保留源字段中匹配的条目。Feature 元数据由源字段补齐, vector 的只读 config.dimension 无须提交。删除 Feature 后,Index 源视图查询不能使用 依赖该 Feature 的搜索、过滤、排序或聚合操作;Table 源的普通 SQL 字段查询不依赖 Feature。 定义内固定 filter_condition 可引用未公开的源字段,但须满足实际查询路径的过滤能力。 | |
object (ResourceIndexConfig) 本地索引构建配置 | |
| logic_type | string Enum: "derived" "composite" 创建和完整 PUT 更新逻辑视图时必填;须与当前定义结构一致,PUT 不可改变既有类型 |
object (DerivedLogicDefinition) derived 逻辑视图的单一源和固定过滤配置;不接受旧节点数组、distinct 或未知字段 |
{- "id": "string",
- "expected_update_time": 1,
- "catalog_id": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "category": "table",
- "built_in": true,
- "enabled": true,
- "status": "active",
- "schema": "string",
- "source_identifier": "string",
- "source_metadata": { },
- "schema_definition": [
- {
- "name": "string",
- "type": "string",
- "display_name": "string",
- "description": "string",
- "original_name": "string",
- "original_type": "string",
- "original_description": "string",
- "features": [
- {
- "name": "string",
- "display_name": "string",
- "feature_type": "keyword",
- "description": "string",
- "ref_property": "string",
- "is_default": true,
- "is_native": true,
- "config": { }
}
], - "attributes": { }
}
], - "index_config": {
- "default_keyword_ignore_above": 256,
- "primary_key_fields": [
- "string"
], - "incremental_fields": [
- "string"
], - "default_fulltext_analyzer": "string",
- "default_embedding_model": "string"
}, - "logic_type": "derived",
- "logic_definition": {
- "source_resource_id": "string",
- "filter_condition": { }
}
}{- "id": "string",
- "catalog_id": "string",
- "api_name": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "category": "table",
- "built_in": true,
- "enabled": true,
- "status": "active",
- "status_message": "string",
- "last_discover_status": "string",
- "last_discover_time": 0,
- "schema": "string",
- "source_identifier": "string",
- "source_metadata": { },
- "schema_definition": [
- {
- "name": "string",
- "type": "string",
- "api_name": "string",
- "display_name": "string",
- "description": "string",
- "original_name": "string",
- "original_type": "string",
- "original_description": "string",
- "features": [
- {
- "name": "string",
- "display_name": "string",
- "feature_type": "keyword",
- "description": "string",
- "ref_property": "string",
- "is_default": true,
- "is_native": true,
- "config": { }
}
], - "attributes": { }
}
], - "index_config": {
- "default_keyword_ignore_above": 256,
- "primary_key_fields": [
- "string"
], - "incremental_fields": [
- "string"
], - "default_fulltext_analyzer": "string",
- "default_embedding_model": "string"
}, - "local_status": "unavailable",
- "index_name": "string",
- "column_count": 0,
- "row_count": 0,
- "row_count_time": 0,
- "estimated_row_count": 0,
- "logic_type": "derived",
- "logic_definition": {
- "source_resource_id": "string",
- "filter_condition": { }
}, - "creator": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "create_time": 0,
- "updater": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "update_time": 0,
- "operations": [
- "string"
]
}按 ids 批量取 Resource。整体事务语义:任一 id 不存在返回 404
VegaBackend.Resource.NotFound,error_details 含具体缺失 id。
传 ignore_missing=true 可放宽为跳过缺失 id、只返回存在的那些。
重复 ID 按首次出现的位置去重;entries 按请求中的 ID 顺序返回,
跳过缺失 ID 后仍保持其余条目的相对顺序。
| id required | string Resource ID 列表,逗号分隔(单条即长度 1 的退化情形)。 |
| ignore_missing | boolean Default: false 容忍缺失 ID,跳过而非报 404,默认 false |
{- "entries": [
- {
- "id": "string",
- "catalog_id": "string",
- "api_name": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "category": "table",
- "built_in": true,
- "enabled": true,
- "status": "active",
- "status_message": "string",
- "last_discover_status": "string",
- "last_discover_time": 0,
- "schema": "string",
- "source_identifier": "string",
- "source_metadata": { },
- "schema_definition": [
- {
- "name": "string",
- "type": "string",
- "api_name": "string",
- "display_name": "string",
- "description": "string",
- "original_name": "string",
- "original_type": "string",
- "original_description": "string",
- "features": [
- {
- "name": "string",
- "display_name": "string",
- "feature_type": "keyword",
- "description": "string",
- "ref_property": "string",
- "is_default": true,
- "is_native": true,
- "config": { }
}
], - "attributes": { }
}
], - "index_config": {
- "default_keyword_ignore_above": 256,
- "primary_key_fields": [
- "string"
], - "incremental_fields": [
- "string"
], - "default_fulltext_analyzer": "string",
- "default_embedding_model": "string"
}, - "local_status": "unavailable",
- "index_name": "string",
- "column_count": 0,
- "row_count": 0,
- "row_count_time": 0,
- "estimated_row_count": 0,
- "logic_type": "derived",
- "logic_definition": {
- "source_resource_id": "string",
- "filter_condition": { }
}, - "creator": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "create_time": 0,
- "updater": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "update_time": 0,
- "operations": [
- "string"
]
}
]
}按 ids 批量删除 Resource。整体事务:所有 id 通过预校验后才进入删除阶段,
任一不存在返回 404 VegaBackend.Resource.NotFound,整批不删。
若任一 Resource 存在 pending 或 running 的资源元数据刷新任务,返回 409
VegaBackend.DiscoverTask.ResourceRefreshInProgress,整批不删;需等待该任务进入终态。
可选 ?ignore_missing=true:忽略不存在的 id(视为已删除),其它 id 正常删。
可选 ?only_if_stale=true:要求所有资源在删除瞬间仍为
status=stale 且 last_discover_status=missing;否则返回 409
VegaBackend.Resource.DeleteConflict,事务回滚,整批不删,也不执行删除后的清理。
不能与 ignore_missing=true 同时使用。默认 false,不改变现有删除语义。
| id required | string Resource ID 列表,逗号分隔(单条即长度 1 的退化情形)。 |
| ignore_missing | boolean Default: false 忽略不存在的 id;默认 false |
| only_if_stale | boolean Default: false 原子校验整批资源的失效且探查缺失状态;默认 false |
{- "error_code": "string",
- "description": "string",
- "error_details": null,
- "metadata": { }
}更新 Resource。
name 在 catalog 内唯一;改名为已占用值返回 409 VegaBackend.Resource.NameExists。catalog_id 和 category 不可修改,与当前 Resource 不一致时返回 400。enabled 不可修改;请使用 POST /resources/{id}/enable 或 /disable。status、schema、source_identifier、source_metadata 由内部流程管理;即使携带也会被忽略。expected_update_time 进行乐观并发控制。该值应取自最近一次查询响应的
update_time;若资源已被其他请求更新,返回 409 VegaBackend.Resource.UpdateConflict。feature.config.analyzer;请求返回 409
VegaBackend.InvalidParameter.RequestBody,错误详情标明字段并提示重建 Dataset。
同值保存、仅修改描述或仅修改 default_fulltext_analyzer 不受此新增限制;
Dataset 物理 mapping 当前只读取字段级 analyzer 配置,不应用资源默认 analyzer。Public.Forbidden。
若提交复合视图定义,也暂时返回 501;已保存的复合视图仍可读取。
derived 完整 PUT 的每个输出字段均须提交非空 display_name;保留原显示名时
应从最近一次 GET 的 schema_definition 回填,不会从源字段自动继承。| id required | string Resource ID 列表,逗号分隔(单条即长度 1 的退化情形)。 |
| id | string <= 40 characters ^[a-z0-9][a-z0-9\-_]{0,39}$ 可选;创建时不指定则后端生成;小写字母、数字、下划线、连字符,不能以下划线开头,最大长度 40 |
| expected_update_time required | integer <int64> >= 1 仅 PUT 使用的必填乐观锁版本,取自最近一次查询响应的 |
| catalog_id required | string 所属 catalog ID(必填) |
| name required | string [ 1 .. 255 ] characters 资源名称,必填,最大长度 255 |
| tags | Array of strings <= 5 items [ items [ 1 .. 40 ] characters ] 标签列表(可选),最多 5 个,每个标签非空且最大长度 40,不能包含特殊字符 |
| description | string <= 1000 characters 描述,最大长度 1000 |
| category required | string Enum: "table" "file" "fileset" "api" "metric" "topic" "index" "logical_view" "dataset" 资源类型 |
| built_in | boolean 仅创建时可传;必须与所属 Catalog 的 |
| enabled | boolean Default: true 是否允许该资源用于查询或构建。创建时省略默认 |
| status | string Enum: "active" "deprecated" "stale" |
| schema | string 所属 schema,由发现流程写入 |
| source_identifier | string 物理资源由发现流程写入,SQL 表保存连接器生成的源方言表引用; API 不允许创建物理表资源。PUT 时忽略此字段。 |
object 物理资源的源元数据由发现流程维护,API 不允许创建物理表资源。 请求中的值不参与 derived 逻辑视图写入;PUT 时由内部流程维护。 | |
Array of objects (Property) derived 逻辑视图必填且非空;每个字段的 name、original_name、type、display_name 均必填,display_name 不得为空且最多 255 个字符,可与源字段显示名不同, 同一 View 内忽略首尾空白比较后不得重复(保存原值);输出字段 name 也必须唯一。 GET 返回已保存的 View 显示名;完整 PUT 须显式传入希望保留或更新的值。 type 须与源字段一致。 每个字段省略 features 时继承源字段全部 Feature;显式传 [] 时不公开任何 Feature; 传部分 Feature 时仅保留源字段中匹配的条目。Feature 元数据由源字段补齐, vector 的只读 config.dimension 无须提交。删除 Feature 后,Index 源视图查询不能使用 依赖该 Feature 的搜索、过滤、排序或聚合操作;Table 源的普通 SQL 字段查询不依赖 Feature。 定义内固定 filter_condition 可引用未公开的源字段,但须满足实际查询路径的过滤能力。 | |
object (ResourceIndexConfig) 本地索引构建配置 | |
| logic_type | string Enum: "derived" "composite" 创建和完整 PUT 更新逻辑视图时必填;须与当前定义结构一致,PUT 不可改变既有类型 |
object (DerivedLogicDefinition) derived 逻辑视图的单一源和固定过滤配置;不接受旧节点数组、distinct 或未知字段 |
{- "id": "string",
- "expected_update_time": 1,
- "catalog_id": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "category": "table",
- "built_in": true,
- "enabled": true,
- "status": "active",
- "schema": "string",
- "source_identifier": "string",
- "source_metadata": { },
- "schema_definition": [
- {
- "name": "string",
- "type": "string",
- "display_name": "string",
- "description": "string",
- "original_name": "string",
- "original_type": "string",
- "original_description": "string",
- "features": [
- {
- "name": "string",
- "display_name": "string",
- "feature_type": "keyword",
- "description": "string",
- "ref_property": "string",
- "is_default": true,
- "is_native": true,
- "config": { }
}
], - "attributes": { }
}
], - "index_config": {
- "default_keyword_ignore_above": 256,
- "primary_key_fields": [
- "string"
], - "incremental_fields": [
- "string"
], - "default_fulltext_analyzer": "string",
- "default_embedding_model": "string"
}, - "logic_type": "derived",
- "logic_definition": {
- "source_resource_id": "string",
- "filter_condition": { }
}
}{- "error_code": "string",
- "description": "string",
- "error_details": null,
- "metadata": { }
}对指定物理资源触发一次元数据刷新。服务端创建 resource_id 为该资源 ID 的
DiscoverTask 并立即返回 task id;实际刷新由 worker 异步执行。刷新不会改变
Resource 的 enabled 值。可选 count_only 仅刷新精确数量及采集时间,不刷新元数据。
精确计数支持 MariaDB/MySQL、PostgreSQL 表与普通视图、PostgreSQL 物化视图及 OpenSearch 索引;
logical_view 复用已注册的视图查询服务,按完整视图定义及固定过滤条件获取源端精确总数。
Dataset 数据量在读取时实时计算,不支持后台 count_only;单资源不支持的 category
在创建任务前返回 400,不入库、不调度、不调用连接器。
每个资源使用 5 分钟 ctx 兜底,暂不设置数据库服务端执行时限。
统计写回仅更新资源独立的数量及采集时间字段,不改变 source_metadata、update_time 或 updater。
同一 Resource 已有 pending 或 running 的刷新任务时,返回 409
VegaBackend.DiscoverTask.ResourceRefreshInProgress。full_sync 遇到不支持按资源标识刷新
的 category,或支持计数的资源在执行时已从源端消失,任务会进入 failed,请通过
GET /discover-tasks/{id} 查看详情。
| id required | string Resource ID |
| strategy | string Default: "full_sync" Enum: "full_sync" "count_only" count_only 对已有源表、源视图、索引或 logical_view 执行精确计数;Dataset 等不支持的单资源在创建任务前返回 400 |
{- "strategy": "full_sync"
}{- "id": "string"
}仅将 Resource 的 enabled 设为 true,不改变 status、last_discover_status
或任何发现元数据。已启用时幂等返回 204。
| id required | string Resource ID |
{- "error_code": "string",
- "description": "string",
- "error_details": null,
- "metadata": { }
}仅将 Resource 的 enabled 设为 false,不改变 status、last_discover_status
或任何发现元数据。已禁用时幂等返回 204。
| id required | string Resource ID |
{- "error_code": "string",
- "description": "string",
- "error_details": null,
- "metadata": { }
}