TeraData 培训.ppt_第1页
TeraData 培训.ppt_第2页
TeraData 培训.ppt_第3页
TeraData 培训.ppt_第4页
TeraData 培训.ppt_第5页
免费预览已结束,剩余196页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TeraData 基础培训,编写日期:2010年5月1日,Teradata学习推荐资料: TF v800 Read Book1.pdf TF v800 Read Book2.pdf Teradata SQL.pdf ETL Automation Manual V2.5.2(GB).doc perl编程24学时教程 。,Teradata Client安装 Teradata架构 Teradata SQL Assistant #定义参数、变量名; $HOME = D:ETL ; #参数、变量赋值; my $HOME = D:ETL; my $CTAPDB = $ENVAUTO_CTAPDB; #前端

2、CTAP应用数据库 if ( !defined($CTAPDB) ) $CTAPDB= TCTAP; $table_name 或 $table_name 数组 my tabrow;,Perl 脚本开发、测试、ETL上线,注释: 单行注释:# 多行注释:=pod =cut; 注意:如果是管道的内容注释,请遵循执行管道的程序语言。,Perl 脚本开发、测试、ETL上线,创建和调用子例程 sub subroutine_name statement1; . . statmentx; ,Perl 脚本开发、测试、ETL上线,管道 open(STDERR, ET ENDOFINPUT,Perl 脚本开发、

3、测试、ETL上线,Perl脚本测试 把脚本FTP到服务器ETL服务器作业目录下,用CMD或是CRT工具连到服务器,执行语句: Perl xxxx/xxx0200.pl 20100501.dir; Perl xxxx/xxx0200.pl 20100501.dir 0501.log; Nohup perl xxxx/xxx0200.pl 20100501.dir 0501.log &;,Perl 脚本开发、测试、ETL上线,ETL上线 测试完成并提交相关测试报告文档后,根据项目组的要求填写上线文档,完成上线 维护性上线: 要求记录修改的上线历史 批量上线:如果批量大,不一定保存该次上线历史,Pe

4、rl 脚本开发、测试、ETL上线,新上线作业: TST系统 作业名TST_JOB_E ETL服务器:AUTO1 脚本 tst_job_e0200.pl 在ETL服务器 建立JOB文件夹 Mkdir D:ETLAPPTSTTST_JOB_E; Mkdir D:ETLAPPTSTTST_JOB_Ebin; 把脚本tst_job_e0200.pl放到APPTSTTST_JOB_Ebin下。 配置JOB、作业源、作业依赖、作业触发,登录automation,Perl 脚本开发、测试、ETL上线,Automation操作演示,Perl 脚本开发、测试、ETL上线,Automation操作演示,配置JOB

5、,配置JOB Source,Perl 脚本开发、测试、ETL上线,Automation操作演示,Perl 脚本开发、测试、ETL上线,Automation操作演示,配置JOB Dependency,Perl 脚本开发、测试、ETL上线,Automation操作演示,配置JOB stream,系统ETL上线 作业定义,系统ETL上线 作业依赖,系统ETL上线 作业触发,Perl 脚本开发、测试、ETL上线,作业调度和作业日志,重置作业状态,Perl 脚本开发、测试、ETL上线,作业调度和作业日志,立刻强制重跑(不判断作业依赖条件),Perl 脚本开发、测试、ETL上线,作业调度和作业日志,作业调

6、度和作业日志,Perl 脚本开发、测试、ETL上线,Perl 脚本开发、测试、ETL上线,作业日志 点击view log File可以看明细日志,view Script File可以看脚本,这里可以对脚本更改,但严禁使用,Perl 脚本开发、测试、ETL上线,问题? TST_JOB_A数据重加载时,只要求重加载本身而不触发下游作业,各种ETL工具都有什么办法? Automation的做法是将触发表中TST_JOB_A与其下游的触发关系记录全部失效。 UPDATE etl.etl_job_stream SET enable=9 WHERE ETL_JOB=TST_JOB_A 跑完后再UPDATE

7、成 1,Teradata Client安装 Teradata架构 Teradata SQL Assistant END; CREATE MUTLISET TABLE TEMP_XX as . . ; INSERT INTO TEMP_XX . ; DELETE FROM TB_XXX WHERE STATISTICS_DT=CAST(:report_date AS DATE FORMAT YYYYMMDD) ; INSERT INTO TB_XXX SELECT STATISTICS_DT ,. ,. FROM TEMP_XX GROUP BY 1,2,. ; SET returnflag =

