以下示例,是新建一个普通用户dbuser并创建一个数据库mydatabase,然后使用管理 员用户授予dbuser外表权限。
步骤1 使用数据库管理员通过GaussDB(DWS)提供的数据库客户端连接默认数据库gaussdb 例如,使用gsql客户端的用户通过如下语句连接数据库:
gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r
根据界面提示输入密码。
步骤2 新建一个普通用户,并用它创建一个数据库。
新建一个具有创建数据库权限的用户dbuser:
CREATE USER dbuser WITH CREATEDB PASSWORD 'password';
切换为新建的用户:
SET ROLE dbuser PASSWORD 'password';
执行以下命令创建数据库:
CREATE DATABASE mydatabase;
查询数据库:
SELECT * FROM pg_database;
返回结果中有mydatabase 的信息表示创建成功:
datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | datacl
---+---+---+---+---+---+---+---+---
++-+----+---
template1 | 10 | 0 | C | C | t | t | -1 | 14146 | 1351
| 1663 | ORA | {=c/omm,omm=CTc/omm}
template0 | 10 | 0 | C | C | t | f | -1 | 14146 | 1350
| 1663 | ORA | {=c/omm,omm=CTc/omm}
gaussdb | 10 | 0 | C | C | f | t | -1 | 14146 | 1352 | 1663 | ORA | {=Tc/omm,omm=CTc/omm,chaojun=C/omm,hu
obinru=C/omm}
mydatabase | 17000 | 0 | C | C | f | t | -1 | 14146 | 1351
| 1663 | ORA | (4 rows)
步骤3 使用管理员用户给普通用户赋予创建外部服务器的权限和使用外表的权限。
使用数据库管理员用户通过数据库客户端连接新建的数据库。
例如,使用gsql客户端的用户可以直接使用如下语句切换为管理员用户去连接新建的 数据库:\c mydatabase dbadmin;
根据提示输入用户密码。
说明
注意,必须先使用管理员用户连接到将要创建外部服务器和使用外表的数据库,再对普通用户进 行授权。
默认只有系统管理员才可以创建外部服务器,普通用户需要授权才可以创建,执行以 下命令授权:
GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser;
其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创建SERVER的用户 名。
执行以下命令赋予用户使用外表的权限。
ALTER USER dbuser USEFT;
查看用户:
SELECT r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil, ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as memberof , r.rolreplication
, r.rolauditadmin , r.rolsystemadmin , r.roluseft
FROM pg_catalog.pg_roles r ORDER BY 1;
返回结果中,dbuser的信息中包含了UseFT权限,表示授权成功:
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolconnlimit | rolvalidbegin | rolvaliduntil | memberof | rolreplication | rolauditadmin | rolsystemadmin | roluseft
---+---+---+---+---+---+---+---
dbuser | f | t | f | t | t | -1 | | | {} | f
| f | f | t
lily | f | t | f | f | t | -1 | | | {} | f | f | f | f
omm | t | t | t | t | t | -1 | | | {} | t | t | t | t
----结束
手动创建外部服务器
步骤1 使用数据库管理员通过GaussDB(DWS)提供的数据库客户端连接默认数据库gaussdb。
例如:通过gsql客户端登录数据库的用户可以使用以下两种方法中的一种进行连接:
可以通过以下两种方法中的一种进行连接:
● 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
\c gaussdb dbadmin;
根据提示输入密码。
● 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行\q退出gsql后,执行以 下命令重新进行连接:
gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r
步骤2 执行以下命令查询自动创建的外部服务器的信息。
SELECT * FROM pg_foreign_server;
返回结果如:
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl
| srvoptions
---+---+---+---+---+--- gsmpp_server | 10 | 13673 | | | |
gsmpp_errorinfo_server | 10 | 13678 | | | |
hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | |
{"address=192.168.1.245:25000,192.168.1.218:25000",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs}
(3 rows)
查询结果中,每一行代表一个外部服务器的信息。与MRS数据源连接相关联的外部服 务器包含以下信息:
● srvname值包含“hdfs_server”字样以及MRS集群的ID,此ID与MRS管理控制台 的集群列表MRS ID相同。
● srvoptions字段中的address参数为MRS集群的主备节点的IP地址及端口。
您可以根据上述信息找到您所要的外部服务器,并记录下它的srvname和srvoptions的 值。
步骤3 切换为即将创建外部服务器的用户去连接其对应的数据库。
在本示例中,执行以下命令,使用创建用户和数据库并授予外表权限中创建的普通用 户dbuser连接其创建的数据库mydatabase。
\c mydatabase dbuser;
步骤4 创建外部服务器。
创建外部服务器的详细语法,请参见CREATE SERVER。示例如下:
CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca FOREIGN DATA WRAPPER HDFS_FDW
OPTIONS
(address '192.168.1.245:25000,192.168.1.218:25000',
hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca', type 'hdfs'
);
以下为必选参数的说明:
● 外部服务器名称 允许用户自定义名字。
在本例中,我们指定为前面的步骤步骤2中记录下来的srvname字段的值,
如'hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca'。
不同的数据库之间资源是隔离的,因此在不同的数据库中外部服务器名称可以相 同。
● FOREIGN DATA WRAPPER
只能指定为HDFS_FDW,它在数据库中已经存在。
● OPTIONS参数
以下参数请分别指定为步骤步骤2中记录下来的srvoptions中的参数值。
– address
指定HDFS集群的主备节点所在的IP地址以及端口。
– hdfscfgpath
指定HDFS集群配置文件路径。该参数仅支持type为HDFS时设置。只能设置 一个路径。
– type
取值为'hdfs',表示HDFS_FDW连接的是HDFS。
步骤5 查看外部服务器。
SELECT * FROM pg_foreign_server WHERE
srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';
返回结果如下所示,表示已经创建成功:
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl
| srvoptions
---+---+---+---+---+--- hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | |
{"address=192.168.1.245:25000,192.168.1.218:25000",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs}
(1 row)
----结束
3.4.4 创建外表
在GaussDB(DWS)数据库中创建一个Hadoop外表,用来访问存储在MRS HDFS文件系 统上的Hadoop结构化数据。Hadoop外表是只读的,只能用于查询操作,可直接使用 SELECT查询其数据。
您可以按照以下步骤创建外表:
1. 请确保您已经完成前提条件
2. 根据创建外表(CREATE FOREIGN TABLE (SQL on Hadoop or OBS))的语法描 述,需要先获取以下信息:
a. 获取MRS数据源的HDFS路径
b. 获取MRS数据源连接的外部服务器信息
3. 创建外表
参考信息:数据类型转换说明
前提条件
● 已创建MRS集群,并将数据导入Hive/Spark数据库中的ORC表。
请参见MRS集群上的数据准备。
● GaussDB(DWS)集群已创建MRS数据源连接。
具体操作请参见《数据仓库服务管理指南》的创建MRS数据源连接。