更新时间:2024-10-08 GMT+08:00

管理OBS数据源

GaussDB(DWS)支持以委托方式访问客户OBS上的数据,客户通过创建DWS云服务委托并授予OBS OperateAccess或OBS Administrator权限,然后在创建OBS数据源绑定该委托,便可通过OBS外表的方式访问OBS上的数据。

  • 该特性仅8.2.0及以上集群版本支持。
  • 同一个集群的OBS数据源在创建、修改、删除时是互斥的,不支持同时执行多个操作。

创建OBS委托

操作场景

创建OBS数据源前需要用户提前创建好授权给GaussDB(DWS)具有OBS OperateAccess或OBS Administrator权限的委托。

操作步骤

  1. 鼠标移动至页面右上角账号,单击“统一身份认证”,进入统一身份认证服务页面。
  2. 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”。

  3. 创建委托时委托类型选择“云服务”,云服务选择“DWS”。
  4. 单击“下一步”,对委托授予OBS服务的“OBS OperateAccess”或“OBS Administrator”权限。

  5. 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。

创建OBS数据源

前提条件

已创建好授权给GaussDB(DWS)具有OBS OperateAccess权限的委托。

操作步骤

  1. 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群
  2. 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
  3. 在OBS数据源页面,单击“创建OBS数据源连接”,填写配置参数。

    表1 OBS数据源连接参数说明

    参数名称

    说明

    数据源名称

    要创建的OBS数据源连接名称,由用户自定义。

    该数据源名称作为后续创建OBS外表语句中指定的server名称。

    OBS委托

    当前用户授权给DWS服务的具有OBS OperateAccess权限的委托。

    数据库

    要创建的OBS数据源连接所在的数据库。

    描述

    要创建的OBS数据源连接的描述信息。

  4. 确认无误后,单击“确认”按钮,提交创建操作,创建过程大约需要10秒钟左右。

更新OBS数据源配置

操作场景

当OBS数据源连接创建之后,GaussDB(DWS)会定期更新数据源使用的临时委托授权信息,如果24小时内自动更新均失败的话,数据源连接将不可用,此时可以手动在控制台临时进行一次手动更新操作。

操作步骤

  1. 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群
  2. 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
  3. 在“OBS数据源”列表中选择要更新的OBS数据源,单击所在行“操作”列的“更新配置”按钮。
  4. 确认无误后,单击“确认”按钮,提交更新操作,更新过程大概需要10秒钟左右。

修改OBS数据源委托

操作场景

如果创建OBS数据源时绑定的委托不能满足使用需要,可以使用管理委托功能更换其他委托。

操作步骤

  1. 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群
  2. 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
  3. 在“OBS数据源”列表中选择要修改的OBS数据源,单击所在行“操作”列的“管理委托”按钮,在弹窗中选择新的委托。
  4. 确认无误后,单击“确认”按钮,提交修改委托操作,修改过程大概需要10秒钟左右。

删除OBS数据源

  1. 在GaussDB(DWS)管理管制台,选择“集群 > 专属集群
  2. 在集群列表,单击指定集群的名称,选择“数据源>OBS数据源”。
  3. 在“OBS数据源”列表中选择要删除的OBS数据源,单击所在行“操作”列的“删除”按钮。
  4. 确认无误后,单击“确认”按钮,提交删除操作,删除操作过程大概需要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上的数据。

  1. 参见以上步骤创建OBS数据源,名称为obs_server。
  2. 使用系统管理员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;
    
  3. 使用普通用户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;
    
  4. 通过外表查询OBS上的数据。
    1
    2
    3
    4
    5
    SELECT COUNT(*) FROM customer_address;
    count
    -------
    20
    (1row)