步骤1 使用创建外部服务器的用户去连接其对应的数据库。
是否使用普通用户在自定义数据库中创建外表,请根据需求进行选择:
● 是
a. 请先确保,您已按照手动创建外部服务器章节中的步骤,创建了普通用户 dbuser和它的数据库mydatabase,并在mydatabase中手动创建了一个外部 服务器。
b. 使用用户dbuser通过GaussDB(DWS)提供的数据库客户端连接数据库 mydatabase。
如果已经使用gsql客户端连接至数据库,可以直接执行如下命令进行用户和 数据库切换:
\c mydatabase dbuser;
根据界面提示输入密码。
● 否
当您通过GaussDB(DWS)管理控制台创建MRS数据源连接时,数据库管理员 dbadmin会在默认数据库gaussdb中自动创建一个外部服务器。因此,如果使用数 据库管理员dbadmin在默认数据库gaussdb中创建外表,需要通过
GaussDB(DWS)提供的数据库客户端工具连接数据库。例如,使用gsql客户端的 用户通过如下命令连接数据库:
gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r
根据界面提示输入密码。
步骤2 执行以下命令,查看已创建的MRS数据源连接的外部服务器信息。
SELECT * FROM pg_foreign_server;
说明
也可以执行\desc+命令查看外部服务器信息。
返回结果如:
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的 值。
----结束
创建外表
当完成获取MRS数据源连接的外部服务器信息和获取MRS数据源的HDFS路径后,就 可以创建一个外表,用于读取MRS数据源数据。
创建外表的语法格式如下,详细的描述请参见(CREATE FOREIGN TABLE (SQL on Hadoop or OBS))。
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name
[ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] |
table_constraint [, ...]} [, ...] ] ) SERVER dfs_server
OPTIONS ( { option_name ' value ' } [, ...] ) DISTRIBUTE BY {ROUNDROBIN | REPLICATION}
[ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ;
例如,创建一个名为"foreign_product_info"的外表,对语法中的参数按如下描述进行 设置:
● table_name
必选。外表的表名。
● 表字段定义
– column_name:外表中的字段名。
– type_name:字段的数据类型。
多个字段用“,”隔开。
外表的字段个数和字段类型,需要与MRS上保存的数据完全一致。定义字段的数 据类型之前,您必须先了解数据类型转换说明。
● SERVER dfs_server
外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器,从而关 联MRS数据源连接并从MRS集群读取数据。
此处应填写为通过获取MRS数据源连接的外部服务器信息查询到的“srvname”
字段的值。
● OPTIONS 参数
用于指定外表数据的各类参数,关键参数如下所示。
– format:必选参数。取值只支持“orc”。表示数据源文件的格式,只支持 Hive的ORC数据文件。
– foldername:必选参数。表示数据在HDFS的存储目录或数据文件路径。
如果是启用了Kerberos认证的MRS分析集群,请确保MRS数据源连接的MRS 用户,拥有此目录的读取权限。
请按照获取MRS数据源的HDFS路径中的步骤获取HDFS路径,该路径作为 foldername的参数值。
– encoding:可选参数。外表中数据源文件的编码格式名称,缺省为utf8。
– DISTRIBUTE BY
表示外表的数据读取方式。有以下两种方式供选择,在本例中我们选择 ROUNDROBIN。
▪
ROUNDROBIN:表示外表在从数据源读取数据时,GaussDB(DWS)集 群每一个节点读取随机一部分数据,并组成完整数据。▪
REPLICATION:表示外表在从数据源读取数据时,GaussDB(DWS)集群 每一个节点都读取一份完整数据。– 语法中的其他参数
其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中我们 不需要设置。
根据以上信息,创建外表命令如下所示:
DROP FOREIGN TABLE IF EXISTS foreign_product_info;
CREATE FOREIGN TABLE foreign_product_info ( product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date ,
product_comment_num integer ,
product_comment_content varchar(200) ) SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca OPTIONS (
format 'orc', encoding 'utf8',
foldername '/user/hive/warehouse/demo.db/product_info_orc/' ) DISTRIBUTE BY ROUNDROBIN;