CatalogAPI SDK使用指南

更新时间:
复制为 MD 格式

产品版本:v0.2.2
SDK 仓库:aliyun/aliyun-odps-openapi-sdk


概述

CatalogAPI SDK 是阿里云 MaxCompute 提供的数据目录管理开放接口 SDK。通过 CatalogAPI实现以编程方式管理 MaxCompute 中的元数据资源,包括 Project、Schema、Table、Connection、Role、Taxonomy、DataPolicy、DataScan、Model 等。

功能特性

CatalogAPI SDK 提供以下核心能力:

  • 数据表管理

    创建和更新内表、外表,查询和删除内表、外表、视图、物化视图和快照表。

  • 连接管理

    管理访问外部数据源(如 OSS、OTS)的 Connection 配置。

  • 权限管理

    通过 Role 和 Policy 实现细粒度的访问控制。

  • 数据安全

    通过 Taxonomy 和 Policy Tag 实现列级访问控制,通过 DataPolicy 实现动态数据脱敏。

  • 元数据爬取

    通过 DataScan 自动发现和爬取外部数据源的元数据。

  • 模型管理

    管理机器学习模型的元数据,支持多版本管理。

  • 资源搜索

    在 namespace 范围内搜索各类元数据实体。

资源模型

CatalogAPI 遵循 RESTful 设计风格,核心资源层级关系如下:

Namespace(主账号 UID)
├── Connection          # 外部数据源连接
├── Role                # 自定义角色
├── Taxonomy            # 策略标签分类
│   └── PolicyTag       # 策略标签
├── DataPolicy          # 数据策略(脱敏规则)
├── DataScan            # 元数据爬取任务
│   └── ScanJob         # 爬取作业
Project             # MaxCompute 项目
    └── Schema          # 命名空间(目录)
        ├── Table       # 数据表
        │   └── Partition # 分区
        └── Model       # 机器学习模型
说明

Namespace ID 即阿里云主账号 UID。

快速开始

获取 SDK

CatalogAPI SDK 支持 Java 和 Python 两种语言,托管在阿里云 GitHub 仓库中。

// 在 Maven 项目中添加依赖
<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>catalog-api</artifactId>
    <version>0.2.2</version>
</dependency>
pip install pyodps-catalog

初始化客户端

使用 AccessKey 初始化 CatalogAPI 客户端。

重要

请勿在代码中硬编码 AccessKey。建议通过环境变量或配置文件方式管理凭证。

import com.aliyun.odps.catalog.Client;
import com.aliyun.odps.models.Config;

public class CatalogDemo {
    public static void main(String[] args) throws Exception {
        // 初始化配置
        Config config = new Config();
        config.setAccessKeyId(System.getenv("ALIBABACLOUD_ACCESS_KEY_ID"));
        config.setAccessKeySecret(System.getenv("ALIBABACLOUD_ACCESS_KEY_SECRET"));
        // 设置接入点,请根据实际 Region 替换
        config.setEndpoint("odps.cn-shanghai.maxcompute.aliyun.com");
        
        // 创建客户端
        Client client = new Client(config);
        
        // 使用 client 调用 API
    }
}
import os
from pyodps_catalog.client import Client
from maxcompute_tea_openapi.models import Config

# 初始化配置
config = Config(
    access_key_id=os.environ.get('ALIBABACLOUD_ACCESS_KEY_ID'),
    access_key_secret=os.environ.get('ALIBABACLOUD_ACCESS_KEY_SECRET'),
    endpoint='odps.cn-shanghai.maxcompute.aliyun.com'
)

# 创建客户端
client = Client(config)

# 使用 client 调用 API

调用示例:列出表

以下示例演示如何列出指定 Schema 下的所有表:

import com.aliyun.odps.catalog.models.ListTablesResponse;
import com.aliyun.odps.catalog.models.Table;

ListTablesResponse response = client.listTables(
    "my_project",    // projectId
    "default",       // schemaName
    100,             // pageSize
    ""               // pageToken,首次调用传空字符串
);

if (response.getTables() != null) {
    for (Table table : response.getTables()) {
        System.out.println("Table: " + table.getTableName());
    }
}

// 如有下一页,使用 nextPageToken 继续
String nextToken = response.getNextPageToken();
response = client.list_tables(
    project_id="my_project",
    schema_name="default",
    page_size=100,
    page_token=""
)

if response.tables:
    for table in response.tables:
        print(f"Table: {table.table_name}")

# 如有下一页,使用 next_page_token 继续
next_token = response.next_page_token

鉴权说明

访问凭证

调用 CatalogAPI 需要使用阿里云 AccessKey 进行身份验证。推荐使用 RAM 子账号的 AccessKey,并遵循最小权限原则授予权限。

权限列表

各 API 操作所需的权限如下表所示:

单击展开查看全部权限

资源

操作

所需权限

Connection

Create

CreateConnection

Connection

List

ListConnection

Connection

Get

GetConnection

Connection

Update

UpdateConnection

Connection

Delete

DeleteConnection

Connection

SetPolicy

SetConnectionPolicy

Connection

GetPolicy

GetConnectionPolicy

Role

Create

CreateRole

Role

List

ListRole

Role

Get

GetRole

Role

Update

UpdateRole

Role

Delete

DeleteRole

Role

SetPolicy

SetRolePolicy

Role

GetPolicy

GetRolePolicy

Taxonomy

Create

CreateTaxonomy

Taxonomy

List

ListTaxonomy

Taxonomy

Get

GetTaxonomy

Taxonomy

Update

UpdateTaxonomy

Taxonomy

Delete

DeleteTaxonomy

Taxonomy

SetPolicy

SetTaxonomyPolicy

Taxonomy

GetPolicy

GetTaxonomyPolicy

PolicyTag

Create

UpdateTaxonomy

PolicyTag

List

GetTaxonomy

PolicyTag

Get

GetTaxonomy

PolicyTag

Update

UpdateTaxonomy

PolicyTag

Delete

UpdateTaxonomy

DataPolicy

Create

CreateDataPolicy

DataPolicy

List

ListDataPolicy

DataPolicy

Get

GetDataPolicy

DataPolicy

Delete

DeleteDataPolicy

DataPolicy

SetPolicy

SetDataPolicyPolicy

DataPolicy

GetPolicy

GetDataPolicyPolicy

Project

Get

ConnectProject

Schema

Create

CreateSchema

Schema

List

ListSchema

Schema

Get

GetSchema

Schema

Update

UpdateSchema

Schema

Delete

DeleteSchema

Schema

SetPolicy

SetSchemaPolicy

Schema

GetPolicy

GetSchemaPolicy

Table

Create

CreateTable

Table

List

List Table

Table

Get

Describe Table

Table

Update

Alter Table

Table

Delete

Drop Table

Table

SetPolicy

SetTablePolicy

Table

GetPolicy

GetTablePolicy

Table

GetDataToken

Select Table+UseConnection

Partition

List

Describe Table

Model

Create

CreateModel

Model

List

List Model

Model

Get

Describe Model

Model

Update

Alter Model

Model

Delete

Drop Model

Model

SetPolicy

SetModelPolicy

Model

GetPolicy

GetModelPolicy

ModelVersion

Create

Alter Model

ModelVersion

Delete

Alter Model

ModelVersion

List

Describe Model

DataScan

Create

CreateDataScan

DataScan

List

ListDataScan

DataScan

Get

GetDataScan

DataScan

Update

UpdateDataScan

DataScan

Delete

DeleteDataScan

DataScan

Trigger

TriggerDataScan

ScanJob

List

ListDataScanJob

Search

Search

SearchNamespace,如果搜索包含 project 条件,则需要这些 project 的 SearchProject 权限

