【Teradata】常用语法

简介

Teradata分布式数据库 (TDSQL)是比较受欢迎的数据库管理系统,定位就是大数据仓库系统,定位比较高,主要应用于数据存储和数据处理,处理速度比Hive要高10倍左右。

 

架构

Teradata在整体上是按Shared Nothing 架构体系进行组织的,他的定位就是大型数据仓库系统,定位比较高,他的软硬件都是NCR自己的,其他的都不识别;所以一般的企业用不起,价格很贵。由于Teradata通常被用于OLAP应用,因此单机的Teradata系统很少见,即使是单机系统,Teradata也建议使用SMP结构以尽可能地提供更好的数据库性能,在后面的介绍中,都是按多机系统进行说明的。

 

特点

a.无限并行化—Teradata数据库系统是基于大规模并行处理框架(MPP),MPP在整个系统上进行负载均衡的分配。Teradata系统在其进程之间分割任务,并行运行他们以确保任务的快速完成。

b.没有共享架构—Teradata的架构称为共享无架构。Teradata节点,其访问模块处理器(AMP)和与AMP相关联的磁盘独立工作。他们不会与其他节点共享资源。

c.连接—Teradata可连接到通道连接的系统,如主机或网络连接的系统.

d.成熟优化程序—Teradata优化程序是市场上成熟的优化程序之一。 它自从开始就被设计为平行的。 它已经针对每个版本进行了优化。

e.DSQL—Teradata支持行业标准SQL与存储在表中的数据进行交互。 除此之外,它提供自己的扩展。

f.强大的实用工具—Teradata提供强大的实用程序,用于从/向Teradata系统导入/导出数据。

g.自动分发— Teradata自动将数据均匀分发到磁盘,无需任何手动干预。

 

语法

语法采用独有的TDSQL  支持标准的ANSI SQL语法  在这个基础上进行了加强及扩充

支持DCL语言(数据控制语言)

对许多关键词都支持缩写(例如:select  缩写成sel)。

 

支持的数据类型

类型名字字节长度说明
数值型DATE4YYMMDD,特殊的INTEGER类型
 DECIMAL(n,m)1,2,4,8

n: 1~18, m: 0~n,可缩写成DEC。

如256.78可表示为DEC(5,2)

 NUMERIC(n,m)1,2,4,8同上
 BYTEINT1128~+127
 SMALLINT232768~+32767
 INTEGER4可缩写成INT
 REAL82 * 10 –307 ~ 2 * 10 +308
 FLOAT8同上
 DOUBLE PRECISION8同上
字符型CHAR(n)nn: 1~64000,也可写成CHARACTER
 VARCHAR(n)n+2

n: 1~64000,变长,最前面两字节表示字符串

长度。也可写成CHAR VARYING(n)

 LONG VARCHAR32002相当于VARCHAR(64000)
二进制BYTE(n)nn: 1~64000,无符号二进制整数
 VARBYTE(n)n+2n: 1~64000,变长,最前面两字节表示长度
其它GRAPHIC(n)n

n: 1~32000,这三种数据类型可支持双字节日

本字符和汉字

 VARGRAPHICn+2n: 1~32000,变长,最前面两字节表示长度
 LONG VARGRAPHIC 相当于VARGRAPHIC(32000)

 

TD扩展了图形数据类型,如:GRAPHIC、VARGRAPHIC、LONG VARGRAPHIC。图形数据类型主要是用来支持双字节字符的,如日文。当把系统 设置成支持双字节字符时,数据库中表、视图等对象的名字、字段等都可以使用双字节字符。如果系统设置成不支持双字节字符,则数据库对象名、字段等只能使用英文字母类的单字节字符,此时,前端工具仍然可以采用汉化界面,而且利用前面提到的CHAR和BYTE类型数据类型同样可以存储图形数据。

 

算术运算符

比正常计算多出了两个:求幂、MOD取模

算数函数   :

ABS (arg)求绝对值
EXP (arg)增加幂
LOG (arg)10的对数
LN (arg)自然对数
SQRT (arg)平方根

 

日期计算

在Teradata数据库中将DATE型数据作为整数看待,但不容许无效的日期。计算公式如下:

((YEAR – 1900) * 10000) + (MONTH * 100) + DAY

 

建表

Teradata DDL允许在创建表时指定表的物理属性

例:

  • SET不允许记录重复
  • MULTISET允许记录重复
  • volatile multiset可变临时表
  • 可变临时表(Volatile Temporay Table):不使用数据字典
  • 导出表(Derived Table)
  • 全局临时表(Global emporay Table):在数据字典中保存定义,丢弃实例
  • 使用CREATE TABLE AS语法,可以基于已经存在的表创建新表。如果只创建表定义,不复制数据,使用WITH NO DATA选项。

 

交易完整性

在Teradata中,系统将保证一个交易的完整。怎样才算是一个交易呢,在Teradata中,根据其所处方式的不同在处理时也有所不同。在Teradata缺省模式下, 以分号结束的每个SQL语句都是一个完整的交易,也可以使用BT  (Begin Transaction)和ET (End Transaction)来显示地定义一个交易。

 

特殊函数

WITH BY的主要特点包括:

  • 它为明细数据表创建分类小计。
  • 跟 GROUPBY 不同的是,WITH BY 没有剔除明细记录,而是在明细记录后面按照分类增加小计行。
  • 可以允许多于一个字段进行小计,即小计当中可以嵌套小计。
  • 输出结果将根据 BY后面的所有字段自动进行排序。
  • 它是 Teradata的一个扩展特性。
  • 不带by 则产生总计

||    :

字符串合并的符号是”||”,它把两个字符串串联成一个字符串。

SUBSTRING函数:

与MySQL中一样,但是写法不同

写法:SUBSTRING (<字符串表达式> FROM <开始位置> [ FOR <长度> ])

当SUBSTRING函数作用于整型数据类型时,SUBSTRING函数先将整型函数转化为字符串。对于不同的整型数据类型,它们的长度是不一样的,归纳为:

+ 1 2 7( no. of dependents) BYTEINT
+ 0 0 2 1 3( area code )SMALLINT
+ 0 0 0 5 5 5 4 1 3 4( phone )INTEGER
  • BYTEINT 加上符号后 4个字符长
  • SMALLINT加上符号后 6 个字符长
  • INTEGER 加上符号后 11个字符长

 

累计函数(CSUM) :计算一列的连续的累计的值

CSUM(colname, sort list)

 

移动平均函数(MAVG):

基于预定的行数(查询宽度)计算一列的移动平均值。如果行数小于这个宽度,则基于前面已有的行计算平均值。

MAVG(colname, n, sortlist)

 

移动差分函数(MDIFF) :

基于预定的查询宽度计算一列的移动差分值。宽度决定有多少行参与计算。如果前面的行数小于n,则产生一个空值(null)代表差值。

MDIFF(colname, n, sortlist)

QUALIFY子句:最后执行的语句

 

运算顺序

括号内的优先计算

逻辑运算符的缺省优先级顺序从高到低为:NOT、AND、OR

语句执行从高到底顺序:where->join->group by->qualify->select