从 Web 服务加载数据
在 Apache Cloudberry 中,你可以通过创建外部 Web 表的方式,从 Web 服务或任何支持命令行访问的数据源加载数据。这里支持的数据格式有文本(TEXT)和 CSV 格式。
通过外部 Web 表,Apache Cloudberry 能够像处理常规数据库表一样操作动态数据源。需要注意的是,由于 Web 表中的数据可能会在查询执行过程中发生变化,这些数据不支持重新扫描。
使用 CREATE EXTERNAL WEB TABLE
命令可以创建一个 Web 表的定义。你可以选择创建基于命令行的或是基于 URL 的外部 Web 表,但需要注意,这两种定义的格式是不同的,请勿将它们混合使用。
使用命令来定义外部 Web 表
在 Apache Cloudberry 中,你可以通过 Shell 命令或脚本的输出来定义基于命令的外部 Web 表数据。具体来说,你需要执行 CREATE EXTERNAL WEB TABLE
命令来创建外部 Web 表,并在 EXECUTE
子句中指明这个 Shell 命令或脚本。这样,当命令执行时,它会捕获那一刻的数据作为表数据。EXECUTE
子句负责在数据库系统的指定节点上执行这些命令或脚本,这些节点可能是 Coordinator、某个特定的 Segment 主机,或是多个 Segment 主机。
默认情况下,该命令会在有数据输出需处理的 Segment 主机上执行。例如,如果每个 Segment 主机都运行了 4 个处理输出数据的主 Segment 实例,那么该命令将在每个 Segment 主机上执行 4 次。你也可以通过设定限制来减少执行该 Web 表命令所需的 Segment 实例数量。在 SQL 命令的 ON
子句中指定的所有 Segment 将会并发执行此命令。
需要注意的是,你定义的这个外部命令是在数据库环境中执行的,它无法直接访问操作系统层面的环境变量(例如 .bashrc
或 .profile
中定义的变量)。因此,你需要在 EXECUTE
子句中明确设置所需的环境变量。例如:
=# CREATE EXTERNAL WEB TABLE output (output **text**)
EXECUTE 'PATH=/home/gpadmin/programs; export PATH; myprogram.sh'
FORMAT 'TEXT';
此外,为了确保安全和一致性,这些 Shell 脚本必须能被数据库的管理用户 gpadmin
执行,并且在 Coordinator 和所有 Segment 主机上都位于相同的路径。
下面的命令示例展示了如何定义一个执行特定脚本的外部 Web 表。这个脚本将在每个有数据输出需要处理的 Segment 主机上执行。
=# CREATE EXTERNAL WEB TABLE log_output
(linenum **int**, message **text**)
EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST
FORMAT 'TEXT' (DELIMITER '|');