Policy 与 Role

CatalogAPI 支持基于 Policy 的访问控制。Policy 由一组 Binding 构成,每个 Binding 将一个角色(Role)绑定到一组成员(Members)。

  • Policy 模型

    {
      "etag": "string",
      "bindings": [
        {
          "role": "string",
          "members": ["string"]
        }
      ]
    }
    • etag:用于 read-modify-write 操作的一致性校验

    • bindings:角色绑定列表

      • role:角色名称

      • members:成员列表,格式为 user:{userId}

  • 设置 Policy 示例

    import com.aliyun.odps.catalog.models.*;
    
    // 构造 SetPolicyRequest
    Policy policy = new Policy();
    Binding binding = new Binding();
    binding.setRole("roles/odps.admin");
    binding.setMembers(Arrays.asList("user:123456789"));
    policy.setBindings(Arrays.asList(binding));
    policy.setEtag("fetch_with_get_policy");
    SetPolicyRequest request = new SetPolicyRequest();
    request.setPolicy(policy);
    
    // 设置表的 Policy
    client.setTablePolicy(table, request);

数据模型

通用字段

字段

类型

说明

name

string

REST 资源全名,在域名范围内全局唯一。SDK 通过资源名可以方便地构造 REST 请求 URL。通常作为输出字段。

数据类型

除了 JSON 标准类型外,以下为特殊数据类型标记:

数据类型

说明

enum

语义上的枚举类型,在 JSON 格式中用 string 表示

int64

64 位整数,以 string 格式传输

Table 模型

Table 是 CatalogAPI 的核心资源之一。

{
  "etag": "string",
  "name": "string",
  "projectId": "string",
  "schemaName": "string",
  "tableName": "string",
  "type": "enum(TableType)",
  "description": "string",
  "tableSchema": { "object(TableFieldSchema)" },
  "clustering": { "object(Clustering)" },
  "tableConstraints": { "object(TableConstraints)" },
  "partitionDefinition": { "object(PartitionDefinition)" },
  "tableFormatDefinition": { "object(TableFormatDefinition)" },
  "externalDataConfiguration": { "object(ExternalDataConfiguration)" },
  "maxLakeConfiguration": { "object(MaxLakeConfiguration)" },
  "externalCatalogTableOptions": { "object(ExternalCatalogTableOptions)" },
  "expirationOptions": { "object(ExpirationOptions)" },
  "createTime": "string (int64 format)",
  "lastModifiedTime": "string (int64 format)",
  "labels": { "map<string, string>" }
}

单击展开查看字段详细说明

字段

类型

必填

说明

etag

string

用于 read-modify-write 一致性校验

name

string

表的完整路径,如 projects/{projectId}/schemas/{schemaName}/tables/{tableName},仅输出

projectId

string

表所属的 project ID

schemaName

string

条件

表所属的 schema 名。三层模型下必填,二层模型下不得填写

tableName

string

表名

type

enum(TableType)

表的类型。取值:TABLE(内表)、EXTERNAL(外表)、VIEW(视图)、MATERIALIZED_VIEW(物化视图)、SNAPSHOT(快照表)

description

string

表的描述,等价于 SQL DDL 中表的 comment

tableSchema

TableFieldSchema

表列的 schema 定义

clustering

Clustering

表的 cluster 属性定义,只有 cluster 表才有

tableConstraints

TableConstraints

表的主键约束定义,只有 delta 表才有

partitionDefinition

PartitionDefinition

表的分区列定义,只有分区表才有

tableFormatDefinition

TableFormatDefinition

仅内表有此字段,默认为普通表格式

externalDataConfiguration

ExternalDataConfiguration

外部表配置,仅外部表支持

maxLakeConfiguration

MaxLakeConfiguration

managed lake table 配置

externalCatalogTableOptions

ExternalCatalogTableOptions

external catalog 信息

expirationOptions

ExpirationOptions

表和分区数据的过期时间配置

createTime

string (int64)

表的创建时间(毫秒),仅输出

lastModifiedTime

string (int64)

表的修改时间(毫秒),仅输出

labels

map<string, string>

表上的标签

TableFieldSchema 模型

支持的数据类型(FieldDataType):TINYINT、SMALLINT、INT、BIGINT、BINARY、FLOAT、DOUBLE、DECIMAL、VARCHAR、CHAR、STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ、BOOLEAN、STRUCT、ARRAY、MAP

{
  "fieldName": "string",
  "sqlTypeDefinition": "string",
  "typeCategory": "enum(FieldDataType)",
  "mode": "enum(FieldMode)",
  "fields": [{ "object(TableFieldSchema)" }],
  "description": "string",
  "policyTags": { "object(PolicyTags)" },
  "maxLength": "string (int64 format)",
  "precision": "string (int64 format)",
  "scale": "string (int64 format)",
  "defaultValueExpression": "string"
}

单击展开查看字段详细说明

字段

类型

说明

fieldName

string

列名(顶层列)或 struct 字段名。表的 tableSchema 中无此字段

sqlTypeDefinition

string

仅输出。在 SQL DDL 语句中表示列类型的字符串定义,只有表列才输出

typeCategory

enum(FieldDataType)

字段类型

mode

enum(FieldMode)

REQUIRED(不能为 NULL)或 NULLABLE(可以为 NULL)

fields

TableFieldSchema[]

STRUCT 类型的子字段

description

string

列的 comment

policyTags

PolicyTags

可选。列绑定的 policy tag,用于列级别访问控制和数据脱敏。无此字段表示无 policy tag。对于嵌套类型,policy tag 只能标记在叶子节点。Policy tag 无法标记在分区列上

policyTags.names

string[]

可选。Policy tag 资源名列表,当前每个列只支持 1 个 policy tag

maxLength

string (int64)

CHAR/VARCHAR 类型的最大长度

precision

string (int64)

DECIMAL 类型的精度

scale

string (int64)

DECIMAL 类型的 scale

defaultValueExpression

string

可选。默认值的表达式字符串

Connection 模型

Connection 用于配置访问外部数据源(如 OSS、OTS)的连接信息。

{
  "name": "string",
  "connectionName": "string",
  "description": "string",
  "creationTime": "string (int64 format)",
  "lastModifiedTime": "string (int64 format)",
  "connectionType": "enum(ConnectionType)",
  "cloudResource": { "object(CloudResourceOptions)" },
  "region": "string"
}

单击展开查看字段详细说明

字段

类型

必填

说明

name

string

资源全局唯一名:namespaces/{namespace_ID}/connections/{connectionName},仅输出

connectionName

string

namespace 内唯一。大小写敏感。包含字符:[a-z][A-Z][0-9]_,字节数范围 [3, 32]

description

string

可选。最多 1KB

creationTime

string (int64)

Connection 的创建时间(毫秒),仅输出

lastModifiedTime

string (int64)

最后修改时间(毫秒)

connectionType

enum(ConnectionType)

Connection 的类型。取值:CLOUD_RESOURCE(云上资源类型,如 OSS、OTS 等)

cloudResource

CloudResourceOptions

条件

仅当 connectionType 为 CLOUD_RESOURCE 时设置

  • delegatedAccount

    STRING类型。被委托的账号名,创建时自动保存为创建者归属的主账号,仅输出。

  • ramRoleArn

    STRING类型,必填。授权给 MaxCompute 服务扮演的 RAM 角色 ARN。

region

string

此 connection 所属的 region,仅输出

Role 模型

Role 用于定义自定义角色。

{
  "name": "string",
  "roleName": "string",
  "description": "string",
  "includedPermissions": ["string"],
  "etag": "string",
  "deleted": false
}

单击展开查看字段详细说明

字段

