欢迎投稿

今日深度:

teradata PI-,

teradata PI-,


(–本文是个人学习和使用过程中的总结,如有错误欢迎指正)

teradata Primary Index简称PI
teradata 建表时强烈建议明确指定PI列(尽管不指定PI teradata会根据DBScontrol配置自动选定PI),可以是一列或者多列,最多64列
PI主要有三个作用:

PI可以分为两类:(UPI or NUPI)
UPI(Unique Primary Index):不可以包含相同的值,对于装载数据总是将table的数据均匀的分布到AMP上,对于检索数据总是one-AMP operation类型。
语法:

CREATE TABLE sample_1
 (col_a INT
 ,col_b INT
 ,col_c INT)
UNIQUE PRIMARY INDEX (col_b);

UPI分布:

NUPI(Non-Unique Primary Index ):可以存在相同的值,对于装载数据相同的值会被分布到同一个AMP上
语法:

CREATE TABLE sample_2
 (col_x INT
 ,col_y INT
 ,col_z INT)
PRIMARY INDEX (col_x);

NUPI分布:

PI为多列的语法:

CREATE TABLE sample_2
 (col_x INT
 ,col_y INT
 ,col_z INT)
PRIMARY INDEX (col_x,col_y, ..);

PI = (A, B)=
Hash (A) * Hash (B) + Hash (A) + Hash (B) =
Hash (B) * Hash (A) + Hash (B) + Hash (A)

本文简单介绍有关PI在数据分布这一方面的作用,其他两个单独介绍。
teradata 对于数据的切分对用户来说是透明的,我们只需要指定好PI,数据分布的工作由teradata来完成。
那么teradata是如何来分布数据的呢? teradata数据库分布数据依赖于hash算法,针对我们PI列中的值做hash。
如下图可以看出来PE负责对PI做hash,BYNET负责分布数据

Hash算法大致处理流程:
PI列的值经过hash算法返回32 bit的row hash,其中前16位为Destination Selection Word (DSW),该值代表了hash map的入口,也就决定了哪一个AMP接受数据,然后由AMP使用row hash将数据存放到磁盘中。

有关teradata hash function以及如何在数据装载前探查数据分布请参考
使用teradata hash function探查数据分布

www.htsjk.Com true http://www.htsjk.com/teradata/27825.html NewsArticle teradata PI-, (–本文是个人学习和使用过程中的总结,如有错误欢迎指正) teradata Primary Index简称PI teradata 建表时强烈建议明确指定PI列 (尽管不指定PI teradata会根据DBScontrol配置自动选定...
相关文章
    暂无相关文章
评论暂时关闭