# 管理OBS数据源
DWS支持以委托方式访问客户OBS上的数据，客户通过创建DWS云服务委托并授予OBS OperateAccess或OBS Administrator权限，然后再创建OBS数据源绑定该委托，便可通过OBS外表的方式访问OBS上的数据。
#### 约束与限制
- OBS数据源仅8.2.0及以上集群版本支持。
- 同一个集群的OBS数据源在创建、修改、删除时是互斥的，不支持同时执行多个操作。
- 默认情况下，只有华为云账号或拥有Security Administrator权限的用户才具备查询委托和创建委托的权限。账号中的IAM用户，默认没有查询委托和创建委托的权限，此时需联系有权限的用户提前创建好授权给DWS具有OBS Administrator权限的委托。
 
#### 创建OBS委托
创建OBS数据源前需要用户提前创建好授权给DWS具有OBS OperateAccess或OBS Administrator权限的委托。
1. 鼠标移动至页面右上角账号，单击**"统一身份认证"**，进入统一身份认证服务页面。
2. 在左侧导航栏单击**"委托"** ，在委托页面右上角单击**"创建委托"** 。
   
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587065732.png "点击放大")
   
   
3. 创建委托时委托类型选择**"云服务"** ，云服务选择**"数据仓库服务 DWS"**。
4. 单击**"完成"** ，在弹窗中单击**"立即授权"** 对委托授予OBS服务的**"OBS OperateAccess"** 或**"OBS Administrator"** 权限。
   
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587065740.png "点击放大")
   
   
5. 单击**"下一步"** ，选择授权资源范围为**"所有资源"** 或需要访问的资源，确认无误后单击**"确定"**提交。
 
#### 创建OBS数据源
已创建好授权给DWS具有OBS OperateAccess权限的委托。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 选择**"集群 \> 集群列表"**。
3. 在集群列表，单击指定集群的名称，进入**"集群详情"**页面。
4. 在上侧导航栏单击**"** **数据源"** ，切换至**"OBS数据源"**页签。
5. 在OBS数据源页面，单击**"创建OBS数据源连接"** ，填写配置参数。
   
   
   
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587225648.png "点击放大")
   表1OBS数据源连接参数说明 
   | 参数名称   | 说明                                                                                                   |
   |:---|:---|
   | 数据源名称 | 要创建的OBS数据源连接名称，由用户自定义。 该数据源名称作为后续创建OBS外表语句中指定的server名称。 |
   | OBS委托 | 当前用户授权给DWS服务的具有OBS OperateAccess权限的委托。                                                                 |
   | 数据库  | 要创建的OBS数据源连接所在的数据库。                                                                                 |
   | 描述    | 要创建的OBS数据源连接的描述信息。                                                                                  |
      
   
   
6. 确认无误后，单击**"确认"**，提交创建操作，创建过程大约需要10秒钟左右。
 
#### 更新OBS数据源配置
当OBS数据源连接创建之后，DWS会定期更新数据源使用的临时委托授权信息，如果24小时内自动更新均失败的话，数据源连接将不可用，此时可以手动在控制台临时进行一次手动更新操作。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 选择**"** **集群 \> 集群列表"**。
3. 在集群列表，单击指定集群的名称，进入**"集群详情"**页面。
4. 在上侧导航栏单击**"数据源"** ，切换至**"OBS数据源"**页签。
5. 在**"OBS数据源"** 列表中选择要更新的OBS数据源，单击所在行**"操作"** 列的**"更新配置"**。
6. 确认无误后，单击**"确定"**，提交更新操作，更新过程大概需要10秒钟左右。
 
#### 修改OBS数据源委托
如果创建OBS数据源时绑定的委托不能满足使用需要，可以使用管理委托功能更换其他委托。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 选择**"** **集群 \> 集群列表"**。
3. 在集群列表，单击指定集群的名称，进入**"集群详情"**页面。
4. 在上侧导航栏单击**"数据源"** ，切换至**"OBS数据源"**页签。
5. 在**"OBS数据源"** 列表中选择要修改的OBS数据源，单击所在行**"操作"** 列的**"管理委托"**，在弹窗中选择新的委托。
6. 确认无误后，单击**"确认"**，提交修改委托操作，修改过程大概需要10秒钟左右。
 
#### 删除OBS数据源
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 选择**"** **集群 \> 集群列表"**。
3. 在集群列表，单击指定集群的名称，进入**"集群详情"**页面。
4. 在上侧导航栏单击**"数据源"** ，切换至**"OBS数据源"**页签。
5. 在**"OBS数据源"** 列表中选择要删除的OBS数据源，单击所在行**"操作"** 列的**"删除"**。
6. 弹出对话框，确认无误后输入**"DELETE"** 或者单击**"一键输入"** ，单击**"确定"**提交删除操作，删除操作过程大概需要10秒钟左右。
 
#### 使用OBS数据源
DWS使用外表方式访问OBS上的数据。委托方式与非委托方式，在外表上体现出来的差异仅在于指定了不同的SERVER。
对于非委托方式，控制台提供的SERVER包含access_key和secret_access_key参数，分别对应OBS访问协议的AK和SK值。
对于委托方式，控制台提供的SERVER包含access_key、secret_access_key和security_token参数，分别对应OBS访问协议的临时AK、临时SK和统一身份认证服务IAM中临时安全凭证的SecurityToken值。
在创建好OBS委托和OBS数据源之后，用户从控制台获得相应的包含委托信息的SERVER，假设OBS数据源名称为obs_server。用户创建和使用外表与非委托方式无差异。关于如何使用OBS数据源，具体请参见[从OBS导入数据](https://support.huaweicloud.com/migration-dws/dws_15_0005.html)。
如下示例为某普通用户jim通过外表读取OBS上的数据。
1. 参见以上步骤创建OBS数据源，名称为obs_server。
2. 使用系统管理员dbadmin连接数据库，创建普通用户，并授权该普通用户使用OBS server和OBS外表权限。 其中{Password}替换为用户实际密码，obs_server替换成实际的OBS数据源名称。
   ```
   CREATE USER jim PASSWORD '{Password}';
   ALTER USER jim USEFT;
   GRANT USAGE ON FOREIGN SERVER obs_server TO jim;
   ```
   
3. *使用普通用户jim连接数据库，* 建立OBS外表customer_address，不包含分区列。
   以下命令中，obs_server替换为上面实际创建的OBS数据源名称。目录/user/obs/region_orc11_64stripe1/替换为实际数据文件存放的OBS目录，user表示用户的OBS桶名称。
   ```
   CREATE FOREIGN TABLE customer_address
   (
       ca_address_sk             integer               not null,
       ca_address_id             char(16)              not null,
       ca_street_number          char(10)                      ,   
       ca_street_name            varchar(60)                   ,   
       ca_street_type            char(15)                      ,   
       ca_suite_number           char(10)                      ,   
       ca_city                   varchar(60)                   ,   
       ca_county                 varchar(30)                   ,   
       ca_state                  char(2)                       ,   
       ca_zip                    char(10)                      ,   
       ca_country                varchar(20)                   ,   
       ca_gmt_offset             decimal(36,33)                  ,   
       ca_location_type          char(20)    
   ) 
   SERVER obs_server OPTIONS (              
       FOLDERNAME '/user/obs/region_orc11_64stripe1/',
       FORMAT 'ORC',
       ENCODING 'utf8',
       TOTALROWS  '20'
   )
   DISTRIBUTE BY roundrobin;
   ```
   
4. 通过外表查询OBS上的数据。
   ```
   SELECT COUNT(*) FROM customer_address;
   count
   -------
   20
   (1 row)
   ```
   
 