8、 1 ; END;,参数变量声明 In 输入 Out 输出 INOUT 输入输出,参数变量声明,变量赋值,调存储过程 CALL DWMART_XXX.PROC_TEST ( 20100501,returnflag ),Macro,CREATE MACRO new_dept (dept INTEGER ,budget DEC(10,2) DEFAULT 0 ,name CHAR(30) ,mgr INTEGER) AS ( INSERT INTO department (department_number ,department_name ,budget_amount ,manager_empl

9、oyee_number) VALUES( :dept ,:name ,:budget ,:mgr); SELECT department_number (TITLE number) ,department_name (TITLE name) ,budget_amouunt (TITLE budget) ,manager_employee_number (TITLE manager) FROM department WHERE department_number = :dept; );,运行宏new_dept EXEC new_dept (505 ,610000.00, Marketing Re

10、search, 1007);,View,REPLACE VIEW XXXX.VIE_SYS_XXX AS LOCKING TABLE TB_XXX_A FOR ACCESS LOCKING TABLE PDATA.TB_XXX_B FOR ACCESS LOCKING TABLE PDATA.TB_XXX_C FOR ACCESS SELECT T1.COLUMN1 ,. ,T2.COLUMN1 ,. ,T3.COLUMN1 ,. FROM PDATA.TB_XXX_A T1 INNER JOIN PDATA.TB_XXX_B T2 ON T1.COLUMNXX = T2.COLUMNXX A

11、ND T1.COLUMNXY = T2.COLUMNXY INNER JOIN PDATA.TB_XXX_C T3 ON T1.COLUMNX = T3.COLUMNX WHERE T1.COLUMN1=XXXXX ;,REPLACE VIEW XXXX.VIE_SYS_XXX AS SELECT T1.COLUMN1 ,. ,T2.COLUMN1 ,. ,T3.COLUMN1 ,. FROM PDATA.TB_XXX_A T1 INNER JOIN PDATA.TB_XXX_B T2 ON T1.COLUMNXX = T2.COLUMNXX AND T1.COLUMNXY = T2.COLU

12、MNXY INNER JOIN PDATA.TB_XXX_C T3 ON T1.COLUMNX = T3.COLUMNX WHERE T1.COLUMN1=XXXXX ;,Table,Set,不允许记录重复 CREATE SET TABLE pmart.RPT_NM_GRP_PRE_WARN_MON,( CAL_Month INTEGER TITLE 统计月份 ,ORG_NUM CHAR(12) TITLE 集团编号 ,City_ID CHAR(3) TITLE 地市标识 ,ORG_SUBS_GRP_NUM CHAR(10) TITLE 集团用户群编号 ,ORG_Title VARCHAR(2

13、00) TITLE 集团名称 ,ORG_Level CHAR(2) TITLE 集团级别 ,STAT_Item_Code CHAR(2) TITLE 统计项 ,STAT_Value DECIMAL(18,2) TITLE 统计值 ) PRIMARY INDEX (ORG_NUM);,MultiSet,允许记录重复 CREATE MULTISET TABLE pmart.RPT_NM_GRP_PRE_WARN_MON,( CAL_Month INTEGER TITLE 统计月份 ,ORG_NUM CHAR(12) TITLE 集团编号 ,City_ID CHAR(3) TITLE 地市标识 ,O

14、RG_SUBS_GRP_NUM CHAR(10) TITLE 集团用户群编号 ,ORG_Title VARCHAR(200) TITLE 集团名称 ,ORG_Level CHAR(2) TITLE 集团级别 ,STAT_Item_Code CHAR(2) TITLE 统计项 ,STAT_Value DECIMAL(18,2) TITLE 统计值 ) PRIMARY INDEX (ORG_NUM);,假设原有1286449条记录 插入:152853条记录 耗时:15秒,假设原有1286449条记录 插入:152853条记录 耗时:1秒,UNIQUE,建议:Teradata中都用 MultiSet

