ITPub博客

首页 > 数据库 > 数据库开发技术 > 整型日期做PPI,sql不走partition

整型日期做PPI,sql不走partition

原创 数据库开发技术 作者:miguelmin 时间:2009-05-12 19:41:18 0 删除 编辑
CREATE MULTISET TABLE tmp_tmp1,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT
(
Date_Id INTEGER TITLE '日期' NOT NULL,
...
)
PRIMARY INDEX XIE1tmp_tmp1 ( ...)
PARTITION BY RANGE_N(Date_Id BETWEEN 20070101 AND 20101231 EACH 1 );
[@more@]
CASE 1:
select count(*)
FROM tmp_tmp1
where T1.Date_Id >= 20090401
Explanation:
........
2) Next, we do an all-AMPs SUM step to aggregate from 10831
partitions of tmp_tmp1with a condition
of ("tmp_tmp1.Date_Id >= 20090401").
...............
CASE 2:
select count(*)
FROM tmp_tmp1
where T1.Date_Id >= cast(CAST(ADD_MONTHS(DATE-1,-1) AS DATE FORMAT 'YYYYMM')||'01' as integer)
Explanation:
.......
2) Next, we do an all-AMPs SUM step to aggregate from all partitions
of tmp_tmp1with a condition of (
"tmp_tmp1.Date_Id >= ((ADD_MONTHS(((DATE )- 1 ),-1 )(VARCHAR(6), CHARACTER SET UNICODE,
NOT CASESPECIFIC, FORMAT 'YYYYMM'))||'01'(INTEGER, FORMAT '-(10)9'))").
..........
实验得出,where条件中有任何的数据处理,将不会走group partitions,据说这是teradata老版本的bug,似乎老外用的已经没有这个问题了,为什么给我们用旧的呢?鄙视老外一下!
不知道当初为什么要把date_id设计成integer而非date。定义成整型,定义范围内的很多partition牙根不会用到,比如尾数大于30的任何数。上述CASE 1中,实际用到的partition也就40个,但执行计划中为10831个,类型定义为罪魁祸首。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16723161/viewspace-1022020/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: teradata limits
请登录后发表评论 登录
全部评论
  • 博文量
    138
  • 访问量
    1628713