產品版本: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"));
// 設定 MaxCompute 標準存取點,SDK 自動路由擷取 CatalogAPI endpoint,請根據實際 Region 替換
config.setOdpsEndpoint("service.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'),
# 設定 MaxCompute 標準存取點,SDK 自動路由擷取 CatalogAPI endpoint,請根據實際 Region 替換
odps_endpoint='service.cn-shanghai.maxcompute.aliyun.com'
)
# 建立用戶端
client = Client(config)
# 使用 client 調用 APICatalogAPI SDK 支援以下兩種存取點配置方式:
配置方式 | 參數 | 存取點格式 | 說明 |
通過標準存取點自動路由(推薦) | Python: |
| SDK 自動通過路由 API 擷取 CatalogAPI 存取點 |
直接指定 CatalogAPI 存取點 | Python: |
| 直接連接 CatalogAPI 服務 |
調用樣本:列出表
以下樣本示範如何列出指定 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,首次調用傳Null 字元串
);
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(); // role 使用完整資源路徑格式:namespaces/{namespaceId}/roles/{roleName} binding.setRole("namespaces/123456789/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 | 將角色綁定到一群組成員 |