类型

说明

name

string

资源全局唯一名:namespaces/{namespace_ID}/roles/{roleName},仅输出

roleName

string

namespace 内唯一。大小写敏感。包含字符:[a-z][A-Z][0-9]_,字节数范围 [3, 255]

description

string

可选。最多 1KB

includedPermissions

string[]

Role 包含的权限列表

etag

string

目前仅输出,未来将用于保证 read-modify-write 操作一致性

deleted

boolean

仅输出,表示是否被删除

RoleView 枚举

枚举值

说明

BASIC

不返回 includedPermissions,默认值

FULL

返回所有字段

Taxonomy 模型

Taxonomy 用于管理策略标签(Policy Tag)的分类体系。

{
  "name": "string",
  "taxonomyName": "string",
  "description": "string",
  "activatedPolicyTypes": ["enum(PolicyType)"],
  "policyTagCount": 0,
  "createTime": "string (int64 format)",
  "lastModifiedTime": "string (int64 format)"
}

单击展开查看字段详细说明

字段

类型

说明

name

string

仅输出。格式为 namespaces/{namespace_ID}/taxonomies/{ID},ID 为系统自动分配的唯一 ID

taxonomyName

string

namespace 内唯一。大小写敏感。包含字符:[a-z][A-Z][0-9]_,字节数范围 [3, 255]

description

string

可选。最多 2000 bytes

activatedPolicyTypes

PolicyType[]

可选。Taxonomy 下开启的 policy 类型列表,默认为 POLICY_TYPE_UNSPECIFIED

policyTagCount

integer

仅输出。此 Taxonomy 内 policy tag 的个数

createTime

string (int64)

仅输出。Taxonomy 的创建时间戳(UTC 毫秒)

lastModifiedTime

string (int64)

仅输出。Taxonomy 的最后修改时间戳(UTC 毫秒)

PolicyType 枚举

枚举值

说明

POLICY_TYPE_UNSPECIFIED

未指定类型

FINE_GRAINED_ACCESS_CONTROL

开启列级访问控制

说明

当 taxonomy 显式指定 FINE_GRAINED_ACCESS_CONTROL 或 taxonomy 下任意 policy tag 有设置 data policy 时,该 taxonomy 下所有 policy tag 视为开启列级访问控制。

PolicyTag 模型

PolicyTag 是挂载在 Taxonomy 下的策略标签,用于实现列级访问控制。

{
  "name": "string",
  "policyTagName": "string",
  "description": "string",
  "parentPolicyTag": "string",
  "childPolicyTags": ["string"]
}

单击展开查看字段详细说明

字段

类型

说明

name

string

PolicyTag 的完整路径:namespaces/{namespace_ID}/taxonomies/{TID}/policyTags/{ID},ID 为系统自动分配的唯一 ID

policyTagName

string

父 Taxonomy 内唯一。大小写敏感。包含字符:[a-z][A-Z][0-9]_,字节个数范围 [3, 255]

description

string

可选。最多 2000 bytes

parentPolicyTag

string

父节点 name,空代表根节点。默认为空

childPolicyTags

string[]

仅输出。子节点的 name 列表

DataPolicy 模型

DataPolicy 用于定义数据脱敏规则。

{
  "name": "string",
  "dataPolicyName": "string",
  "policyTag": "string",
  "dataPolicyType": "enum(DataPolicyType)",
  "dataMaskingPolicy": { "object(DataMaskingPolicy)" }
}

单击展开查看字段详细说明

字段

类型

说明

name

string

namespaces/{namespace_ID}/dataPolicies/{dataPolicyName},仅输出

dataPolicyName

string

用户指定的 data policy 名,在账号级唯一

policyTag

string

Data policy 绑定的 policy tag 资源全名

dataPolicyType

enum(DataPolicyType)

目前仅支持 DATA_MASKING_POLICY(列级数据脱敏)

dataMaskingPolicy

DataMaskingPolicy

Data policy 上定义的脱敏规则

  • DataMaskingPolicy

    字段

    类型

    说明

    predefinedExpression

    enum(PredefinedExpression)

    预定义脱敏策略的类型

    parameters

    string[]

    预定义脱敏策略的参数

  • 预定义脱敏策略(PredefinedExpression)

    枚举值

    说明

    SHA256

    SHA256 哈希

    SHA512

    SHA512 哈希

    ALWAYS_NULL

    始终返回 NULL

    DEFAULT_MASKING_VALUE

    默认脱敏值

    DATE_YEAR

    仅保留年份

    POINT_RESERVE

    保留小数点

    STRING_MASKED_BA

    字符串脱敏(前向)

    STRING_UNMASKED_BA

    字符串不脱敏(前向)

    MD5

    MD5 哈希

    SM3

    SM3 哈希

    REPLACE_RANDOM

    随机替换

    REPLACE_RANDOM_BA

    随机替换(前向)

    REPLACE_FIXED

    固定值替换

DataScan 模型

DataScan 用于配置元数据爬取任务。

{
  "name": "string",
  "scanName": "string",
  "type": "string",
  "creator": "string",
  "customerId": "string",
  "namespaceId": "string",
  "description": "string",
  "scanId": "string",
  "creationTime": 0,
  "lastModifiedTime": 0,
  "lastTriggeredTime": 0,
  "lastSuccessfulScheduleTime": 0,
  "lastTriggeredBy": "string",
  "schedulingStatus": "string",
  "source": { "object(DataScanSource)" },
  "target": { "object(DataScanTarget)" },
  "properties": { "object(DataScanProperties)" },
  "schedulerMode": "string",
  "schedulerInterval": "string",
  "scheduledCount": 0
}

单击展开查看字段详细说明

字段

类型

说明

name

string

资源全局唯一名:namespaces/{namespaceID}/dataScans/{dataScanName}

scanName

string

用户指定的爬取任务名称

type

string

取值范围:TABLE_DISCOVERY(表发现)、SCHEMA_DISCOVERY(Schema 发现)

creator

string

dataScan 的创建者

customerId

string

客户 ID

namespaceId

string

dataScan 所属的 namespace

description

string

用户自定义的描述

scanId

string

系统自动生成的 scan ID,只读字段,展示项

creationTime

int64

创建时间,UTC timestamp

lastModifiedTime

int64

上次修改时间,UTC timestamp

lastTriggeredTime

int64

爬取任务上次触发时间(开始调度时间),UTC timestamp。未触发过默认值为 0

lastSuccessfulScheduleTime

int64

最近一次成功的 DatascanJob 的执行时间,默认值为 0

lastTriggeredBy

string

触发当前调度的来源,具体用户或调度器

schedulingStatus

string

调度状态。取值:IDLE(空闲)/IMMEDIATE(立即执行)/PENDING(等待中)/SCHEDULING(调度中)。初始化状态为 IDLE,创建后立刻执行则设置为 IMMEDIATE

source

DataScanSource

元数据爬取和发现来源

target

DataScanTarget

控制发现结果写入的参数

properties

DataScanProperties

爬取任务的可选参数

schedulerMode

string

manual(手动触发)/periodic(周期性自动触发)

schedulerInterval

string

当 schedulerMode 为 periodic 时,两次爬取任务之间的最大间隔,取值范围 [1h-7d]

scheduledCount

int64

