SELECT 语法和 Teradata 连接器 - 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

您可以在查询的 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
从外部表选择的请求只能通过 Teradata 发起。

示例:通过 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 子句的 SELECT 只能通过 Teradata 发起。

示例:通过 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;
外部表请求中带有 EXPORT 子句的 SELECT 只能通过 Teradata 发起。

示例:带 RETURNS 子句的 SELECT

当使用 SQLE 16.20 或更高版本时,SELECT 支持使用 RETURNS 子句定义预期输出。RETURNS 子句支持列列表或表定义,通常用于返回特定类型的列、字符集长度和字符串格式。提取未绑定或绑定的字符串类型时,RETURNS 子句有助于将这些类型映射到具有特定长度或字符集的 CHAR、VARCHAR 或 CLOB。也可以将 BYTE 和 VARBYTE 映射到特定长度。

当导入和返回类型属于以下组时,RETURNS 子句有效:
  • CHAR 类型:Char、Varchar、Clob、Char/Varchar 数组
  • 字节类型:Byte、Varbyte、Blob
RETURNS 子句注意事项:
  • 返回数据类型必须与导入类型兼容。
  • 仅支持一维 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