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

CREATE SERVER

功能描述

创建一个外部服务器。

外部服务器是存储HDFS集群信息、OBS服务器信息、DLI连接信息或其他同构集群信息的载体。

注意事项

默认只有系统管理员才可以创建外部服务器,否则需要对所使用的FOREIGN DATA WRAPPER授权,授权语法为:

1
GRANT USAGE ON FOREIGN DATA WRAPPER fdw_name TO username;

其中fdw_name为FOREIGN DATA WRAPPER的名字,username为创建SERVER的用户名。

语法格式

1
2
3
CREATE SERVER server_name 
    FOREIGN DATA WRAPPER fdw_name
    OPTIONS ( { option_name ' value ' } [, ...] ) ;

参数说明

  • server_name

    要创建的外部服务器的名称。服务器名称在数据库中必须唯一。

    取值范围:长度必须小于等于63。

  • FOREIGN DATA WRAPPER fdw_name

    指定外部数据封装器的名字。

    取值范围:fdw_name是数据库初始化时系统创建的数据封装器,目前对于HDFS集群,fdw_name的名字可以是hdfs_fdw或者dfs_fdw,对于其他同构集群,fdw_name为gc_fdw。

  • OPTIONS ( { option_name ' value ' } [, ...] )

    用于指定外部服务器的各类参数,详细的参数说明如下所示:

    • address

      指定的OBS服务终端节点或HDFS集群的IP地址。

      OBS:OBS服务的终端节点(Endpoint)。

      HDFS:HDFS集群的元数据节点(NameNode)所在的IP地址以及端口,或者同构其他集群的CN的IP地址以及端口。

      为保证HA(High Availability),HDFS NameNode经常采用主备模式。主备NameNode的地址都需要加入到address值中。GaussDB(DWS)访问HDFS服务时,会动态查找当前处于active状态的主NameNode。

      若HDFS为联邦模式时,可将Router的地址都加入到address值中,GaussDB(DWS)访问HDFS服务时,会动态随机查找当前处于active状态的Router。

      • address option必须存在,若用于跨集群互联互通场景则只允许设置1个。
      • 当server类型为DLI时,address为DLI服务上数据所存储的OBS address。
      • 若HDFS为联邦模式时,即fed 'rbf',address可设置为多组IP、port,对应为HDFS Router的address。
    • hdfscfgpath

      该参数仅支持type为HDFS时设置。

      用户通过配置hdfscfgpath参数来指定HDFS配置文件路径。GaussDB(DWS)会根据配置文件路径下的HDFS配置文件指定的连接配置方式,以及安全模式,来访问HDFS集群。非安全模式连接HDFS集群时,不支持数据传输加密。

      如果没有指定address选项,默认采用hdfscfgpath指定的配置文件中指定的address。

    • fed

      表示dfs_fdw连接的是HDFS为联邦模式。

      取值rbf,表示HDFS为联邦rbf方式。

      该参数8.1.2及以上版本支持。

    • encrypt

      是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为off。

      取值范围:

      • on表示对数据进行加密。
      • off表示不对数据进行加密。
    • access_key

      OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为OBS时设置。

    • secret_access_key

      OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。

    • type

      表示dfs_fdw连接的类型。

      取值范围:

      • OBS表示连接的是OBS。
      • HDFS表示连接的是HDFS。
      • DLI表示连接的是DLI。
    • dli_address

      DLI服务的终端节点,即endpoint。该参数仅支持type为DLI时设置。

    • dli_access_key

      DLI访问协议对应的AK值(DLI云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为DLI时设置。

    • dli_secret_access_key

      DLI访问协议对应的SK值(DLI云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为DLI时设置。

    • dbname

      用于协同分析、跨集群互联互通,表示将要连接的远端集群的数据库名字。

    • username

      用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名。

    • password

      用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名密码。

      对于云下集群迁移到云上的场景,从云下集群导出的server配置中密码为密文,由于云上和云下集群加解密的密钥不同,如果直接在云上集群执行导出时的CREATE SERVER,会执行失败,报解密失败的错误。这种场景下需要将CREATE SERVER中的password手动修改成明文密码进行配置。

    • syncsrv

      仅用于跨集群互联互通,表示数据同步过程中使用到的GDS服务,设置方式与GDS外表的location属性相同。

示例

建立一个hdfs_server,其中hdfs_fdw为数据库中存在的foreign data wrapper:

1
2
3
4
5
CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS 
   (address '10.10.0.100:25000,10.10.0.101:25000',
    hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop', 
    type 'HDFS'
);

建立一个obs_server,其中dfs_fdw为数据库中存在的foreign data wrapper:

认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

1
2
3
4
5
6
CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( 
  address 'obs.example.com', 
  access_key 'xxxxxxxxx', 
  secret_access_key 'yyyyyyyyyyyyy', 
  type 'obs'
);

建立一个dli_server,其中dfs_fdw为数据库中存在的foreign data wrapper:

认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

1
2
3
4
5
6
7
8
9
CREATE SERVER dli_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( 
  address 'obs.example.com', 
  access_key 'xxxxxxxxx', 
  secret_access_key 'yyyyyyyyyyyyy', 
  type 'dli',
  dli_address 'dli.example.com',
  dli_access_key 'xxxxxxxxx',
  dli_secret_access_key 'yyyyyyyyyyyyy'
);

建立另外一个同构集群的server,其中gc_fdw为数据库中存在的foreign data wrapper:

1
2
3
4
5
6
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS 
   (address '10.10.0.100:25000,10.10.0.101:25000',
  dbname 'test', 
  username 'test', 
  password '{Password}'
);

相关链接

ALTER SERVER DROP SERVER