15、,若真要限定唯一性,可以通过UPI或USI实现,Table,永久表 临时表 可变临时表 在一个会话中,能够被多个查询使用。 占用SPOOLSPACE,在cache中保留表的定义,spool缓冲区中物化, 不使用数据字典 每个会话可以建立64个,可以随时被手动删除,会话结束时自动删除。 全局临时表 每个会话最多可以物化32个全局临时表。 空间占用Temporary Space,对会话而言,每个实例是本地的。物化表中内容与其他会话不共享。 会话结束后,物化的表被自动删除。(但基础定义仍然存储在数据字典中) 导出表 只有一个查询要求使用临时表,其他查询都不要求。 空间占用SPOOL SPACE,使用

16、 SELECT语句在spool缓冲区中创建导出表。 查询结果只使用一次。,永久表,CREATE MULTISET TABLE tctap.tap_c_kpi_assess_2 ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT ( KPI_ID CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE KPI标识 NOT NULL ,FREQ_ID CHAR(2) CHARACTER SET LATIN CASESPECIFIC TITLE 频度代码 NOT NULL

17、,DATA_DATE INTEGER TITLE 指标日期 NOT NULL ,DIM_VALUE_ID1 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度1 NOT NULL DEFAULT Z ,DIM_VALUE_ID2 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度2 NOT NULL DEFAULT Z ,DIM_VALUE_ID3 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度3 NOT NULL DEFAULT Z ,. ,DI

18、M_VALUE_ID18 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度18 NOT NULL DEFAULT Z ,DIM_VALUE_ID19 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度19 NOT NULL DEFAULT Z ,DIM_VALUE_ID20 CHAR(8) CHARACTER SET LATIN CASESPECIFIC TITLE 维度20 NOT NULL DEFAULT Z ,DIM_VALUE_IDn CHAR(8) CHARACTER SET LATIN

19、 CASESPECIFIC TITLE 维度n NOT NULL DEFAULT Z ,KPI_ASSESS_TYPE_ID CHAR(4) CHARACTER SET LATIN CASESPECIFIC TITLE KPI目标类型ID NOT NULL ,KPI_ASSESS_RESULT_ID CHAR(2) CHARACTER SET LATIN CASESPECIFIC TITLE KPI目标值返回值ID NOT NULL ,KPI_ASSESS_VALUE DECIMAL(18,2) TITLE KPI目标值) PRIMARY INDEX ( DATA_DATE ,KPI_ID ,

20、 DIM_VALUE_ID1) PARTITION BY RANGE_N(DATA_DATE BETWEEN 20000101 AND 20191231) UNIQUE INDEX (KPI_ID,FREQ_ID,DATA_DATE,DIM_VALUE_ID1,DIM_VALUE_ID2,DIM_VALUE_ID3,.,DIM_VALUE_ID18, DIM_VALUE_ID19,DIM_VALUE_ID20,DIM_VALUE_IDn,KPI_ASSESS_TYPE_ID,KPI_ASSESS_RESULT_ID); COLLECT STATISTICS ON tctap.tap_c_kpi

21、_assess_2 COLUMN ( DATA_DATE ,KPI_ID , DIM_VALUE_ID1); COLLECT STATISTICS ON tctap.tap_c_kpi_assess_2 COLUMN ( DATA_DATE ); COLLECT STATISTICS ON tctap.tap_c_kpi_assess_2 COLUMN (KPI_ID,FREQ_ID,DATA_DATE,DIM_VALUE_ID1,DIM_VALUE_ID2,DIM_VALUE_ID3,. ,DIM_VALUE_ID18,DIM_VALUE_ID19,DIM_VALUE_ID20,DIM_VA

22、LUE_IDn,KPI_ASSESS_TYPE_ID,KPI_ASSESS_RESULT_ID); COLLECT STATISTICS ON tctap.tap_c_kpi_assess_2 COLUMN (KPI_ID);,设计原则: 1、调整PI,在保留一定数据分布均匀度的基础上,把PI字段从N个减少为3个,提高数据查询速度。 2、增加PPI,提高数据插入性能与查询性能。 3、增加USI,而不是把Multiset改为Set;虽然这两种方式都能保证数据记录的唯一性,但是前者效率会更高。 4、增加统计信息,有助于系统优化SQL查询。,可变临时表,建表语句: CREATE VOLATILE M

