ExecuteForeignSQL - Teradata QueryGrid

Teradata® QueryGrid™ 安装和用户指南

Product
Teradata QueryGrid
Release Number
2.19
Published
2022 年 7 月
Language
中文 (简体)
Last Update
2022-08-23
dita:mapPath
zh-CN/jpf1654813554544.ditamap
dita:ditavalPath
ft:empty
dita:id
lxg1591800469257
Product Category
Analytical Ecosystem

用途

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 是外部服务器的名称。

此示例同样适用于远程 Teradata、Presto 或 Hive。只需创建一个外部服务器对象(例如,TD_SERVER_DB.HIVE_EFSSP)并调用 SYSLIB.ExecuteForeignSQL。