用途
ExecuteForeignSQL 存储过程提供一个接口,以便在外部服务器上执行基本的 SQL 查询。例如,您可以使用 ExecuteForeignSQL 创建或删除外部服务器上的数据库中的表。
ExecuteForeignSQL 通过所有 SQL 查询,但是其不返回结果集,因此如果您使用其执行 SELECT 或 HELP 语句,您将看不到任何结果。
ExecuteForeignSQL 和安装脚本作为 Teradata QueryGrid 连接器软件包的一部分提供。DBA 手动执行脚本以安装 ExecuteForeignSQL,然后授予适当的权限。使用 ExecuteForeignSQL 之前,请在 DO IMPORT WITH 子句中使用 QGExecuteForeignQuery 表运算符创建外部服务器。
语法
CALL [ SYSLIB. ] ExecuteForeignSQL ( 'query_expression', 'server_name' ) [;]
语法元素
- SYSLIB.
- 存储过程所在的数据库的名称。
- query_expression
- 有效的 Teradata SQL 表达式。
查询将不经解析直接传递到外部服务器。
- server_name
- 外部服务器的名称。
用法说明
ExecuteForeignSQL 通过使用嵌入式表运算符来提供安全执行,并通过可信会话来进行登录凭据验证。
DBA 可以有选择性地执行 GRANT 以便授予使用 ExecuteForeignSQL 的权限。
要调用 ExecuteForeignSQL,必须首先创建一个外部服务器对象以指定使用 TD_SYSFNLIB.QGExecuteForeignQuery 表运算符:
DO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQuery;只能同时将一个 Import 运算符和一个 Export 运算符与外部服务器相关联,以便在正用于查询的现有外部服务器上运行 ExecuteForeignSQL,您可以创建具有不同名称的单独外部服务器对象,用于运行 ExecuteForeignSQL。您必须对此运算符具有 EXECUTE FUNCTION 和 SELECT 权限。
如果引用表名称,必须在其前面加上模式名称。
返回结果集的 SQL 查询(如 SELECT 或 HELP)在远程系统上执行,但由此产生的行不会显示。该查询可能继续使用远程系统上的 CPU、内存和 I/O 资源。
ExecuteForeignSQL 可与 Kerberized 集群配合使用。
示例:使用 ExecuteForeignSQL
在调用 ExecuteForeignSQL 之前,您必须创建外部服务器对象并指定 DO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQuery,如下面的示例所示。
CREATE FOREIGN SERVER <fs_name> EXTERNAL SECURITY DEFINER TRUSTED TD_SERVER_DB.<auth_name> USING LINK('<linkName>') version('active') DO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQuery;
该示例在外部服务器上创建表:
CALL SYSLIB.ExecuteForeignSQL( 'create table tab1(c1 int, c2 string)', 'QG_Presto1');
其中 QG_Presto1 是外部服务器的名称。