|
| 1 | +--- |
| 2 | +title: Project |
| 3 | +sidebar_position: 2 |
| 4 | +--- |
| 5 | + |
| 6 | +# 项目管理 |
| 7 | + |
| 8 | +## 概览 |
| 9 | +项目管理包含两个核心类:`Projects`(项目集合管理器)和`Project`(项目实体)。 |
| 10 | +`Projects`类提供项目级的增删改查操作,`Project`类封装单个项目的属性和行为。二者共同构成项目管理的正交体系,支持托管项目和外部数据源项目的统一管理。 |
| 11 | + |
| 12 | +## Projects 类 |
| 13 | +作为项目集合的入口控制器,负责: |
| 14 | +1. 项目生命周期管理(创建/删除/更新) |
| 15 | +2. 项目查询与过滤 |
| 16 | +3. 跨项目操作协调 |
| 17 | +4. 资源分配调度 |
| 18 | + |
| 19 | +### 方法 |
| 20 | + |
| 21 | +#### 获取项目 |
| 22 | +```java |
| 23 | +public Project get() throws OdpsException |
| 24 | +public Project get(String projectName) throws OdpsException |
| 25 | +``` |
| 26 | + |
| 27 | +- **提示** |
| 28 | + `Project` 对象实现了 `LazyLoad` 接口,在首次调用时加载项目属性,调用 get 方法不会加载完整项目属性。 |
| 29 | + 高频调用建议配合缓存机制,根据`endpoint`和`projectName`缓存`Project`对象,并按需通过`Project.reload`方法手动重新加载。 |
| 30 | + |
| 31 | +#### 判断项目是否存在 |
| 32 | +```java |
| 33 | +public boolean exists(String projectName) throws OdpsException |
| 34 | +``` |
| 35 | + |
| 36 | +##### 遍历项目 |
| 37 | + |
| 38 | +#### 快捷遍历方法 |
| 39 | +```java |
| 40 | +// 按Owner遍历 |
| 41 | +public Iterator<Project> iterator(String owner) |
| 42 | + |
| 43 | +// 获取Iterable接口(支持foreach语法) |
| 44 | +public Iterable<Project> iterable(String owner) |
| 45 | +``` |
| 46 | + |
| 47 | +##### 过滤查询接口 |
| 48 | +```java |
| 49 | +public Iterator<Project> iteratorByFilter(ProjectFilter filter) |
| 50 | +``` |
| 51 | +通过`ProjectFilter`实现多条件过滤查询 |
| 52 | + |
| 53 | +**过滤条件参数** |
| 54 | +```java |
| 55 | +public class ProjectFilter { |
| 56 | + // 基础过滤条件 |
| 57 | + private String owner; // 项目所有者(精确匹配) |
| 58 | + private String name; // 项目名称前缀匹配 |
| 59 | + private String user; // 项目使用者 |
| 60 | + private String groupName; // 项目组名称 |
| 61 | + private String tenantId; // 租户ID |
| 62 | + private String regionId; // 地域ID |
| 63 | + |
| 64 | + // 高级过滤条件 |
| 65 | + private String quotaNickname; // 配额别名 |
| 66 | + private String quotaType; // 配额类型 |
| 67 | + private String quotaName; // 配额名称 |
| 68 | + private Boolean enableDr; // 是否开启存储容灾 |
| 69 | +} |
| 70 | +``` |
| 71 | + |
| 72 | + |
| 73 | + |
| 74 | +#### 创建项目 |
| 75 | +```java |
| 76 | +public void create(CreateProjectParam param) throws OdpsException |
| 77 | +``` |
| 78 | + |
| 79 | +**参数构建器方法** |
| 80 | + |
| 81 | +| 方法 | 说明 | 是否必填 | |
| 82 | +|----------------------------------|--------------|------| |
| 83 | +| `name(String)` | 项目名称(2-64字符) | ✅ | |
| 84 | +| `owner(String)` | 项目所有者 | ✅ | |
| 85 | +| `defaultCluster(String)` | 默认计算集群 | ✅ | |
| 86 | +| `comment(String)` | 项目描述 | ❌ | |
| 87 | +| `superAdmin(String)` | 超级管理员 | ❌ | |
| 88 | +| `properties(Map)` | 项目属性(覆盖设置) | ❌ | |
| 89 | +| `appendProperty(String, String)` | 追加属性 | ❌ | |
| 90 | +| `groupName(String)` | 项目组名称 | ❌ | |
| 91 | +| `defaultQuotaId(String)` | 默认计算配额ID | ❌ | |
| 92 | +| `defaultCtrlService(String)` | 默认控制服务地址 | ❌ | |
| 93 | + |
| 94 | + |
| 95 | +#### 创建外部项目 |
| 96 | +```java |
| 97 | +public void createExternalProject(String projectName, String comment, |
| 98 | + String refProjectName, |
| 99 | + Project.ExternalProjectProperties extProperties) |
| 100 | +``` |
| 101 | +创建MC外部项目,实现异构数据源联邦查询,将Hive等外部系统映射到MC中。 |
| 102 | + |
| 103 | +- **使用示例** |
| 104 | + ```java |
| 105 | + Project.ExternalProjectProperties extProps = new Project.ExternalProjectProperties("hive"); |
| 106 | + // required properties for 'hive' source |
| 107 | + extProps.addProperty("hms.ips", "10.0.0.1:5300,10.0.0.2:5300"); |
| 108 | + extProps.addProperty("hive.database.name", "odps"); |
| 109 | + extProps.addProperty("hdfs.namenode.ips", "192.168.0.12:3829,192.168.0.5:3389"); |
| 110 | + // network properties |
| 111 | + extProps.addNetworkProperty("odps.external.net.vpc", "false") |
| 112 | + |
| 113 | + odps.projects().createExternalProject(projectName, comment, refProjectName, extProps); |
| 114 | + ``` |
| 115 | + |
| 116 | +#### 删除操作 |
| 117 | +```java |
| 118 | +public Instance delete(String projectName, boolean isImmediate) |
| 119 | +``` |
| 120 | +- **删除模式** |
| 121 | + | 模式 | 资源回收 | 可恢复性 | 返回类型 | |
| 122 | + |------|---------|----------|---------| |
| 123 | + | 逻辑删除 | 延迟执行 | 支持回收站恢复 | null | |
| 124 | + | 物理删除 | 立即释放 | 不可逆 | 操作实例 | |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +## Project 类 |
| 131 | + |
| 132 | +Project 类负责对具体某个项目进行属性访问和操作 |
| 133 | + |
| 134 | +### 基础属性访问 |
| 135 | + |
| 136 | +#### 获取项目类型 |
| 137 | +```java |
| 138 | +public ProjectType getType(); |
| 139 | +``` |
| 140 | +**说明**:返回项目的存储类型,用于区分托管项目与外部项目 |
| 141 | +**枚举定义**: |
| 142 | +```java |
| 143 | +public enum ProjectType { |
| 144 | + MANAGED, // 原生存储项目(默认类型) |
| 145 | + EXTERNAL, // 旧版外部存储(兼容模式) |
| 146 | + EXTERNAL_V2 // 新版外部存储(推荐) |
| 147 | +} |
| 148 | +``` |
| 149 | + |
| 150 | +#### 获取项目描述 |
| 151 | +```java |
| 152 | +public String getComment(); |
| 153 | +``` |
| 154 | +**说明**:返回项目创建时设置的描述信息,未设置时返回空字符串 |
| 155 | + |
| 156 | +#### 获取项目所有者 |
| 157 | +```java |
| 158 | +public String getOwner(); |
| 159 | +``` |
| 160 | +**说明**:返回项目创建者账号(主账号或RAM子账号) |
| 161 | + |
| 162 | +#### 获取所属地域 |
| 163 | +```java |
| 164 | +public String getRegionId(); |
| 165 | +``` |
| 166 | +**说明**:返回项目部署的阿里云地域ID(如`cn-shanghai`) |
| 167 | + |
| 168 | +#### 获取创建时间 |
| 169 | +```java |
| 170 | +public Date getCreatedTime(); |
| 171 | +``` |
| 172 | +**说明**:返回项目创建时间的`Date`对象 |
| 173 | + |
| 174 | +#### 获取最后修改时间 |
| 175 | +```java |
| 176 | +public Date getLastModifiedTime(); |
| 177 | +``` |
| 178 | +**说明**:返回项目属性最后一次修改的时间 |
| 179 | + |
| 180 | +#### 获取项目状态 |
| 181 | +```java |
| 182 | +public Status getStatus(); |
| 183 | +``` |
| 184 | +**说明**:返回项目当前运行状态 |
| 185 | +**状态枚举**: |
| 186 | +```java |
| 187 | +public enum Status { |
| 188 | + AVAILABLE, // 正常可用 |
| 189 | + READONLY, // 只读模式(通常由欠费触发) |
| 190 | + DELETING, // 删除流程中 |
| 191 | + FROZEN, // 被系统冻结 |
| 192 | + UNKOWN // 状态未知(需调用reload()刷新) |
| 193 | +} |
| 194 | +``` |
| 195 | + |
| 196 | + |
| 197 | +### 配置管理 |
| 198 | + |
| 199 | +#### 获取显式配置属性 |
| 200 | +```java |
| 201 | +public Map<String, String> getProperties(); |
| 202 | +``` |
| 203 | +**说明**:返回项目创建/更新时显式设置的属性集合(不包含继承配置) |
| 204 | + |
| 205 | +#### 获取全部配置属性 |
| 206 | +```java |
| 207 | +public Map<String, String> getAllProperties(); |
| 208 | +``` |
| 209 | +**说明**:包含显式配置+从项目组(Group)继承的属性 |
| 210 | + |
| 211 | +#### 获取指定配置 |
| 212 | +```java |
| 213 | +public String getProperty(String key); |
| 214 | +``` |
| 215 | +**参数**:`key` - 配置项名称(如`odps.sql.type.system.odps2`) |
| 216 | + |
| 217 | +#### 获取扩展属性 |
| 218 | +```java |
| 219 | +public Map<String, String> getExtendedProperties(); |
| 220 | +``` |
| 221 | +**说明**:返回项目扩展配置信息(非核心业务属性) |
| 222 | + |
| 223 | + |
| 224 | +### 存储信息 |
| 225 | + |
| 226 | +#### 获取分层存储详情 |
| 227 | +```java |
| 228 | +public StorageTierInfo getStorageTierInfo(); |
| 229 | +``` |
| 230 | +**说明**:需先调用`reload()`刷新数据,否则可能返回过期信息 |
| 231 | +**返回结构**: |
| 232 | +```java |
| 233 | +public class StorageTierInfo { |
| 234 | + public String storageTier; // 当前存储策略(STANDARD/LOWFREQUENCY/LONGTERM) |
| 235 | + public Date storageLastModifiedTime;// 最后统计时间 |
| 236 | + public Map<String, Long> storageSize; // 各层级存储量(单位:Byte) |
| 237 | +} |
| 238 | +``` |
| 239 | + |
| 240 | +### 安全相关操作 |
| 241 | +如授权操作,查询权限等,详情查看[权限控制](../core-concept/permission/index.mdx) |
| 242 | +```java |
| 243 | +public SecurityManager getSecurityManager() |
| 244 | +``` |
| 245 | + |
| 246 | +### 网络接入 |
| 247 | + |
| 248 | +#### 获取Tunnel接入点 |
| 249 | +```java |
| 250 | +public String getTunnelEndpoint(String quotaName); |
| 251 | +``` |
| 252 | +**参数说明**: |
| 253 | +- `quotaName`:计算配额名称,传`null`时使用项目默认配额 |
0 commit comments