23、ULTISET TABLE vt_RETAIN_ANLY_MON ( col1 , col2 )PRIMARY INDEX (PI_Cols) ; 复制表结构: CREATE MULTISET VOLATILE TABLE VT_APP_AGG_INDEX_H AS DWMart_DOA.DOA_APP_AGG_INDEX_H WITH DATA(NO DATA) ON COMMIT PRESERVE ROWS ; CREATE VOLATILE MULTISET TABLE VT_RETAIN_ANLY_MON AS ( SELECT col1,col2, FROM WHERE GROUP

24、BY . )WITH DATA PRIMARY INDEX (PI_Cols) ON COMMIT PRESERVE ROWS;,ON COMMIT PRESERVE ROWS;,全局临时表,建表语句 CREATE GLOBAL TEMPORARY TABLE gt_deptsal (deptno SMALLINT ,avgsal DEC(9,2) ,maxsal DEC(9,2) ,minsal DEC(9,2) ,sumsal DEC(9,2) ,empcnt SMALLINT) ON COMMIT PRESERVE ROWS; CREATE INDEX (empcnt)ON gt_dep

25、tsal; COLLECT STATISTICS ON gt_deptsal INDEX (deptno); COLLECT STATISTICS ON gt_deptsal COLUMN avgsal; HELP STATISTICS gt_deptsal;,TEMPORARY,导出表,示例: SELECT* FROM ( SELECTdeptno,SUM(sal) AS sal_sum FROMscott.emp GROUPBY deptno)tmp,固化临时表,固化临时表,就是把查询结果存放到一张物理表。 共下次分析或他人使用。 Session断开之后,仍然可以使用。 在性能优化中也常被

26、用到的一种做法。 示例1: CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC AS ( SELECT * FROM pview.vw_net_gsm_nl ) WITH NO DATA PRIMARY INDEX (subs_id) ; INSERT INTO tttemp.TMP_BOSS_VOIC SELECT * FROM pview.vw_net_gsm_nl WHERE *; 示例2: CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC AS ( SELECT * FROM pview.vw_net_gsm_nl

27、WHERE * ) WITH DATA PRIMARY INDEX (subs_id); 示例3:(复制表,数据备份) CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC AS pdata.tb_net_gsm_nl WITH DATA ;,修改表定义,常见的表定义修改操作: 增加字段 修改字段长度 建议的操作流程 Rename table db.tablex as db.tabley; 通过Show table语句获得原表db.tablex的定义 定义新表: db.tablex Insert into db.tablex(。) select 。 From d

28、b.tabley; Drop table db.tabley; Teradata提供ALTER TABLE语句,可进行修改表定义但,不建议采用ALTER TABLE方式。,Update/Delete操作,UPDATE Customer SET Credit_Limit = Credit_Limit * 1.20 ;,CREATE multiset TABLE Customer_N AS Customer with no data; INSERT INTO Customer_N SELECT Credit_Limit * 1.20 FROM Customer ; DROP TABLE Custo

29、mer ; RENAME TABLE Customer_N TO Customer ;,CREATE multiset TABLE Trans_N as Trans with no data; INSERT INTO Trans_N SELECT * FROM Trans WHERE Trans_Date 981231; DROP TABLE Trans; RENAME TABLE Trans_N TO Trans;,先建立空表,通过insert / select 方式插入数据这是非常快的操作! 先备份,然后做变更操作,更加安全!,对于大表进行Update/DELETE操作,将耗费相当多的资源

30、与相当长的时间。 Update/Delete操作,需要事务日志TJ(Transient Journal) 以防意外中断导致数据受到破坏 在Update/Delete操作中途被Cancel,系统则需回滚,这将耗更多的资源与时间!,DELETE FROM Trans WHERE Trans_Date 990101;,Insert/select : the fast path,Multi-statement insert/select,Delete all : the fast path,Teradata Client安装 Teradata架构 Teradata SQL Assistant SELE