这个 dataScan 一共被调度了多少次

  • DataScanSource

    字段

    类型

    说明

    location

    string

    location 地址,支持 OSS、DLF 和 Holo

    connection

    string

    connection name,提供访问 source 需要的身份与网络信息,需要鉴权

    ignores

    string[]

    忽略访问的路径,支持正则表达式

  • DataScanTarget

    字段

    类型

    说明

    project

    string

    结果写入的 project name

    schema

    string

    当 dataScan.type 为 table 时,table 写入的 schema

    namePrefix

    string

    爬取任务自动生成的 table/schema 名称的前缀,防止命名冲突

    properties

    string

    用户可指定的最终表 / schema 的属性

  • DataScanProperties

    字段

    类型

    说明

    formatFilter

    string

    AUTO/PARQUET/ORC/JSON/CSV。只爬取对应属性的数据。若指定则忽略其他类型的文件,auto 为不指定属性自动探测

    scanMode

    enum

    SAMPLE(抽样)/TOTAL(完整)。默认为 SAMPLE

    enableStats

    boolean

    是否统计信息用于查询优化

    options

    string

    其余的配置可选项,如 CSV 格式下的额外选项

    pattern

    string

    分区路径识别的 pattern,如 {table}/{part1}={value1}/{part2}={value2}

    updatePolicy

    string

    发现表元数据发生变化时的处理策略:APPEND_ONLY(追加)/OVERWRITE(覆盖)/IGNORE(忽略)

    syncRemove

    boolean

    发现表删除时是否自动删除

    autoCommit

    boolean

    false 代表爬取任务只输出结果,不提交 DDL

    inventoryLocation

    string

    指定 OSS Inventory 日志的存储位置,用于增量扫描功能

Model 模型

Model 用于管理机器学习模型的元数据。

{
  "name": "string",
  "modelName": "string",
  "versionName": "string",
  "defaultVersion": "string",
  "createTime": "string",
  "updateTime": "string",
  "versionCreateTime": "string",
  "versionUpdateTime": "string",
  "description": "string",
  "versionDescription": "string",
  "expirationDays": 0,
  "versionExpirationDays": 0,
  "sourceType": "string",
  "modelType": "string",
  "labels": { "map<string, string>" },
  "transform": { "map<string, string>" },
  "path": "string",
  "options": { "map<string, string>" },
  "extraInfo": { "map<string, string>" },
  "versionExtraInfo": { "map<string, string>" },
  "trainingInfo": { "map<string, string>" },
  "inferenceParameters": { "map<string, string>" },
  "featureColumns": { "object(ModelFieldSchema)" },
  "tasks": ["string"]
}

单击展开查看字段详细说明

字段

类型

说明

name

string

模型的完整路径:projects/{projectId}/schemas/{schemaName}/models/{modelName}

modelName

string

模型名,上级 Schema 内唯一。大小写不敏感。包含字符:[a-z][A-Z][0-9]_,字节个数范围 [3, 255]

versionName

string

版本名,同一 model 范围内唯一。大小写不敏感。包含字符:[a-z][A-Z][0-9]_,字节个数范围 [3, 255]

defaultVersion

string

模型的默认版本名

createTime

string

模型的创建时间(毫秒)

updateTime

string

模型的修改时间(毫秒)

versionCreateTime

string

版本的创建时间(毫秒)

versionUpdateTime

string

版本的修改时间(毫秒)

description

string

模型的描述,最长 1KB

versionDescription

string

版本的描述,最长 1KB

expirationDays

integer

模型基于最近更新时间的生命周期(天)

versionExpirationDays

integer

版本基于最近更新时间的生命周期(天)

sourceType

string

模型的来源类型,创建后不支持修改

modelType

string

模型的类型,创建后不支持修改

labels

map<string, string>

模型的标签

transform

map<string, string>

版本的预处理信息

path

string

版本对应模型文件的路径

options

map<string, string>

版本的参数

extraInfo

map<string, string>

模型的额外信息

versionExtraInfo

map<string, string>

版本的额外信息

trainingInfo

map<string, string>

版本的训练信息

inferenceParameters

map<string, string>

版本的推理参数

featureColumns

ModelFieldSchema

版本的列 schema 定义

tasks

string[]

version 支持的所有 task 类型

tasks 字段约束

  • 对于 LLM/MLLM 类型模型,可取值:text-generation、chat、sentence-embedding 中的一个或多个

  • 对于 BOOSTED_TREE_CLASSIFIER 类型模型,只能取值为 [predict, predict-proba, feature-importance](顺序任意)

  • 对于 BOOSTED_TREE_REGRESSOR 类型模型,只能取值为 [predict, feature-importance](顺序任意)

Schema 模型

{
  "name": "string",
  "schemaName": "string",
  "description": "string",
  "type": "enum(SchemaType)",
  "owner": "string",
  "externalSchemaConfiguration": { "object(ExternalSchemaConfiguration)" }
}

单击展开查看字段详细说明

字段

类型

说明

name

string

Schema 的资源全名:projects/{projectId}/schemas/{schemaName},仅输出

schemaName

string

Schema 在 project 下唯一名

description

string

可选。Schema 的描述

type

enum(SchemaType)

Schema 类型:DEFAULT(默认类型)、EXTERNAL(外部,目前不支持)

owner

string

Schema 的拥有者

externalSchemaConfiguration

ExternalSchemaConfiguration

可选。只有外部 schema 才有此配置,目前版本未启用

Project 模型

{
  "name": "string",
  "projectId": "string",
  "owner": "string",
  "description": "string",
  "createTime": "string (int64 format)",
  "lastModifiedTime": "string (int64 format)",
  "schemaEnabled": "boolean",
  "region": "string"
}

单击展开查看字段详细说明

字段

类型

说明

name

string

Project 的资源全名:projects/{projectId},仅输出

projectId

string

Project 唯一 ID

owner

string

Project 的拥有者

description

string

Project 描述

createTime

string (int64)

Project 的创建时间戳(UTC 毫秒)

lastModifiedTime

string (int64)

Project 的最后修改时间戳(UTC 毫秒)

schemaEnabled

boolean

Project 是否开启三层模型

region

string

Project 所属 region

Partition 模型

{
  "spec": "string"
}

字段

类型

说明

spec

string

分区 spec,格式样例为 bu=tt/ds=20250515

Search 模型

{
  "name": "string",
  "displayName": "string",
  "type": "string",
  "aspects": { "map<string, string>" },
  "createTime": "string",
  "lastModifiedTime": "string",
  "description": "string"
}

单击展开查看字段详细说明

字段

类型

说明

name

string

实体的完整路径,如projects/{projectId}/schemas/{schemaName}/tables/{tableName}

displayName

string

实体的名称

type

string

实体的类型,例如 TABLE、RESOURCE、SCHEMA 等

aspects

map<string, string>

实体的其他信息

createTime

string

实体的创建时间(毫秒)

lastModifiedTime

string

实体的修改时间(毫秒)

description

string

实体的描述

API 参考

公共声明

URL 前缀:本文档中所有 API 的 URL 均使用以下前缀:/api/catalog/v1alpha/

重要

单条 API 描述中不再重复此前缀。

错误处理

HTTP 状态码

Reason

说明

400

InvalidArgument

请求输入错误

403

AccessDenied

无操作权限

404

NotFound

操作的对象不存在

409

AlreadyExists

创建的对象已存在

429

RateLimitExceeded

请求频率过高,触发流控

500

InternalError

系统内部错误

Table API

创建表

创建一个新的数据表。

  • 方法定义

    Table createTable(Table table)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    表对象,包含表的完整定义

  • 返回结果

    返回创建好的 Table 对象。

  • 使用示例

    // 构造表
    Table table = new Table();
    table.setProjectId("my_project");
    table.setSchemaName("default");
    table.setTableName("my_table");
    table.setDescription("这是一个示例表");
    table.setType("TABLE");
    
    // 设置表 Schema
    TableFieldSchema field = new TableFieldSchema();
    field.setFieldName("id");
    field.setTypeCategory("BIGINT");
    field.setMode("REQUIRED");
    
    TableFieldSchema nameField = new TableFieldSchema();
    nameField.setFieldName("name");
    nameField.setTypeCategory("STRING");
    nameField.setMode("NULLABLE");
    
    TableFieldSchema schema = new TableFieldSchema();
    schema.setFields(Arrays.asList(field, nameField));
    table.setTableSchema(schema);
    
    // 创建表
    Table createdTable = client.createTable(table);
    System.out.println("Created table: " + createdTable.getName());

