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: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
用户通过配置hdfscfgpath参数来指定HDFS配置文件路径。GaussDB(DWS)会根据配置文件路径下的HDFS配置文件指定的连接配置方式,以及安全模式,来访问HDFS集群。非安全模式连接HDFS集群时,不支持数据传输加密。
如果没有指定address选项,默认采用hdfscfgpath指定的配置文件中指定的address。
- fed
取值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
取值范围:
- OBS表示连接的是OBS。
- HDFS表示连接的是HDFS。
- DLI表示连接的是DLI。
- dli_address
- 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
- address
示例
建立一个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}' ); |