31、CTHASHAMP(HASHBUCKET(HASHROW(Base_Index_Id ,Index_Attrib_Id , Org_Id ,Currency_Cd ,Statistics_Dt ) AS AMP # ,COUNT(*) FROMDWMart_DOA.DOA_BAS_AGG_INDEX_H GROUPBY 1 ORDERBY 2 DESC ;,SELECT HASHROW (7202) AS Hash Value ,HASHBUCKET (HASHROW (7202) AS Bucket Num ,HASHAMP (HASHBUCKET (HASHROW (7202) AS AM

32、P Num ,HASHBAKAMP (HASHBUCKET (HASHROW (7202) AS AMP Fallback Num ;,Identifying Rows,Consideration #1 A Row Hash = 32 bits = 4.2 billion 可能的值 因为可能的值有无穷多,一些值必须共享相同的Row Hash,A row hash is not adequate to uniquely identify a row.,Conclusion: 一个Row Hash不足以唯一确定一行。,Consideration #2 一个主索引可以是非唯一的(NUPI) 不同的行

33、有相同的主索引值因而有相同的Row Hash,哈希碰撞 (哈希冲突),The Row ID,Storing Rows,Assumptions: Last_Name is defined as a NUPI. All rows in this example hash to the same AMP.,Add a row for John Smith,Add a row for Sam Adams,Add a row for Dan Jones - (Hash Synonym),Add a row for Dan Jones - (Hash Synonym),0016 5557 0000 000

34、1 Smith John,0016 5557 0000 0002 Smith Fred,1058 9829 0000 0001 Adams Sam,0016 5557 0000 0003 Jones Dan,Locating a Row On An AMP Using a PI,Secondary Indexes,次索引是访问表里的行的一种可替换的方法。 一个表可以有0到32条次索引。 次索引: 不影响表的分配 在磁盘空间和维护方面增加系统开销 在需要的时候可以被动态删除或增加 是选择用来提高表的性能,There are 3 general ways to access a table: Pr

35、imary Index access(one AMP access) Secondary Index access (two or all AMP access) Full Table Scan(all AMP access),Choosing a Secondary Index,A Secondary Index may be defined . 在表建立时(CREATE TABLE) 在表建立以后(CREATE INDEX) 最多使用16列(V2R4.1); 64列(V2R5.0),如果次索引选择的列是唯一的,称为USI(唯一次索引) 通过一个USI访问行需要2次AMPs操作,USI,如果

36、次索引选择是非唯一的,称为NUSI(非唯一次索引) 通过一个NUSI访问行需要全部的AMP,NUSI,CREATE UNIQUE INDEX (Employee_Number) ON Employee;,CREATE INDEX (Last_Name) ON Employee;,Unique Secondary Index (USI) Access,Non-Unique Secondary Index (NUSI) Access,PI vs SI,Full Table Scans,Logical Example of NPPI versus PPI,Teradata Client安装 Tera

37、data架构 Teradata SQL Assistant ,Join 的列都是两个表的PI不需要数据重分布.,Subs_idBC PI 100 214 433,T2 Subs_idBC PI 100 725002,T2 Subs_idBC PI 200 725002,AMP2,话单表,用户资料表,Join之前的重分布,AMP1,SELECT. . . FROM用户资料表 T1 INNER JOIN客户资料表 ON T1.Cust_id = T2.Cust_id;,Join 的列都是在一个表上是PI,另外一个表上不是PI是PI的表不需要重分布.,Subs_id Cust_id PI 100 2

38、14,T2 Cust_idBC PI 214 725002,Subs_id Cust_id PI 200 214,T2 Cust_idBC PI 408133009,AMP2,用户资料表,客户资料表,Join之前的重分布,AMP1,Subs_id Cust_id PI 100 214 100 408,T2 Cust_idBC PI 214 725002,Subs_id Cust_id PI 200 214,T2 Cust_idBC PI 408133009,AMP2,用户资料表,客户资料表,Subs_id Cust_id PI 100 214 200 214,Subs_id Cust_id P

39、I 100 408,Spool空间,重分布的问题,大表的代码字段与小表的PI字段 SELECT city_name , COUNT(DISTINCT subs_id) FROM TB_Ofr_Subs A JOIN TB_CDE_City B ON A.city_id = B.city_id 如果选择重分布的策略,意味着将所有的用户按照地市重分布到所有的AMP上 系统总共130个AMP、总共13个市 意味着只有13个AMP有数据,其它AMP根本不能被用到 同时,由于A市的用户数较大,意味这A市所在的AMP上数据量很大,造成了13个AMP运行过程中的不均匀。,Join之前的复制小表到所有的AMP

40、,AMP1,City_id City_name PI 100 A市,T2 Cust_id City_id PI 214 200,City_id City_name PI 200 A市,T2 Cust_id City_id PI 408 100,AMP2,地市代码表,用户资料表,City_id City_name 100 A市 200 B市,City_id City_name 100 A市 200 B市,Spool空间,复制小表到Spool空间,数据已经到了一个AMP上,关联怎么做?,关联策略 Merge Join,适用情况: 两个表的数据量都比较大时 例如 100万 30万,关联策略 Nest

41、ed Joins,关联策略 Product Join,适用情况: 大表非PI字段对小表 例如 30万 50,关联策略 Hash Join,适用情况: 大表非PI字段对中等小的表 例如 700万 1万,Merge Join (e.g.),1)关联表PI相同 SELECT a.acyc_id, COALESCE(c.city_code,*), COALESCE(c.cmcc_brand_code,*), COALESCE(c.user_id,*) FROMdwpmdvw.vw_smsdetail_mon a LEFT JOIN dwpmdvw.vw_user_info_mon c ON a.use

42、r_id=c.user_id WHERE a.acyc_id=200611 2)PI不同 SELECT COALESCE(a.city_code,*), COALESCE(a.cmcc_brand_code,*), COALESCE(a.user_id,*) FROM dwpmdvw.vw_user_info_mon a LEFT JOIN dwpdata.tf_f_customer b ON a.cust_id=b.cust_id WHERE a.acyc_id=200611 AND b.eparchy_code = 0913,如何确认自己的查询效率很高,Explain SQL语句 数据分布

43、的变化(Redistribute,Duplicate) . which is redistributed by hash code to all AMPs Redistributing data (in SPOOL) in preparation for a join. . which is duplicated on all AMPs Duplicating data (in SPOOL) from the smaller table in preparation for a join.,Merge Join (Matching Primary Indexes),Hash Join,Prod

44、uct Join,Product Join (cont.),EXPLAIN EXPLANATION V2R6.1 EXPLAIN - 1)First, we lock a distinct TFACT.pseudo table for read on a RowHash to prevent global deadlock for TFACT.E. 2)Next, we lock a distinct TFACT.pseudo table for read on a RowHash to prevent global deadlock for TFACT.D. 3)We lock TFACT.