查询表

获取指定表的详细信息。

  • 方法定义

    Table getTable(Table table)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    包含 projectId、schemaName、tableName 的表对象

  • 返回结果

    返回 Table 对象。

  • 使用示例

    Table query = new Table();
    query.setProjectId("my_project");
    query.setSchemaName("default");
    query.setTableName("my_table");
    
    Table result = client.getTable(query);
    System.out.println("Table type: " + result.getType());
    System.out.println("Description: " + result.getDescription());

更新表

更新指定表的属性。

  • 方法定义

    Table updateTable(Table table)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    包含更新内容的表对象

  • 返回结果

    返回更新后的 Table 对象。

  • 使用示例

    Table table = client.getTable(query);
    table.setDescription("更新后的描述");
    
    Table updated = client.updateTable(table);

删除表

删除指定的数据表。

  • 方法定义

    HttpResponse deleteTable(Table table)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    包含 projectId、schemaName、tableName 的表对象

  • 返回结果

    成功时返回空的 HttpResponse。

  • 使用示例

    HttpResponse response = client.deleteTable(table);
    System.out.println("Status code: " + response.getStatusCode());

列出表

列出指定 Schema 下的所有表。

  • 方法定义

    ListTablesResponse listTables(String projectId, String schemaName, Integer pageSize, String pageToken)
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schemaName

    string

    Schema 名

    pageSize

    integer

    分页大小,默认 100,最大 1000

    pageToken

    string

    翻页 token,默认为空

  • 返回结果

    {
      "tables": [Table],
      "nextPageToken": "string"
    }
  • 使用示例

    ListTablesResponse response = client.listTables("my_project", "default", 100, "");
    
    // 遍历所有页
    while (response.getTables() != null && !response.getTables().isEmpty()) {
        for (Table t : response.getTables()) {
            System.out.println(t.getTableName());
        }
        
        if (response.getNextPageToken() == null || response.getNextPageToken().isEmpty()) {
            break;
        }
        response = client.listTables("my_project", "default", 100, response.getNextPageToken());
    }

设置表 Policy

设置表的访问策略。

  • 方法定义

    Policy setTablePolicy(Table table, SetPolicyRequest request)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    表对象

    request

    SetPolicyRequest

    策略请求

  • 返回结果

    返回更新后的 Policy 对象。

查询表 Policy

获取表的访问策略。

  • 方法定义

    Policy getTablePolicy(Table table)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    表对象

  • 返回结果

    返回表的 Policy 对象。

获取表 DataToken

获取指定表的临时访问令牌。

  • 方法定义

    DataToken getDataToken(Table table, Integer duration)
  • 请求参数

    参数

    类型

    必填

    说明

    table

    Table

    表对象

    duration

    integer

    令牌有效期(秒)

  • 返回结果

    {
      "version": "string",
      "type": "string",
      "value": "string",
      "expiration": "string"
    }
  • DataToken 字段说明

    字段

    类型

    说明

    version

    string

    格式版本,目前为 V1

    type

    string

    类型,目前只支持 STS

    value

    string

    Token 的内容,base64 编码

    expiration

    string

    过期时间

Partition API

列出分区

列出指定表的所有分区。

  • 方法定义

    ListPartitionsResponse listPartitions(
        String projectId, 
        String schemaName, 
        String tableName, 
        Integer pageSize, 
        String pageToken,
        String query,
        String view
    )
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schemaName

    string

    Schema 名

    tableName

    string

    表名

    pageSize

    integer

    分页大小,默认 100,最大 1000

    pageToken

    string

    翻页 token,默认为空

    query

    string

    分区的搜索条件,例如 partition_name:part

    view

    string

    目前仅可取值 BASIC

  • 返回结果

    {
      "partitions": [Partition],
      "nextPageToken": "string"
    }

Connection API

创建连接

创建一个新的外部数据源连接。

  • 方法定义

    Connection createConnection(String namespace, Connection connection)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID(主账号 UID)

    connection

    Connection

    连接对象

  • 返回结果

    返回创建好的 Connection 对象。

  • 使用示例

    // 构造 Connection
    Connection conn = new Connection();
    conn.setConnectionName("my_oss_connection");
    conn.setDescription("访问 OSS 的连接");
    conn.setConnectionType("CLOUD_RESOURCE");
    
    CloudResourceOptions options = new CloudResourceOptions();
    options.setRamRoleArn("acs:ram::123456789:role/MaxComputeOSSRole");
    conn.setCloudResource(options);
    
    // 创建连接
    Connection created = client.createConnection("123456789", conn);

列出连接

列出指定 Namespace 下的所有连接。

  • 方法定义

    ListConnectionsResponse listConnections(String namespace, Integer pageSize, String pageToken)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    pageSize

    integer

    分页大小,默认 100,最大 1000

    pageToken

    string

    翻页 token,默认为空

  • 返回结果

    {
      "connections": [Connection],
      "nextPageToken": "string"
    }

查询连接

获取指定连接的详细信息。

  • 方法定义

    Connection getConnection(String namespace, String connectionName)

更新连接

更新指定连接的属性。

  • 方法定义

    Connection updateConnection(String namespace, String connectionName, Connection connection, String updateMask)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    connectionName

    string

    连接名

    connection

    Connection

    包含更新内容的连接对象

    updateMask

    string

    指定更新字段,目前仅支持更新 description 字段

  • 返回结果

    返回更新后的 Connection 对象。

  • 使用示例

    Connection conn = new Connection();
    conn.setConnectionName("my_oss_connection");
    conn.setDescription("更新后的描述");
    
    Connection updated = client.updateConnection("123456789", "my_oss_connection", conn, "description");

删除连接

删除指定的连接。

  • 方法定义

    HttpResponse deleteConnection(String namespace, String connectionName)

设置连接 Policy

设置连接的访问策略。

  • 方法定义

    Policy setConnectionPolicy(String namespace, String connectionName, SetPolicyRequest request)

查询连接 Policy

获取连接的访问策略。

  • 方法定义

    Policy getConnectionPolicy(String namespace, String connectionName)

Role API

创建角色

创建一个自定义 Role。

  • 方法定义

    Role createRole(String namespace, Role role)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    role

    Role

    角色对象

  • 返回结果

    返回创建好的 Role 对象。

  • 使用示例

    Role role = new Role();
    role.setRoleName("my_custom_role");
    role.setDescription("自定义角色");
    role.setIncludedPermissions(Arrays.asList("odps:CreateTable", "odps:ListTable"));
    
    Role created = client.createRole("123456789", role);

列出角色

列出指定 Namespace 下的所有角色。

  • 方法定义

    ListRolesResponse listRoles(
        String namespace, 
        Integer pageSize, 
        String pageToken, 
        String view, 
        Boolean showDeleted
    )
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    pageSize

    integer

    分页大小,默认 100,最大 1000

    pageToken

    string

    翻页 token,默认为空

    view

    enum(RoleView)

    默认 BASIC,设置为 FULL 时返回所有字段

    showDeleted

    boolean

    是否包含已删除的角色,默认 false

  • 返回结果

    {
      "roles": [Role],
      "nextPageToken": "string"
    }

查询角色

