您可以在查询的 SELECT 语句中以 database_name.table_name@server_name 的形式使用外部服务器语法。如果不指定数据库,则缺省使用 Teradata 到 Teradata 的当前数据库,并将该数据库用作 Teradata 到 Presto 的缺省数据库或用其覆盖连接器或链接属性中提供的数据库。您可以在联接以及引用普通表(包括视图、宏和存储过程)的任何其他位置中使用此外部服务器语法。
支持 AND、OR、NOT、>、< 等逻辑表达式。应用标准 Teradata 限制(例如,最多返回 2048 列)。行大小限制取决于所用的 Teradata 系统版本。
有关受支持数据类型的列表,请参阅 Teradata QueryGrid 连接器的数据类型映射。
基于目标系统的功能和本地系统的优化将查询处理下推到目标系统。例如,如果从 Teradata 系统查询目标 Presto 系统,Teradata 优化器将确定下推谓词,然后根据目标系统支持的内容评估下推谓词以确定最终目标查询下推。
示例:Teradata 到 Presto SELECT
该示例使用外部服务器对象 (presto1) 和目标 Presto 表 (cardata) 从 Teradata 发起请求,以选择目标 Presto 系统上的表中的数据:
SELECT CAST(Price AS DECIMAL (8,2)) , mileage , CAST(make AS VARCHAR(20)) , CAST(model AS VARCHAR(20)) FROM cardata@presto1 WHERE make=’Buick’;
结果︰
price mileage make model -------- ------- ------ -------------------- 17314.10 8221 Buick Century 17542.04 9135 Buick Enclave
示例:从外部表执行 Teradata 到 Presto SELECT
该示例在 Teradata 上发起请求,使用外部表下推查询提取目标 Presto 系统中的数据。这是一个传递查询,不在 Teradata 端解析,但可能需要在目标服务器上重新生成以用于其他用途,例如,使用目录名限定表名:
SELECT * FROM FOREIGN TABLE (SELECT make, model FROM default.cardata where make = 'Buick')@QG_presto1 AS dt;
结果︰
make model ------ -------------------- Buick Century Buick Enclave
示例:通过 EXPORT 子句从外部表执行 Teradata 到 Presto SELECT
该示例显示了使用附加导出子句的外部表查询,该子句使用单个运算符将导出操作及后续联接和导入操作相组合。此示例首先在目标数据库中创建临时表 (temp),将数据从本地 ut2.datatypes2 表导出到该临时表,然后在外部表上运行查询以联接临时表和目标 datatypes1.bigint1 表,最后将结果集返回 Teradata。
SELECT * FROM FOREIGN TABLE (SELECT datatypes1.bigint1, temp.double1 FROM datatypes1, temp WHERE datatypes1.bigint1 > 1)@test EXPORT((select * from ut2.datatypes2) as temp) AS ft;
示例:通过 EXPORT 子句从外部表执行 Teradata 到 Presto SELECT(多个输入流)
可以将多个表导出到目标系统。最多支持 16 个输入流。超出限制时将显示错误。
SELECT * FROM FOREIGN TABLE(SELECT types_numeric.bigint1,temp1.integer1 , temp2.byteint2 FROM types_numeric, temp1,temp2 WHERE types_numeric.bigint1 > 1 AND temp2.bigint2 = types_numeric.bigint1)@td1 EXPORT( (SELECT 127 as byteint1, 32767 as smallint1, 2147483647 as integer1, 9223372036854775807 as bigint1) as temp1, localdb.table1 as temp2) AS ft;
示例:带 RETURNS 子句的 SELECT
当使用 SQLE 16.20 或更高版本时,SELECT 支持使用 RETURNS 子句定义预期输出。RETURNS 子句支持列列表或表定义,通常用于返回特定类型的列、字符集长度和字符串格式。提取未绑定或绑定的字符串类型时,RETURNS 子句有助于将这些类型映射到具有特定长度或字符集的 CHAR、VARCHAR 或 CLOB。也可以将 BYTE 和 VARBYTE 映射到特定长度。
- CHAR 类型:Char、Varchar、Clob、Char/Varchar 数组
- 字节类型:Byte、Varbyte、Blob
- 返回数据类型必须与导入类型兼容。
- 仅支持一维 Char/ Varchar 数组。
- 如果不支持导入或返回类型,则 RETURNS 子句无效。
SELECT c_vchar FROM testtabl@fs1 RETURNS(c_vchar VARCHAR(2)); SELECT * FROM testtab2@fs1 RETURNS(c_vchar2 VARCHAR(5) CHARACTER SET LATIN);
示例:SELECT 外部函数
通过运行外部函数,允许目标系统上定义的函数使用发起系统中的表作为输入。运行外部函数功能时,表会从发起系统导出到目标系统;目标系统上的远程函数由目标系统启动;结果将导入到发起系统。
SELECT clicktime, custname(char(10)), productname, pagetype, productprice, sessionid FROM SESSIONIZE@remoteTD ( ON sess_data PARTITION BY partition_id ORDER BY clicktime USING TIMECOLUMN('clicktime') TIMEOUT(60) RAPIDFIRE(0.2) ) AS S, cust_data where S.userid = custid ORDER BY S.partition_id, S.clicktime; *** Query completed. 19 rows found. 6 columns returned. *** Total elapsed time was 3 seconds. CLICKTIME custname PRODUCTNAME PAGETYPE PRODUCTPRICE SESSIONID -------------------------- -------- ------------ --------- ------------ --------- 2013-12-03 22:03:02.540000 Sri ? Home ? 0 2013-12-03 22:03:32.190000 Sri mytablet checkout 45000.00 0 2013-12-03 22:03:46.210000 Sri myphone 3 checkout 46000.00 0 2013-12-03 22:04:13.820000 Sri B LED TV checkout 86000.00 0 2013-12-03 22:04:25.520000 Sri Z LED TV checkout 91000.00 0 2013-12-18 22:08:07.800000 Walkar ? Home ? 1 2013-12-18 22:08:38.890000 Walkar A Laptop checkout 58500.00 1 2013-12-19 22:09:26.930000 Walkar ? Home ? 2 2013-12-19 22:10:09.180000 Walkar XYZ Laptop checkout 56500.00 2 2013-12-19 22:10:41.860000 Walkar Solar A4 checkout 36500.00 2 2013-12-19 22:11:00.040000 Walkar ABC Tru checkout 41500.00 2 2013-12-24 22:15:13.600000 Pam ? Home ? 3 2013-12-24 22:15:42.170000 Pam home theater checkout 800.00 3 2013-12-24 22:16:03.520000 Pam TV 52inch checkout 700.00 3 2013-12-25 22:12:20.890000 Julia ? Home ? 4 2013-12-25 22:12:52.820000 Julia ABC Tru checkout 41000.00 4 2013-12-25 22:13:11.720000 Julia myphone 3 checkout 47000.00 4 2013-12-26 22:13:54.150000 Doug ? Home ? 5 2013-12-26 22:14:13.000000 Doug myphone 3 checkout 250.00 5