管理OBS数据源
GaussDB(DWS)支持以委托方式访问客户OBS上的数据,客户通过创建DWS云服务委托并授予OBS OperateAccess或OBS Administrator权限,然后在创建OBS数据源绑定该委托,便可通过OBS外表的方式访问OBS上的数据。
- 该特性仅8.2.0及以上集群版本支持。
- 同一个集群的OBS数据源在创建、修改、删除时是互斥的,不支持同时执行多个操作。
创建OBS委托
操作场景
创建OBS数据源前需要用户提前创建好授权给GaussDB(DWS)具有OBS OperateAccess或OBS Administrator权限的委托。
操作步骤
- 鼠标移动至页面右上角账号,单击“统一身份认证”,进入统一身份认证服务页面。
- 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”。
- 创建委托时委托类型选择“云服务”,云服务选择“DWS”。
- 单击“下一步”,对委托授予OBS服务的“OBS OperateAccess”或“OBS Administrator”权限。
- 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。
创建OBS数据源
前提条件
已创建好授权给GaussDB(DWS)具有OBS OperateAccess权限的委托。
操作步骤
- 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群”。
- 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
- 在OBS数据源页面,单击“创建OBS数据源连接”,填写配置参数。
表1 OBS数据源连接参数说明 参数名称
说明
数据源名称
要创建的OBS数据源连接名称,由用户自定义。
该数据源名称作为后续创建OBS外表语句中指定的server名称。
OBS委托
当前用户授权给DWS服务的具有OBS OperateAccess权限的委托。
数据库
要创建的OBS数据源连接所在的数据库。
描述
要创建的OBS数据源连接的描述信息。
- 确认无误后,单击“确认”按钮,提交创建操作,创建过程大约需要10秒钟左右。
更新OBS数据源配置
操作场景
当OBS数据源连接创建之后,GaussDB(DWS)会定期更新数据源使用的临时委托授权信息,如果24小时内自动更新均失败的话,数据源连接将不可用,此时可以手动在控制台临时进行一次手动更新操作。
操作步骤
- 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群”。
- 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
- 在“OBS数据源”列表中选择要更新的OBS数据源,单击所在行“操作”列的“更新配置”按钮。
- 确认无误后,单击“确认”按钮,提交更新操作,更新过程大概需要10秒钟左右。
修改OBS数据源委托
操作场景
如果创建OBS数据源时绑定的委托不能满足使用需要,可以使用管理委托功能更换其他委托。
操作步骤
- 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群”。
- 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
- 在“OBS数据源”列表中选择要修改的OBS数据源,单击所在行“操作”列的“管理委托”按钮,在弹窗中选择新的委托。
- 确认无误后,单击“确认”按钮,提交修改委托操作,修改过程大概需要10秒钟左右。
删除OBS数据源
- 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群”。
- 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
- 在“OBS数据源”列表中选择要删除的OBS数据源,单击所在行“操作”列的“删除”按钮。
- 确认无误后,单击“确认”按钮,提交删除操作,删除操作过程大概需要10秒钟左右。
使用OBS数据源
GaussDB(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导入数据。
如下示例为某普通用户jim通过外表读取OBS上的数据。
- 参见以上步骤创建OBS数据源,名称为obs_server。
- 使用系统管理员dbadmin连接数据库,创建普通用户,并授权该普通用户使用OBS server和OBS外表权限。 其中{Password}替换为用户实际密码,obs_server替换成实际的OBS数据源名称。
1 2 3
CREATE USER jim PASSWORD '{Password}'; ALTER USER jim USEFT; GRANT USAGE ON FOREIGN SERVER obs_server TO jim;
- 使用普通用户jim连接数据库,建立OBS外表customer_address,不包含分区列。
以下命令中,obs_server替换为上面实际创建的OBS数据源名称。目录/user/obs/region_orc11_64stripe1/替换为实际数据文件存放的OBS目录,user表示用户的OBS桶名称。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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;
- 通过外表查询OBS上的数据。
1 2 3 4 5
SELECT COUNT(*) FROM customer_address; count ------- 20 (1row)