获取指定角色的详细信息。

  • 方法定义

    Role getRole(String namespace, String roleName)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    roleName

    string

    角色名

更新角色

更新指定角色的属性。

  • 方法定义

    Role updateRole(String namespace, String roleName, Role role, String updateMask)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    roleName

    string

    角色名

    role

    Role

    包含更新内容的角色对象

    updateMask

    string

    指定更新字段,如 "description, includedPermissions"

删除角色

删除指定的自定义角色。

  • 方法定义

    HttpResponse deleteRole(String namespace, String roleName)
重要

角色被删除后,立即生效:

  • 角色无法再被绑定 Policy;

  • 已绑定在此角色上的 Policy 仍然维持绑定状态,但不产生任何效果;

  • List roles 操作默认不再列出已删除的角色。角色被删除后,仍然会被计入总数限制,且在七天内维持被删除状态。七天后角色被永久删除,所有资源与此角色的绑定关系都被删除,不再计入总数限制。

设置角色 Policy

设置角色的访问策略。

  • 方法定义

    Policy setRolePolicy(String namespace, String roleName, SetPolicyRequest request)

查询角色 Policy

获取角色的访问策略。

  • 方法定义

    Policy getRolePolicy(String namespace, String roleName)

Taxonomy API

创建 Taxonomy

创建一个新的策略标签分类。

  • 方法定义

    Taxonomy createTaxonomy(String namespace, Taxonomy taxonomy)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    taxonomy

    Taxonomy

    Taxonomy 对象

  • 返回结果

    返回创建好的 Taxonomy 对象。

  • 使用示例

    Taxonomy taxonomy = new Taxonomy();
    taxonomy.setTaxonomyName("sensitive_data");
    taxonomy.setDescription("敏感数据分类");
    taxonomy.setActivatedPolicyTypes(Arrays.asList("FINE_GRAINED_ACCESS_CONTROL"));
    
    Taxonomy created = client.createTaxonomy("123456789", taxonomy);

列出 Taxonomy

列出指定 Namespace 下的所有 Taxonomy。

  • 方法定义

    ListTaxonomiesResponse listTaxonomies(String namespace, Integer pageSize, String pageToken)

查询 Taxonomy

获取指定 Taxonomy 的详细信息。

  • 方法定义

    Taxonomy getTaxonomy(String namespace, String taxonomyId)

更新 Taxonomy

更新指定 Taxonomy 的属性。

  • 方法定义

    Taxonomy updateTaxonomy(String namespace, String taxonomyId, Taxonomy taxonomy, String updateMask)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    taxonomyId

    string

    Taxonomy ID

    taxonomy

    Taxonomy

    包含更新内容的 Taxonomy 对象

    updateMask

    string

    指定更新字段,如"description, activatedPolicyTypes"

删除 Taxonomy

级联删除 taxonomy 下所有的 policy tags、配置的 data policies,以及表列的绑定关系。

  • 方法定义

    HttpResponse deleteTaxonomy(String namespace, String taxonomyId)

设置 Taxonomy Policy

设置 Taxonomy 的访问策略。

  • 方法定义

    Policy setTaxonomyPolicy(String namespace, String taxonomyId, SetPolicyRequest request)

查询 Taxonomy Policy

获取 Taxonomy 的访问策略。

  • 方法定义

    Policy getTaxonomyPolicy(String namespace, String taxonomyId)

PolicyTag API

创建 PolicyTag

在指定 Taxonomy 下创建一个新的策略标签。

  • 方法定义

    PolicyTag createPolicyTag(String namespace, String taxonomyId, PolicyTag policyTag)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    taxonomyId

    string

    Taxonomy ID

    policyTag

    PolicyTag

    PolicyTag 对象

  • 返回结果

    返回创建好的 PolicyTag 对象。

  • 使用示例

    PolicyTag tag = new PolicyTag();
    tag.setPolicyTagName("phone_number");
    tag.setDescription("手机号码脱敏标签");
    
    PolicyTag created = client.createPolicyTag("123456789", "taxonomy_id_123", tag);

列出 PolicyTag

列出指定 Taxonomy 下的所有 PolicyTag。

  • 方法定义

    ListPolicyTagsResponse listPolicyTags(
        String namespace, 
        String taxonomyId, 
        Integer pageSize, 
        String pageToken
    )

查询 PolicyTag

获取指定 PolicyTag 的详细信息。

  • 方法定义

    PolicyTag getPolicyTag(String namespace, String taxonomyId, String policyTagId)

更新 PolicyTag

更新指定 PolicyTag 的属性。

  • 方法定义

    PolicyTag updatePolicyTag(
        String namespace, 
        String taxonomyId, 
        String policyTagId, 
        PolicyTag policyTag, 
        String updateMask
    )
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    taxonomyId

    string

    Taxonomy ID

    policyTagId

    string

    PolicyTag ID

    policyTag

    PolicyTag

    包含更新内容的 PolicyTag 对象

    updateMask

    string

    指定更新字段,目前仅支持更新 description 字段

删除 PolicyTag

删除 policy tag,并且递归删除:policy tag 所有子节点、policy tag 上设置的所有 data policy(包括子节点)、表上的 policy tag 绑定关系(包括子节点)。

  • 方法定义

    HttpResponse deletePolicyTag(String namespace, String taxonomyId, String policyTagId)

设置 PolicyTag Policy

设置 PolicyTag 的访问策略。

  • 方法定义

    Policy setPolicyTagPolicy(String namespace, String taxonomyId, String policyTagId, SetPolicyRequest request)

查询 PolicyTag Policy

获取 PolicyTag 的访问策略。

  • 方法定义

    Policy getPolicyTagPolicy(String namespace, String taxonomyId, String policyTagId)

DataPolicy API

创建 DataPolicy

创建一个新的数据策略(脱敏规则)。

  • 方法定义

    DataPolicy createDataPolicy(String namespace, DataPolicy dataPolicy)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    dataPolicy

    DataPolicy

    DataPolicy 对象

  • 返回结果

    返回创建好的 DataPolicy 对象。

  • 使用示例

    // 构造脱敏规则
    DataMaskingPolicy maskingPolicy = new DataMaskingPolicy();
    maskingPolicy.setPredefinedExpression("STRING_MASKED_BA");
    
    DataPolicy policy = new DataPolicy();
    policy.setDataPolicyName("phone_masking");
    policy.setPolicyTag("namespaces/123456789/taxonomies/tid_123/policyTags/ptid_456");
    policy.setDataPolicyType("DATA_MASKING_POLICY");
    policy.setDataMaskingPolicy(maskingPolicy);
    
    DataPolicy created = client.createDataPolicy("123456789", policy);

列出 DataPolicy

列出指定 Namespace 下的所有 DataPolicy。

  • 方法定义

    ListDataPoliciesResponse listDataPolicies(String namespace, Integer pageSize, String pageToken)

查询 DataPolicy

获取指定 DataPolicy 的详细信息。

  • 方法定义

    DataPolicy getDataPolicy(String namespace, String dataPolicyName)

删除 DataPolicy

删除指定的 DataPolicy。

  • 方法定义

    HttpResponse deleteDataPolicy(String namespace, String dataPolicyName)

设置 DataPolicy Policy

设置 DataPolicy 的访问策略。

  • 方法定义

    Policy setDataPolicyPolicy(String namespace, String dataPolicyName, SetPolicyRequest request)

查询 DataPolicy Policy

获取 DataPolicy 的访问策略。

  • 方法定义

    Policy getDataPolicyPolicy(String namespace, String dataPolicyName)

DataScan API

创建 DataScan

