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的片段