📅  最后修改于: 2021-01-11 11:37:21             🧑  作者: Mango
哈希算法是充当转换表的一段代码。根据主索引值将一行分配给特定的AMP。 Teradata使用哈希算法来确定哪个AMP获取行。
Teradata数据库哈希算法是专有的数学函数,可将任意长度的输入数据值转换为称为Rowhash的32位值,该值用于将行分配给AMP。
无论输入是不同列值的组合,来自可变长度列的大小不同的值,还是由不同数据类型组成,哈希算法的输出始终是固定的大小和格式。
它处理大小统一的行标识符,简化了数据库在存储,汇总,排序和联接行期间的工作。
以下是有关散列算法的高级示意图。
这是上图的说明,如何插入数据:
Teradata SQL提供了一些功能,可用于分析现有索引和候选索引的哈希特性。
这些函数在SQL函数,运算符,表达式和谓词中有完整记录。 Teradata中提供了四种类型的哈希函数。
1. HASHROW:描述表达式的十六进制rowhash值。如果我们一次又一次地运行,查询将给出相同的结果。
HASHROW函数产生32位二进制行哈希,存储为数据行的一部分。它最多返回4,294,967,295个唯一值。
句法
HASHROW( [ < data-column-value > [..., < data-column-value >...] ] )
2. HASHAMP: HASHAMP函数返回任何哈希桶编号的主AMP的标识号。
当没有值通过HASHAMP函数传递时,它返回的数字小于当前系统配置中的AMP数目。
句法
HASHAMP( )
3. HASHBUCKET: HASHBUCKET函数产生16位二进制Hash Bucket,与Hash Map一起使用,以确定存储和检索数据行的AMP。
值的范围从0到1,048,575,未将NULL视为可能的结果。
句法
HASHBUCKET( [ ] )
4. HASHBAKAMP: HASHBAKAMP函数返回任何哈希桶编号的后备AMP的标识号。
句法
HASHBAKAMP ( )
散列冲突是一种情况,其中不同行的行散列值相同,从而当请求从一组散列同义词中检索一个唯一行时,系统很难在散列同义词之间进行区分。
最小化哈希冲突
为了最大程度地减少哈希冲突问题,Teradata数据库定义了42亿个哈希值。 AMP软件将系统生成的32位唯一性值添加到rowhash值。
以内部分区号为前缀的结果64位值称为rowID。该值唯一地标识系统中的每一行,从而进行扫描以检索具有相同行哈希的若干行中的特定行是一项琐碎的任务。
扫描必须检查每一行,以确定它是否具有搜索值,而不是具有相同rowhash值的另一个值。
哈希映射是一种机制,用于确定将行存储在哪个AMP上,或者在使用Open PDE哈希映射的情况下,用于确定解析器子系统发送的消息的目标AMP。
映射数组中的每个单元格都对应一个哈希桶,每个哈希桶都分配给一个AMP。哈希映射条目由BYNET维护。