产品版本: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 操作所需的权限如下表所示:
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>" }
}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"
}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"
}Role 模型
Role 用于定义自定义角色。
{
"name": "string",
"roleName": "string",
"description": "string",
"includedPermissions": ["string"],
"etag": "string",
"deleted": false
}Taxonomy 模型
Taxonomy 用于管理策略标签(Policy Tag)的分类体系。
{
"name": "string",
"taxonomyName": "string",
"description": "string",
"activatedPolicyTypes": ["enum(PolicyType)"],
"policyTagCount": 0,
"createTime": "string (int64 format)",
"lastModifiedTime": "string (int64 format)"
}PolicyTag 模型
PolicyTag 是挂载在 Taxonomy 下的策略标签,用于实现列级访问控制。
{
"name": "string",
"policyTagName": "string",
"description": "string",
"parentPolicyTag": "string",
"childPolicyTags": ["string"]
}DataPolicy 模型
DataPolicy 用于定义数据脱敏规则。
{
"name": "string",
"dataPolicyName": "string",
"policyTag": "string",
"dataPolicyType": "enum(DataPolicyType)",
"dataMaskingPolicy": { "object(DataMaskingPolicy)" }
}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
}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"]
}Schema 模型
{
"name": "string",
"schemaName": "string",
"description": "string",
"type": "enum(SchemaType)",
"owner": "string",
"externalSchemaConfiguration": { "object(ExternalSchemaConfiguration)" }
}Project 模型
{
"name": "string",
"projectId": "string",
"owner": "string",
"description": "string",
"createTime": "string (int64 format)",
"lastModifiedTime": "string (int64 format)",
"schemaEnabled": "boolean",
"region": "string"
}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"
}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 实现列级访问控制?
列级访问控制的完整流程:
创建 Taxonomy,设置 activatedPolicyTypes 为 FINE_GRAINED_ACCESS_CONTROL。
在 Taxonomy 下创建 PolicyTag(支持树状层级结构)。
在表的列 Schema 中为指定列绑定 PolicyTag。
为 PolicyTag 创建 DataPolicy(定义脱敏规则,可选)。
通过 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 | 将角色绑定到一组成员 |