欢迎投稿

今日深度:

teradata 预先探查数据分布,

teradata 预先探查数据分布,


teradata是一款MPP架构的数据库,数据装载到数据库的时候会被切分到不同的节点,计算数据的时候每个节点负责计算各自的数据并返回给MPL(Message Passing Layer)做最后的计算。

使用teradata以来总有一个困惑,数据装载到数据库后才发现表的倾斜度不在我们规定的阀值之内(尽管从技术角度讲选择一个重复值低的字段做PI比较合理 ),特别是大表,数据倾斜影响MPP的性能。因此我们需要为我们所选择的PI负责任,那是否可以预先探查一下我们数据的分布情况呢。

假设我们teradata总共有146个AMP,并且PI字段CNAME DISTINCT以后的值小于我们AMP的个数,我们可以使用下面简单的SQL基本确我们的数据分布:

SELECT CNAME, COUNT(CNAME)
  FROM TNAME
 GROUP BY 1
 ORDER BY 2;

但是假如CNAME DISTINCT以后的值远远大于我们AMP的个数,是否能探查我们数据的分布呢?

翻看了teradata的文档终于找到了有关hash function的片段。

teradata的hash functions:

 1. HASHROW (column(s))     计算row的hash值
 2. HASHBUCKET (hashrow)    根据hashrow计算hashbucket,代表了一个hashmap的入口
 3. HASHAMP (hashbucket)    根据hashbucket确定数据分布到哪一个AMP

现在我们可以在数据装载之前使用如下的SQL精准的探查我们数据的分布:

SELECT HASHAMP(HASHBUCKET(HASHROW(CNAME1,CNAME2))) AS "AMP",
       COUNT(HASHAMP(HASHBUCKET(HASHROW(CNAME1,CNAME2)))) AS ROW_COUNT
  FROM TNAME
 GROUP BY 1
 ORDER BY 2 

www.htsjk.Com true http://www.htsjk.com/teradata/28733.html NewsArticle teradata 预先探查数据分布, teradata是一款MPP架构的数据库,数据装载到数据库的时候会被切分到不同的节点,计算数据的时候每个节点负责计算各自的数据并返回给MPL(Message Passing Laye...
相关文章
    暂无相关文章
评论暂时关闭