Treadata学习笔记
来源:互联网 发布:电脑实用小软件 编辑:程序博客网 时间:2024/05/08 18:33
1. 当用户从前端访问Teradata时,首先要建立连接,即所谓的会话层(Session),
这可以通过两种方式来建立。一种是标准的ODBC连接,另一种是调用层接口CLI
(Call Level Interface).
2. 工具:CLI的速度比ODBC快许多,Teradata中很多工具都是基于CLI开发的,如最常
用的查询工具BTEQ(详细说明参见附录一)、数据加载工具FastLoad和MultiLoad、
数据备份与恢复工具ASF2、数据输出工具FastExport等
3. 指令
3.1 。与Teradata会话有关的命令是以SET SESSION开头的几个,即SET SESSION CHARSET、SET
SESSION TRANSACTION、SET SESSION SQLFLAG和SET SESSIONS。
3.1.1 改变交易处理模式的命令如下: .SET SESSION TRANSACTION [ANSI|BTET]
3.1.2 SQL语法的强制级别:.SET SESSION SQLFLAG [NONE|ENTRY|INTERMEDIATE]
3.2 SHOW,EXPLAIN,HELP命令
HELP: 显示数据库对象的信息
SHOW: 显示数据库对象的DDL语句
EXPLAIN: 描述执行一个交易请求的详细过程和计划,用法( explain SQL
3.3 宏
3.2.1 定义宏
CREATE MACRO macroname AS ( . . . );
3.2.2 执行宏
EXECUTE macroname;
3.2.3 显示宏
EXECUTE macroname;
3.2.4 改变宏 REPLACE MACRO macroname AS (. . . );
3.2.5 删除宏 DROP MACRO macroname;
3.2.6 显示宏执行的解释 DROP MACRO macroname;
4. SQL语法的不同之处
4.1 Like 语句 与 ALL,SOME,ANY配对
4.2 模式匹配中使用ESCAPE字符表示_和%,如WHERE tvmname LIKE ''_Z_%'' ESCAPE ''Z'
4.3 TITLE , FORMAT
4.3.1 TITLE 标题 SELECT last_name
,first_name,salary_amount / 12 (TITLE 'MONTHLY // SALARY')
4.3.2 FORMAT
5. 函数
5.1 CHARACTERs 用于计算VARCHAR型数据字段的实际字符串长度
5.2 trim
5.3 format 如SELECT salary_amount (FORMAT ''$$$,$$9.99'');
! $ 美元标识符
! 9 数字位
! Z 将数字中的前缀零去除
! , 在指定位置插入逗号
! . 指定小数点位置
! - 在指定位置插入连字号
! / 在指定位置插入斜线
! % 在指定位置插入百分号
! X 字符数据,每个X代表一个字符
! G 图形数据.一个G代表一个逻辑字符(双字节)
! B 在指定位置插入空格
5.4 属性函数 (可查询字段的元数据定义信息
TYPE 数据类型
TITLE 标题短语
FORMAT 格式短语
NAMED NAMED子句
CHARACTERS 字符个数
5.5 SUBSTRING (<字符串表达式> FROM <开始位置> [ FOR <长度> ])
5.6 INDEX(母串,子串) (字符串定位函数)
5.7 NULLIF
5.8 COALESCE
CASE
WHEN <expression1> IS NOT NULL THEN <expression1>
WHEN <expression2> IS NOT NULL THEN <expression2 >
...
WHEN <expressionX> IS NOT NULL THEN <expressionX>
ELSE NULL
END
6. 系统日历功能
calendar_date DATE UNIQUE (标准Teradata日期)
day_of_week BYTEINT, (1-7,星期几,1代表星期天)
day_of_month BYTEINT, (1-31,本月中的第几号)
day_of_year SMALLINT, (1-366,本年中的第几天)
day_of_calendar INTEGER, (从01/01/1900开始的天, 本日历中第几天)
weekday_of_month BYTEINT, (本月中该星期几出现的次数)
week_of_month BYTEINT, (本月中第几周,以星期天到星期六为一周。0,表
示月的第一个不完整的周;1表示月的第一个完整的周)
week_of_year BYTEINT, (0-53) (本年中第几周,0表示第一个不完整的周)
week_of_calendar INTEGER, (0-n) (本日历中的第几周,0表示第一个不完整的周)
month_of_quarter BYTEINT, (1-3,本季度中第几月)
month_of_year BYTEINT, (1-12,本年中第几月)
month_of_calendar INTEGER, (1-n,本日历中第几月,从1900年1月起)
quarter_of_year BYTEINT, (1-4,本年中第几季度)
quarter_of_calendar INTEGER, (本日历中第几季度,从1900年1月起)
year_of_calendar SMALLINT, (年份,从1900起)
系统日历有一组高性能的视图,包含日历中每一天的详细信息.
7. 参数宏,以:var 表示宏变量
8. 利用WITH BY进行数据小计,它是Teradata的一个扩展特性。
9. 相交操作与合并操作 UNION , EXCEPT
10. OLAP简介
OLAP函数与聚合函数有类似的地方:
! 对数据进行分组操作 (类似于GROUP BY 子句)
! 能够使用QUALIFY子句过滤组 (类似于HAVING 子句)
OLAP函数又与 聚合函数不同,因为:
! 返回满足条件的每行的数据值,而不是组的值
! 不能在子查询内使用
OLAP函数可以对下面的数据库对象或动作使用:
! Tables (Perm, Temp, Derived)
! Views
! INSERT/SELECT
11. OLAP 标准函数
10.1 csum 累计加总
10.2 MAVG(colname, n, sortlist) 移动平均数
colname = 计算移动平均值的列
n = 行数(< 4096),计算时将使用,包括当前行('n' 也称为平均宽度)
sortlist = 确定行顺序的列
10.3 MSUM(colname, n, sortlist) 移动汇总函数
10.4 MDIFF(colname, n, sortlist) 移动差分
宽度n<=4096
10.5 RANK(colname) 排队函数,即排名次
使用排队函数的规则包括:
! WHERE子句限定参与排队的记录。
! 应用排队函数时,缺省最大的数名次最低。
! 缺省顺序是按排队列的降序。
10.6 QUANTILE (quantile_constant,sortlist ASC/DESC) 分位函数
quantile_constant 分数
sortlist 计分依据
10.7 MLINREG (y, n, x) 移动线性回归函数
10.8 SAMPLE n 简单采样
n 是整数,表示采样n记录;n是小数,表示采样比率为n
12. OLAP 统计函数
12.1 STDDEV_SAMP ({DISTINCT} value_expression) 样本标准偏差
12.2 STDDEV_POP ({DISTINCT} value_expression) 全体标准偏差
12.3 VARSAMP ({DISTINCT} value_expression) 样本变异函数
12.4 VAR_POP ({DISTINCT} value_expression) 全体变异函数
12.5 SKEW ({DISTINCT} value_expression) 分布函数
12.6 KURTOSIS ({DISTINCT} value_expression) 分布峰态函数
12.7 COVAR_POP (value_expression, value_expression) 协方差函数
12.8 CORR (value_expression, value_expression) 相关性函数
12.9 REG_SLOPE (value_expression1, value_expression2) 回归倾斜函数
12.10 REG_INTERCEPT (value_expression1, value_expression2) 回归截取函数
13。 Group <index> 表示按select中的第<index>个字段分组
14. 触发器
14.1触发器动作时间 - 触发器激活的时间,在触发事件之前(BEFORE)、之后
(AFTER),或代替(INSTEAD OF)触发事件。
参照子句 - 定义表中旧值和新值怎样命名。
触发器类型 - 触发器分行(Row)类型或语句(Statement)类型。
REFERENCING 参照规则,INSERTS不需要旧参照,DELETES不需要新参照
------------------------------------------------
行触发器 语句触发器
REFERENCING REFERENCING
OLD AS oldrow OLD_TABLE AS oldtable
NEW AS newrow NEW_TABLE AS newtable
FOR EACH ROW FOR EACH STATEMENT
14.2 启用触发器
ALTER TRIGGER [triggername] [ENABLED or DISABLED];
14.3 给触发器增加注释
COMMENT ON TRIGGER StageUpd 'After Hours Updates';
15. 临时表
15.1 分类
Teradata中有3类临时表:
! 全局临时表(Global Temporay Table) 每个session都有自己的实例
CREATE GLOBAL TEMPORARY命令创建
! 基础定义是永久的,保存在数据字典中。
! 要物化表,要有相应SQL的权限。
! 空间要占用用户的“临时空间(temporary space)”。
! 每个会话最多可以物化32个全局临时表。
! 系统重启动后,还存在。
! 可变临时表(Volatile Temporay Table) 存在于一个session内
使用CREATE VOLATILE TABLE语句创建。
ON COMMIT PRESERVE ROWS,允许会话中的其他查询使用这个可变临时表。缺省是ON COMMIT DELETE ROWS,意味着查询提交后,数据被删除。
LOG指示维护交易日志,NO LOG的性能更好。缺省是LOG。
! 一个会话中,最多有64个可变临时表。
! 每个可变临时表必须有唯一的名称。
! 可变临时表必须被会话的用户名限定。
! 导出表(Derived Table) 查询期间存在
16. 索引
16.1 创建一个连接索引,索引将提高它覆盖的连接的性能
CREATE JOIN INDEX cust_ord_ix
AS SELECT (c.cust_id, cust_name),(order_id, order_status, order_date)
FROM customer c INNER JOIN orders o
ON c.cust_id = o.cust_id
PRIMARY INDEX (cust_id);
连接索引包括两部分:固定部分(第一个括号内) 和可重复部分 (第二个括号内)。类似于表达一对多关系
16.2 简单索引
Create Index(no) on Job
16.3 聚合索引 :是为了提高聚合查询的性能
CREATE JOIN INDEX monthly_sales AS
SELECT itemid AS Item
,EXTRACT(YEAR FROM salesdate) AS Yr
,EXTRACT(MONTH FROM salesdate) AS Mon
,SUM(sales) AS SumSales
FROM daily_sales
GROUP BY 1,2,3;
16.4 索引覆盖查询
创建了连接索引,由优化器来选择是否使用。如果优化器使用索引产生结果,我们称索引覆盖了查询。
17. 从己有表创建新表
17.1 基于已经存在的表定义,创建空的新表。
大部分标准的列属性都可以复制:
! 列名
! 数据类型
! 缺省值
! NOT NULL约束
! CHECK 约束
! UNIQUE 约束
! PRIMARY KEY约束
! Fallback选项(仅永久表)
! Journal选项(仅永久表)
! 所有索引(除了连接索引)
不能复制的属性:
! 参照约束
! 触发器
! 统计(Statistics)
例:CREATE TABLE dept1, FALLBACK AS department WITH NO DATA UNIQUE INDEX (department_name);
17.2 使用子查询创建表,并选择所需的列。
CREATE TABLE emp1 AS
(SELECT employee_number
,department_number
,salary_amount
FROM employee) WITH NO DATA;
17.3 使用已有的表创建有数据的表
CREATE TABLE dept1 AS department WITH DATA;
记住:可变临时表和全局临时表不能使用WITH DATA选项来装载数据,必须
使用INSERT 或INSERT SELECT来装载数据。
18. 存储过程
SPL/SQL 语句
18.1 使用LOOP语句
! 可以使用LOOP语句,来定义重复执行的顺序。
! 可以选择定义一个标签。
! LEAVE语句允许退出循环。
! 没有LEAVE语句,循环是无限的循环。
! 如果在循环中出现例外条件,并且没有定义例外处理,则循环和存储过程
被终止。
! DECLARE语句用于说明局部变量及其数据类型和可选的缺省值。
18.2 游标
游标的规则:
! 声明游标,需要使用FOR语句。
! 要赋予游标一个名字,例子中的名字为cur1。
! 赋予循环一个名字loopvar。
! SELECT语句返回多行。
! DO语句定义对返回的每行进行的操作。
! PRINT语句表明打印到数据库窗口中。主要用于调式存储过程。
! 列名必须以循环名为限定词。(如loopvar.employee_number)
! END FOR说明FOR循环的边界。
FOR loopvar AS cur1 CURSOR FOR
SELECT employee_number, department_number FROM employee
DO PRINT 'EmpNo:', loopvar.employee_number;
END FOR;
18.3 ACTIVITY_COUNT。这是一个系统变量,表示任何时刻SQL语句在该时刻处理的记录数。
18.4 编译存储过程
存储在服务器上 .COMPILE FILE = sp_source;
如果不要求将源代码存储在服务器上,则使用下列编译命令:.COMPILE FILE = sp_source WITH NOSPL;
当创建使用ODBC或JDBC的存储过程时,编译在创建过程时自动进行。用户只提交CREATE PROCEDURE语句,如果创建成功,存储过程就可以执行了。在
BTEQ中,用户必须显式提交一个编译步骤。
18.5 异常处理
处理器有两种形式:
! EXIT处理 - 在执行了异常处理的动作后,过程终止。
! CONTINUE处理 - 在执行了异常处理的动作后,过程从异常语句的下一条语句继续执行。
处理器可以选择使用两个保留字:
! SQLSTATE - 返回特定的错误码。
! SQLEXCEPTION - 告诉处理程序处理所有的异常,除指定为SQLSTATE的异常外。
18.6 可写游标
可更新游标的下列规则:
! 通过SELECT语句检索到所有记录。
! 每条记录单独测试。
! 对测试的记录可以直接修改,不需重新定位。
! SELECT语句申请了读级锁。
! UPDATE语句申请了行哈稀(row-hash)写级锁。
! 创建者对employee表有读和写的权限。
可更新游标符合下列规则:
! 能够在ANSI模式下创建和执行。
! 允许对当前位置进行多次修改。
! 在修改后,还允许对当前位置执行删除操作。
! 定义触发器的表不能使用游标。
游标中CURRENT OF <cursor name> 表示游标中的当前行
18.7 系统变量,使用:变量名 引用
SQL_STATE 是ANSI标准的异常错误码,类型为CHAR(5)
SQL_CODE 保留字SQLCODE包含与异常相关的Teradata的错误码(7627)
ACTIVITY_COUNT 表示任何时刻SQL语句在该时刻处理的记录数。
18.9 ANSI交易模式
ANSI模式允许存储过程包括下列SQL语句:
! COMMIT
! ABORT
! ROLLBACK
Teradata模式允许存储过程包括下列SQL语句:
! BEGIN TRANSACTION 或BT
! END TRANSACTION 或ET
! ABORT
! ROLLBACK
在ANSI模式下,一条SQL语句有4种可能的结果:
成功条件:
SQL成功完成
SQLSTATE = '00000'
ACTIVITY_COUNT = # rows affected
交易继续
警告条件:
SQL完成,显示警告信息
SQLSTATE > '00000'
ACTIVITY_COUNT = # rows affected
交易继续
错误条件:
SQL遇到错误条件
SQLSTATE > '00000'
请求被回滚
交易继续
失败条件:
发生下列一个条件:
. 检测到死锁
. DDL语句中断了
. 遇到一条ROLLBACK或ABORT语句
SQLSTATE > '00000'
交易被回滚并结束
19. BTEQ Basic Teradata Query
19.1 登陆 .logon systemname/username
19.2 登出 .logoff , .quit
19.3 显示所有的BTEQ命令 .help bteq
19.4 要将BTEQ的输出保存到一个文件中 .export file = output_file
19.5 将BTEQ的输出恢复到标准输出 .export reset
19.6 BTEQ中的注释和C语言中的注释一样,以"/*"开头,以" */"结尾,可以跨行
- Treadata学习笔记
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- JavaScript——12个超酷图片展示JS代码
- jfreechar饼图及柱状图
- 给你说说CRT/LCD刷新率/垂直同步,这个一直没有被说清楚的问题
- asp.net(c#)网页跳转七种方法小结
- 精解C++的switch语句
- Treadata学习笔记
- sql恢复xp_regread
- Linux 内存绑定在局部存储器的实现
- 漂亮的自定义jQueryUI主题
- Linux 内存绑定在局部存储器的实现
- DATA GUARD物理STANDBY的 SWITCHOVER切换
- Aptana初接触
- 一些较感兴趣的个人文章C/C++
- 关于Boolean类型在flex与java中间传递的问题