45、E for read, and we lock TFACT.D for read. 4)We do an all-AMPs RETRIEVE step from TFACT.D by way of an all-rows scan with no residual conditions into Spool 2 (all_amps), which is duplicated on all AMPs. The size of Spool 2 is estimated with high confidence to be 11,224 rows. The estimated time for th

46、is step is 0.03 seconds. 5)We do an all-AMPs JOIN step from Spool 2 (Last Use) by way of an all-rows scan, which is joined to TFACT.E by way of an all-rows scan with no residual conditions. Spool 2 and TFACT.E are joined using a product join, with a join condition of (TFACT.E.Dept_Number = Dept_Numb

47、er) OR (TFACT.E.Employee_Number = Dept_Mgr_Number). The input table TFACT.E will not be cached in memory, but it is eligible for synchronized scanning. The result goes into Spool 1 (group_amps), which is built locally on the AMPs. The result spool file will not be cached in memory. The size of Spool

48、 1 is estimated with no confidence to be 973,873 rows. The estimated time for this step is 24.34 seconds. 6)Finally, we send out an END TRANSACTION step to all AMPs involved in processing the request. -The contents of Spool 1 are sent back to the user as the result of statement 1. The total estimate

49、d time is 24.38 seconds.,n-Table Joins,Teradata Client安装 Teradata架构 Teradata SQL Assistant ,如果改变一下上面的问题,要求查找员工姓中任意位置有字母E或者S的员 工,则应使用ANY或SOME。 SELECT first_name ,last_name FROM employee WHERE last_name LIKE ANY (%E%,%S%);,大小写敏感,SELECT 1 WHERESc (CS)=sc; SELECT 1 WHERE(Sc(UPPERCASE)(CASESPECIFIC)=sc;

50、SELECT 1 WHERE Sc(CASESPECIFIC)=sc; SELECT 1 WHERE Sc(NOT CASESPECIFIC)=sc; SELECT UPPER(sc); SELECT LOWER(Sc); SELECT Sc(UPPERCASE);,Teradata / Oracle 常用语法比较,Teradata / Oracle 常用语法比较(cont.),TRIM函数,语法 意义 TRIM () 去除字符数据中前后端的空格或者二进制数据中前后头的零 TRIM (BOTH FROM ) 同上 TRIM (TRAILING FROM ) 去除后端的空格或二进制零 TRIM

51、(LEADING FROM ) 去除前端的空格或二进制零 SQL:输出: SELECT TRIM( abc ); abc SELECT TRIM (TRAILING FROM abc ) abc SELECT TRIM (LEADING FROM abc ) abc Teradata没replace函数,SQL变量,SELECT DATABASE; 显示当前数据库 DBC SELECT USER; 显示当前Session登陆的用户名 DBC SELECT DATE, CURRENT_DATE ; 显示当前日期 2010-05-21 , 2010-05-21 定义格式: SELECT CAST(

52、DATE AS DATE FORMAT YYYYMMDD) SELECT TIME, CURRENT_TIMESTAMP(0);显示当前时间 08:43:17, 2007-08-06 2010-05-21 08:43:54+00:00 转换: SELECT CAST(CURRENT_TIMESTAMP(0) AS CHAR(19); 2010-05-21 08:44:10 SELECT CAST(CURRENT_TIMESTAMP(0) AS TIMESTAMP(0) FORMAT YYYY-MM-DDBHH:MI:SS),日期(DATE)的操作,取当前天: SELECT CAST( CURR

53、ENT_DATE AS DATE FORMAT YYYYMMDD) 取当前天的前一天,后一天 SELECT CAST( CURRENT_DATE -1 AS DATE FORMAT YYYYMMDD) SELECT CAST( CURRENT_DATE + 1 AS DATE FORMAT YYYYMMDD) 取前(后)一个月的同一天 SELECT ADD_MONTHS(CURRENT_DATE , -1) SELECT ADD_MONTHS(CURRENT_DATE , 1) 若current_date为 20100331,20100331,20090229结果是什么? SELECT ADD

54、_MONTHS(DATE2009-02-28,-12) SELECT ADD_MONTHS(DATE2009-02-28,1) 取当前天所在月的第一天 SELECT SUBSTR(CAST(CURRENT_DATE AS DATE FORMAT YYYYMMDD),1,6) | 01; 取当前天所在月的最后一天 SELECT CAST( SUBSTR(CAST( ADD_MONTHS(CURRENT_DATE,1) AS DATE FORMAT YYYYMMDD),1,6) | 01AS DATE FORMAT YYYYMMDD) -1 日期相减 SELECT ( DATE 2007-03-0

55、1 - DATE 2004-01-01) day(4); SELECT (DATE2007-03-01- DATE2004-01-01) month(4) ; 时间相减 SELECT (CAST(endtime AS TIMESTAMP) - CAST(starttime AS TIMESTAMP) ) MINUTE(4) AS m; SELECT (CAST(endtime AS TIMESTAMP) - CAST(starttime AS TIMESTAMP) ) SECOND(4) AS m;,日期(DATE)的操作(cont.),SELECT EXTRACT(YEAR FROM DAT

56、E); SELECT EXTRACT(MONTH FROM DATE + 30); SELECT EXTRACT(DAY FROM DATE + 2); SELECT EXTRACT(HOUR FROM TIME); SELECT EXTRACT(MINUTE FROM TIME); SELECT EXTRACT(SECOND FROM TIME); SELECT ADD_MONTHS(DATE,2); SELECT ADD_MONTHS(DATE,12*8); SELECT ADD_MONTHS(2002-03-19,12);,系统日历: sys_calendar.calendar,时间范围

57、: 1900-01-01至2100-12-31 包括: 年/季/度/月/周/天的信息 day_of_week day_of_month day_of_year month_of_year quarter_of_year ,IN ,Rank ,INSERT INTO wt_k( Currency_Cd ,Fx_Mid_Price) SELECT TRIM(Currency_Cd) ,CAST(Fx_Mid_Price/Unit AS DECIMAL(18,8) FROM $PDATADB.T99_EXCHANGE_RATE_PARAM_H WHERE Record_Stat_Cd=0 AND E

58、ffective_Dt=CAST($TX_DATE AS DATE FORMAT YYYYMMDD) QUALIFY ROW_NUMBER() OVER(PARTITION BY Currency_Cd ORDER BY Effective_Dt DESC,Posted_Price_Tm DESC)=1;,PI(Primary Index 主索引)的选择,PI影响数据的存储与访问,其选择标准: 不同值尽量多的字段(More Unique Values) 使用频繁的字段:包括值访问和连接访问 少更新 PI字段不宜太多 最好是手动指定PI,例子: CREATE MULTISET TABLE dwPada.TB_XXX_M( CAL_Month INTEGER TIT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论