我如何在 GPDB 中创建和读取外部 table

How do i create and read External table in GPDB

我们有小型 gpdb 集群。当我尝试使用 gpfdist 协议创建和读取我的第一个外部 table 时。

读取外部时出错 table : 那就是

prod=# select * from ext_table
prod-# ;
ERROR:  connection with gpfdist failed for gpfdist://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt. effective url: http://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt. error code = 111 (Connection refused)  (seg0 slice1 datanode2 40000 pid=5402)
prod=#

我们尝试了外部的 DDL 命令 table :

CREATE EXTERNAL TABLE ext_table
(
  "ID" bigint,
  "time" timestamp without time zone,
   )
 LOCATION (
    'gpfdist://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt'
)
 FORMAT 'TEXT' (delimiter ';' null '' escape '~' )
ENCODING 'UTF8';

如有任何帮助,我们将不胜感激!

您必须在 "gpmasterhost" 上创建 gpfdist 进程,监听端口 8080 并提供包含目录 demo 的文件,demo 目录包含 gp_RevenueReport_stg0.txt。

gpfdist -p 8080 -d path_to_demo & 

正如 Jon 所说,您需要在 "gpmasterhost" 系统上 运行 gpfdist。

但是,根据您的说明,gpfdist 运行正在您的演示目录中:

ps aux |grep gpfdist root 9417 0.0 0.0 103244 868 pts/1 R+ 14:57 0:00 grep gpfdist gpadmin 32581 0.0 0.0 27148 1692 pts/0 S 14:49 0:00 gpfdist -p 8080 -d /home/gpadmin/demo

因此您需要将 EXTERNAL 定义更改为(注意我没有使用演示目录):

创建外部 TABLE ext_table ( "ID" 大整数, "time" 没有时区的时间戳, ) 地点 ( 'gpfdist://gpmasterhost:8080/gp_RevenueReport_stg0.txt' ) FORMAT 'TEXT' (分隔符 ';' null '' 转义 '~' ) 编码 'UTF8';

或 运行 gpfdist 向上一级 (/home/gpadmin),无需修改您的外部 table.