Teradata新特性之reset when使用
一同事问如何用SQL获取各区域用户数连续增长的天数。想到Teradata新特性中的reset when正好可以实现此功能。下面是我的测试案例,分享给大家:[@more@] Step 1: CREATE the FOLLOWING TABLE: CREATE TABLE Test.Reset_when_Monthly_Sales ( SalesMonth INTEGER , Sales INTEGER ) UNIQUE PRIMARY INDEX (SalesMonth) ; -- Completed. 0 rows processed. Step 2: Populate the TABLE AS follows: INSERT INTO Test.Reset_when_Monthly_Sales VALUES (1, 4500) ; INSERT INTO Test.Reset_when_Monthly_Sales VALUES
Teradata TPT处理Unicode方法
使用TPT做数据同步时报错:TPT12108: Output Schema does not match data from SELECT statement。测试发现,同步不包含Unicode字符集的表时,没有任何问题,同步包含Unicode字符集的表示,提示上述错误。那么,该问题怎么解决呢?[@more@] 上述错误的原因可以解释为:There is a schema mismatch between the schema defined in TPT script and the schema returned from the select request sent to DBS. 要避免此问题其实比较简单,你只需要设置与session字符集相匹配的字段长度即可: 如果你在TPT脚本中将session的字符集设置为U
获取Teradata表访问频率信息
在日常维护及系统优化过程中,我们有时需要分析哪些数据库对象是使用频率较高的,哪些对象是长期不用的,从而有依据的制定优化策略。对访问频率高的,尽量做到物理模型最优(如PI是最经常用来关联的,数据分布是均匀的等)。而那些长期不用的对象(表/视图),可以考虑删除。使用频率高的字段和使用频率低的字段进行表拆分...那么如何获取Teardata表/视图/字段的访问频率信息呢?下面做详细说明:[@more@] 按照下列步骤打开/关闭开关:1、 用secureCRT类的工具连接到数据库节点机;2、 输入cnsterm 6 打开窗口6;3、 输入 start db
用trim去掉字符串末尾的任意字符
一朋友问到,如何去掉字符串末尾的指定字符。当然,方法很多,最易想到的是用UDF,将指定字符替换为空串。其实,不用这么麻烦,teradata提供的trim函数就可以很简单的实现这一功能:[@more@]SELECT 'aabcdedcbaa' AS a,TRIM(BOTH 'a' FROM a) --去掉前后的a字符,TRIM(LEADING 'a' FROM a) --去掉开头的a字符,TRIM(TRAILING 'a' FROM a) --去掉结尾的a字符;
Teradata时间操作
最近,很多朋友问到Teradata时间的处理,并且差不多是一个问题--时间差操作。大家都在做什么呢?下面用一个SQL来说明此类问题,供参考:SEL CURRENT_TIMESTAMP ,CURRENT_TIMESTAMP + INTERVAL '1' YEAR,CURRENT_TIMESTAMP - INTERVAL '1' MONTH,CURRENT_TIMESTAMP - INTERVAL '1' DAY,CURRENT_TIMESTAMP - INTERVAL '1' HOUR,CURRENT_TIMESTAMP - INTERVAL '1' MINUTE;下面为时间相关的其它操作:http://miguelmin.itpub.net/post/38274/476094[@more@]
Teradata 之top n与sample n
Teradata取n条样本数据的方法有两种:select top x * from table;select * from table sample n;那么二者有什么区别呢?说明如下:TOP N 如果有Order By关键字首先要对数据库的数据进行排序,然后获取N条数据或者抽样比率为N;如果没有Order By关键字,要做一次STAT FUNCTION的全AMP收集,然后选择某一个或者几个AMP 来抽取数据。Sample N 首先要对数据库的数据进行全表扫描,然后获取N数据;采用的是Sampling的形式。[@more@]性能比较:当数据量比较小的时候,TOP N的速度要比Sample的速度快;当数据量比较大的时候,Sample N的速度要比
谁将是甲骨文的下一个收购目标(转)
导语:国外媒体今天发表文章,援引咨询公司Software Advice的一项调查对甲骨文的下一步收购计划进行了分析。Teradata竟然排名第二。以下是文章全文:[@more@]现在距离甲骨文公司的上一次收购(四月中旬收购Phase Forward)已经过去好几个月了,经验告诉我们宣布重大收购的决定是迟早的事情。对CEO拉里·埃里森来(Larry Ellison)说,9月中旬举行的甲骨文全球技术与应用大会(Oracle Open World)将是宣布其最新收购交易的理想场合。Software Advice的调查结果咨询公司Software Advice的分析师史蒂芬·詹尼斯(Stephen Jannise)对此做了一项调查,
Teradata Multi PPI (多级分区表)
Some one ask me these Questions:I have created MLPPI on two columns in a big table. First columns is a date column and second is area_code having 20 distinct values (1,2,3..)I want to know that -Do I need to use both MLPPI columns in my query in order to make use of PPI or partition will be used even if the first DATE column is used in the filter condition?How can I find out from explain plan how many partitions are being used. When I am using DATE only as a filter condition, explain plan shows
Teradata基础教程
百度文档把这个基础文档买10个财富值,看不下去了,放这,需要的下去吧,呵呵。Teradata基础教程.pdf[@more@]
Teradata自定义函数Replace
Teradata没有函数replace,为了方便使用,定义了一个。其实也挺简单的,描述如下:一、用c编写一个replace函数,挺简单,也可以在网上找到源码,编译通过,能达到目的即可。二、运行一个bteq,将自定义函数载入。详细描述如下:[@more@]a、编写teradata创建自定义函数ddl:REPLACE FUNCTION TEST.treplace ( input_string VARCHAR(16000) CHARACTER SET LATIN, search_string VARCHAR(512) CHARACTER SET LATIN, replace_string VARCHAR(512) CHARACTER SET LATIN)RETURNS VARCHAR(16000) CHARACTER SET LATINSPECIFIC replace2LANGUAG
Just a test
database TEST;-- generate test datacreate table char_testas(select calendar_date - current_date as upi_id, trim(trailing from substring('I have a query which Hot amp Cpu/Impact on CPu is 19.6 what does it mean?It means the hot amp is doing 19.6 times as much work as the average amp. This is very skewed, but may be acceptable for a very small query (for example, less than 5 CPU seconds). You always have to consider CPU skewing in relation to the size of the query. Th
Teradata中的四舍五入问题
在Teradata做数据舍入时,发现一些问题,如下例:select cast('1234.505' as decimal(18,2))--1234.50 select cast('1234.515' as decimal(18,2))--1234.52到底时怎么造成大的呢?[@more@]查资料得知:Teradata中四舍五入的规则由DBSCONTROL下的参数 RoundHalfwayMagUp 决定,默认情况下RoundHalfwayMagUp = FALSE,意为按照Teradata的规则进行进位。当RoundHalfwayMagUp设为TRUE时,和正常的进位没有区别。Teradata的进位规则考虑的是:5是个中间值,进位或不进位都欠妥。因此他采取一种折中处理方法:1、当5后面有1位不为0时,则进位;2
Teradata PI
可以说PI的合理运用是Teradata性能及各种优点的保障,那么到底怎么选择PI呢?资料上说的无非两种考虑,一是保证数据分布均匀,二是选择经常作为访问条件。但是日常工作中,我们经常会发现,现实可能并不是那么美好,经常会出现上述两中考虑相冲突的情况,也就是说能保障均匀分布的不是我们访问会用到的字段,常作为访问条件的字段不能保证数据均匀的分布。那怎么办呢?我现在的做法是,对于大表,优先考虑分布,小表优先考虑访问。有更好的方法么?下面是资料对于PI的介绍:[@more@]Module 4:PI1.Keys vs Indexes• 键: 标示表和系统
oleload from excel 2007
在http://miguelmin.itpub.net/post/38274/476403中我提到,老版本oleload不支持对excel2007数据的导入。在Teradata 12中,已经提供了对office 2007的支持,与前述方法相比,所要改变的仅仅是:[@more@]1、ole db provider选择12版本;2、将 Extended Properties的值设置为:“Excel 12.0;IMEX=1"
Teradata自增量
定义两个表如下:create table TEST.i1 ( i INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1INCREMENT BY 1NO MAXVALUENO CYCLE),STR VARCHAR(20)) unique primary index i1 (i);[@more@]create table TEST.i2 ( i INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1INCREMENT BY 1NO MAXVALUENO CYCLE),STR VARCHAR(20)) unique primary index i2 (i)往表i2里面插入五条数据(执行5次下列语句):INSERT INTO TEST.i2(STR)VALUES('1')将i2的数据导入到i1:INSERT INTO TEST.i1SELECT * FROM TEST.i2再往i1里面插入数据:INS
暂时告别Teradata
用Teradata两年多了,通过各位的帮助和自己的努力,学习了不少的Teradata知识,在系统管理和调优方面也取得了一点点的成绩。为了更广阔的提升空间,我选择离开现有公司,到新的天地去充实自己。在此,我感谢各位大哥,各位朋友给我的鼓励及帮助,也为我的离开给大家带来的不便表达一声歉意。新的工作或许不能用Teradata了,但我相信,数据库有着绝大多数的共同点,我也可以用好别的数据库,也一样可以成为小环境内技术不错的团队成员。[@more@]之前,基本上专注在技术这块,对于新的机会,我希望自己能在业务方面有所提升,提升数据敏感性
Teradata spool空间2
系统在下列情况下会使用spool空间:• 在session没有结束时,每个用户查询的返回值。因此,为了存储查询的返回值,每个用户都必须有足够的spool空间。• 大表. • Large volatile tables. These tables require more available spool space.对系统需要的spool空间的粗略估计:对于没有fallback,无compression,且工作量适中的系统,spool空间应占系统MAXPERM的30%,或者占系统CURRENTPERM的40%。[@more@]下列情况下需要更多的spool空间:• 高压缩比的数据需要更多的spool空间。-- 压缩可以降低current perm data sto
时间型分区字段不走分区的解决
表的字段date_id定义为Integer型,并且date_id为本表分区字段。现在有一个处理,需要取表中本月第一条到目前的累积数据。老虎的sql如下:select *FROM PV_MART_A.FIN_MID_SERV_INC_DAILY A1 WHERE Date_Id <=CAST('20090818' AS INTEGER)-2and substr(cast(date_id as VARCHAR(8)),1,6)=substr((cast((CAST(CAST('20090818' AS DATE FORMAT 'YYYYMMDD')-2 AS INTEGER)+19000000) as varchar(8))),1,6); 因为上述sql条件等号的左右都做了处理,毫无疑问她不会走分区。[@more@]修改sql如下: select * FROM PV_MART_A.F
查看历史统计信息收集情况
下面的sql可以得出以往收集统计信息的具体信息:[@more@]SELECT DatabaseName, TableName, ColumnName, /** stats collected on: 'C' --> Column 'I' --> Index 'M' --> Multiple columns (V2R5) **/ StatsType, /** collect stats date **/ CollectDate, /** collect stats time **/ CollectTime, /** V2R5: sample size used for collect stats**/ CASE SampleSize WHEN 0 THEN 100 ELSE
Teradata的数据保护
同其他的数据库系统相比,Teradata数据库提供了更多的数据保护措施。概括起来有以下几种:锁保护、fallback机制、Recovery Journals、Cliques、Transient Journal、ARC工具、Permanent Journal,当然还有最底层的RAID技术,不过RAID技术与Teradata本身无关,这里不做说明。[@more@]一、Locks锁可以防止多用户在同一时刻试图修改同一数据而影响数据的完整性。这种并发控制是通过锁定目标数据来实现的。锁是在请求操作的同时自动加载的,在请求完成后自动释放。另外,用户是可以改变锁的类型。有四种类型锁:有四种类型的锁Exclusive --- 防