创建一个新的元数据爬取任务。

  • 方法定义

    DataScan createDataScan(String namespace, DataScan dataScan)
  • 请求参数

    参数

    类型

    必填

    说明

    namespace

    string

    Namespace ID

    dataScan

    DataScan

    DataScan 对象

  • 返回结果

    返回创建好的 DataScan 对象。

  • 使用示例

    // 构造爬取任务
    DataScanSource source = new DataScanSource();
    source.setLocation("oss://my-bucket/my-path/");
    source.setConnection("my_oss_connection");
    
    DataScanTarget target = new DataScanTarget();
    target.setProject("my_project");
    target.setSchema("default");
    target.setNamePrefix("auto_");
    
    DataScanProperties properties = new DataScanProperties();
    properties.setFormatFilter("AUTO");
    properties.setScanMode("SAMPLE");
    properties.setAutoCommit(true);
    
    DataScan dataScan = new DataScan();
    dataScan.setScanName("my_oss_scan");
    dataScan.setType("TABLE_DISCOVERY");
    dataScan.setDescription("爬取 OSS 元数据");
    dataScan.setSource(source);
    dataScan.setTarget(target);
    dataScan.setProperties(properties);
    dataScan.setSchedulerMode("MANUAL");
    
    DataScan created = client.createDataScan("123456789", dataScan);

列出 DataScan

列出指定 Namespace 下的所有 DataScan。

  • 方法定义

    ListDataScansResponse listDataScans(String namespace, Integer pageSize, String pageToken)

查询 DataScan

获取指定 DataScan 的详细信息。

  • 方法定义

    DataScan getDataScan(String namespace, String dataScanName)

更新 DataScan

更新指定 DataScan 的属性。

  • 方法定义

    DataScan updateDataScan(String namespace, DataScan dataScan, String updateMask)

删除 DataScan

删除指定的 DataScan。

  • 方法定义

    HttpResponse deleteDataScan(String namespace, String dataScanName)

触发 DataScan

手动触发一次 DataScan 爬取任务。

  • 方法定义

    HttpResponse triggerDataScan(String namespace, String dataScanName)
  • 使用示例

    HttpResponse response = client.triggerDataScan("123456789", "my_oss_scan");
    System.out.println("Triggered: " + response.getStatusCode());

列出 DataScan 作业

列出指定 DataScan 的爬取作业历史。

  • 方法定义

    ListDataScanJobsResponse listDataScanJobs(
        String namespace, 
        String dataScanName, 
        Integer pageSize, 
        String pageToken
    )
  • 返回结果

    {
      "scanJobs": [ScanJob],
      "nextPageToken": "string"
    }
  • ScanJob 模型

    字段

    类型

    说明

    jobId

    string

    Job ID

    namespaceId

    string

    作业所属的 namespace

    dataScanId

    string

    系统自动生成的 dataScan ID

    dataScanName

    string

    所属爬取任务名称

    triggeredBy

    string

    触发此次爬取作业的人,定时触发则为 scheduler

    startTime

    int64

    爬取作业开始时间,UTC timestamp

    endTime

    int64

    爬取作业结束时间,UTC timestamp

    status

    string

    爬取作业状态:Created/Running/Terminated/Failed

    statusDetail

    string

    爬取作业状态详细信息,如报错信息

    ddl

    string

    爬取作业返回的需要提交的 DDL 信息

    stats

    string

    爬取作业返回的 stats 信息,JSON 格式

Model API

创建模型

创建一个新的机器学习模型。

  • 方法定义

    Model createModel(String projectId, String schemaName, Model model)
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schemaName

    string

    Schema 名

    model

    Model

    Model 对象

  • 返回结果

    返回创建好的 Model 对象。

  • 使用示例

    Model model = new Model();
    model.setModelName("my_llm_model");
    model.setVersionName("v1");
    model.setDefaultVersion("v1");
    model.setDescription("我的大语言模型");
    model.setSourceType("IMPORT");
    model.setModelType("LLM");
    model.setPath("oss://my-bucket/models/my_llm/");
    model.setTasks(Arrays.asList("text-generation", "chat"));
    
    Model created = client.createModel("my_project", "default", model);

列出模型

列出指定 Schema 下的所有模型。

  • 方法定义

    ListModelsResponse listModels(
        String projectId, 
        String schemaName, 
        Integer pageSize, 
        String pageToken
    )

查询模型

获取指定模型的详细信息。

  • 方法定义

    Model getModel(String projectId, String schemaName, String modelName, String versionName)
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schemaName

    string

    Schema 名

    modelName

    string

    模型名

    versionName

    string

    版本名,不指定则查询模型元数据(不含版本)

更新模型

更新指定模型的属性。

  • 方法定义

    Model updateModel(
        String projectId, 
        String schemaName, 
        String modelName, 
        Model model, 
        String updateMask, 
        String versionName
    )

删除模型

删除指定的模型(包含所有版本)。

  • 方法定义

    HttpResponse deleteModel(String projectId, String schemaName, String modelName)

创建模型版本

为指定模型创建新版本。

  • 方法定义

    Model createModelVersion(String projectId, String schemaName, String modelName, Model model)
  • 使用示例

    Model version = new Model();
    version.setModelName("my_llm_model");
    version.setVersionName("v2");
    version.setVersionDescription("更新后的模型版本");
    version.setPath("oss://my-bucket/models/my_llm_v2/");
    version.setTasks(Arrays.asList("text-generation", "chat"));
    
    Model createdVersion = client.createModelVersion("my_project", "default", "my_llm_model", version);

删除模型版本

删除指定的模型版本。

  • 方法定义

    HttpResponse deleteModelVersion(
        String projectId, 
        String schemaName, 
        String modelName, 
        String versionName
    )

列出模型版本

列出指定模型的所有版本。

  • 方法定义

    ListModelVersionsResponse listModelVersions(
        String projectId, 
        String schemaName, 
        String modelName, 
        Integer pageSize, 
        String pageToken
    )

设置模型 Policy

设置模型的访问策略。

  • 方法定义

    Policy setModelPolicy(String projectId, String schemaName, String modelName, SetPolicyRequest request)

查询模型 Policy

获取模型的访问策略。

  • 方法定义

    Policy getModelPolicy(String projectId, String schemaName, String modelName)

Project API

查询 Project

获取指定 Project 的详细信息。

  • 方法定义

    Project getProject(String projectId)
  • 使用示例

    Project project = client.getProject("my_project");
    System.out.println("Project owner: " + project.getOwner());
    System.out.println("Schema enabled: " + project.getSchemaEnabled());
    System.out.println("Region: " + project.getRegion());

Schema API

创建 Schema

在指定 Project 下创建一个新的 Schema。

  • 方法定义

    Schema createSchema(String projectId, Schema schema)
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schema

    Schema

    Schema 对象

  • 返回结果

    返回创建好的 Schema 对象。

  • 使用示例

    Schema schema = new Schema();
    schema.setSchemaName("my_schema");
    schema.setDescription("我的自定义 Schema");
    
    Schema created = client.createSchema("my_project", schema);

列出 Schema

列出指定 Project 下的所有 Schema。

  • 方法定义

    ListSchemasResponse listSchemas(String projectId, Integer pageSize, String pageToken)

查询 Schema

获取指定 Schema 的详细信息。

  • 方法定义

    Schema getSchema(String projectId, String schemaName)

更新 Schema

更新指定 Schema 的属性。

  • 方法定义

    Schema updateSchema(String projectId, String schemaName, String updateMask, Schema schema)
  • 请求参数

    参数

    类型

    必填

    说明

    projectId

    string

    Project ID

    schemaName

    string

    Schema 名

    updateMask

    string

    指定更新字段,目前仅支持更新 description 和 owner 字段,且每次只能更新一个字段

    schema

    Schema

    包含更新内容的 Schema 对象

删除 Schema

删除指定的 Schema。

  • 方法定义

    HttpResponse deleteSchema(String projectId, String schemaName)

设置 Schema Policy

设置 Schema 的访问策略。

  • 方法定义

    Policy setSchemaPolicy(String projectId, String schemaName, SetPolicyRequest request)

查询 Schema Policy

获取 Schema 的访问策略。

  • 方法定义

    Policy getSchemaPolicy(String projectId, String schemaName)

Search API

搜索实体

搜索指定 namespace 下的各种实体。

  • 方法定义

    SearchResponse search(
        String namespaceId, 
        String query, 
        Integer pageSize, 
        String pageToken, 
        String orderBy
    )
  • 请求参数

    参数

    类型

    必填

    说明

    namespaceId

    string

    主账号 ID,在该主账号范围内执行搜索

    query

    string

    搜索查询串,由 1 个到多个查询条件组成,查询条件之间用逗号 , 分隔

    pageSize

    integer

    每页返回结果条数,必须 > 0,最大 100

    pageToken

    string

    翻页 token

    orderBy

    string

    结果排序方式

  • 查询语法

    • 查询条件列表:

      查询条件

      说明

      name:foo

      将 foo 作为子字符串与实体名称匹配

      description:bar

      将 bar 作为子字符串与实体描述匹配

      type=TABLE

      必选。匹配特定类型的实体。当前支持 TABLE、RESOURCE、SCHEMA

      project=proj

      仅搜索指定单个 project 下的实体。要求调用方拥有该 project 的 SearchProject 权限

      project=(proj1|proj2|proj3)

      搜索多个 project 下的实体(最多 512 个)。要求调用方同时拥有这些 projects 的 SearchProject 权限

      region=region_id

      搜索指定 region 的 project 下的实体

      • project=proj 与 project=(proj1|proj2|proj3) 不能同时存在

      • region=region_id 不能与 project 查询条件同时存在

  • 排序方式(orderBy)

    取值

    说明

    default

    内部存储顺序(默认)

    create_time asc

    创建时间正序

    create_time desc

    创建时间倒序

    last_modified_time asc

    最近修改时间正序

    last_modified_time desc

    最近修改时间倒序

  • 返回结果

    {
      "entries": [SearchResultEntry],
      "nextPageToken": "string"
    }
  • 使用示例

    // 搜索指定 project 下的所有表
    SearchResponse response = client.search(
        "123456789",                            // namespaceId
        "type=TABLE,project=my_project",        // query
        50,                                     // pageSize
        "",                                     // pageToken
        "last_modified_time desc"               // orderBy
    );
    
    if (response.getEntries() != null) {
        for (SearchResultEntry entry : response.getEntries()) {
            System.out.println("Name: " + entry.getDisplayName());
            System.out.println("Type: " + entry.getType());
            System.out.println("Path: " + entry.getName());
        }
    }

使用限制

流量限制

主账号级别限流,每个方法独立控制限流,根据方法请求分类不同具体限制值如下

限制项

限制值

Get 和 GetPolicy 类方法

1500 次 /15 秒

List、Create、Update、Delete 和 SetPolicy 类方法

150 次 / 15 秒

GetProject、 ListTables、 ListPartitions view=StorageDetail/FULL

15 次 / 15 秒

容量限制

限制项

限制值

单主账号 Custom Role 个数

300

单个 Role 内包含的 Permission 个数

3000

单个 Allow Policy 包含的 Principal 个数

1500

单个 Custom Role 总大小(包含 description、roleName 等)

64KB

Policy Tag 限制

限制项

限制值

单表单列绑定 Policy Tag 的个数

1

每个账号 Taxonomy 的个数

40

每个 Taxonomy 中 Policy Tag 的个数

100

Policy Tag Tree 的层数

5

每个 Tag 的 Data Policy 个数

8

分页限制

参数

默认值

最大值

pageSize

100

1000(部分 API 为 100)

命名规范

Connection 命名规范

字段

规范

connectionName

namespace 内唯一,大小写敏感,包含字符 [a-z][A-Z][0-9]_,字节数范围 [3, 32]

Role 命名规范

字段

规范

roleName

namespace 内唯一,大小写敏感,包含字符 [a-z][A-Z][0-9]_,字节数范围 [3, 255]

Taxonomy 命名规范

字段

规范

taxonomyName

namespace 内唯一,大小写敏感,包含字符 [a-z][A-Z][0-9]_,字节数范围 [3, 255]

PolicyTag 命名规范

字段

规范

policyTagName

父 Taxonomy 内唯一,大小写敏感,包含字符 [a-z][A-Z][0-9]_,字节个数范围 [3, 255]

DataPolicy 命名规范

字段

规范

dataPolicyName

在账号级唯一

Model 命名规范

字段

规范

modelName

上级 Schema 内唯一,大小写不敏感,包含字符 [a-z][A-Z][0-9]_,字节个数范围 [3, 255]

versionName

同一 model 范围内唯一,大小写不敏感,包含字符 [a-z][A-Z][0-9]_,字节个数范围 [3, 255]

常见问题

什么是 Namespace ID?

Namespace ID 即阿里云主账号 UID。在调用 Connection、Role、Taxonomy、DataPolicy、DataScan 等 namespace 级别的 API 时,需要传入主账号 UID 作为 namespace 参数。

什么是三层模型?

MaxCompute 支持两种元数据组织方式:

  • 二层模型:Project → Table(传统方式)

  • 三层模型:Project → Schema → Table(新增方式)

通过 Project.schemaEnabled 字段可以判断 Project 是否开启了三层模型。如果开启了三层模型,在调用 Table API 时必须指定 schemaName 参数。

如何使用 Policy Tag 实现列级访问控制?

列级访问控制的完整流程:

  1. 创建 Taxonomy,设置 activatedPolicyTypes 为 FINE_GRAINED_ACCESS_CONTROL。

  2. 在 Taxonomy 下创建 PolicyTag(支持树状层级结构)。

  3. 在表的列 Schema 中为指定列绑定 PolicyTag。

  4. 为 PolicyTag 创建 DataPolicy(定义脱敏规则,可选)。

  5. 通过 Policy 控制哪些用户可以访问绑定了 PolicyTag 的列。

DataScan 的爬取结果如何查看?

DataScan 爬取任务执行后,会生成 ScanJob。通过 listDataScanJobs API 可以查看作业历史。每个 ScanJob 包含:

  • status:作业状态(Created/Running/Terminated/Failed)

  • ddl:爬取返回的需要提交的 DDL 信息

  • stats:爬取返回的统计信息(JSON 格式)

使用 RESTORE 命令恢复被删除的表时,策略标签会一起恢复吗?

不会。表在删除前已经打标好的策略标签,不会随表一起恢复。恢复后需要对表列重新打标。

如何处理翻页?

大多数 List 类型 API 返回 nextPageToken 字段。如果该字段不为空,表示还有下一页。将 nextPageToken 作为下一次请求的 pageToken 参数传入,即可获取下一页数据。

附录

SDK 版本历史

版本

发布日期

说明

v0.2.2

当前版本

术语表

术语

说明

Namespace

命名空间,对应阿里云主账号 UID

Project

MaxCompute 项目

Schema

命名空间(目录),用于三层模型

Table

数据表

Connection

外部数据源连接

Role

自定义角色

Taxonomy

策略标签分类体系

PolicyTag

策略标签,用于实现列级访问控制

DataPolicy

数据策略,定义数据脱敏规则

DataScan

元数据爬取任务

Model

机器学习模型元数据

Policy

访问策略,由一组 Binding 构成

Binding

将角色绑定到一组成员