如何使用ora散列函数实现bucketing概念



我研究过互联网,但找不到答案。

如何使用ora哈希函数实现bucketing概念,你能指导我吗?

"使用CCD_ 1函数";只有近似桶形;您可以决定bucket的数量,并使用ORA_HASH将实体分配给bucket,但不能保证分配会平衡。应该是";或多或少地";平衡(分配给每个bucket的实体数量大致相等(,但这并不准确。那么,第一个问题是:为什么它必须是ORA_HASH,而不是其他方法

话虽如此,这里有一种方法可以满足你的要求。(再次注意,"你问了什么"一开始就没有多大意义。(假设标准SCOTT.EMP表中有14名员工,你必须(随机(将他们分配到三个桶中。ORA_HASH创建编号从0到N的bucket(其中您将N作为函数的输入(;如果您希望bucket为1、2、3,那么您应该运行N=2的ORA_HASH(创建bucket 0、1、2(,然后将1添加到结果中,使bucket编号为1、1、3。

除此之外,还可以将ORA_HASH应用于许多数据类型。一个愚蠢的想法是,然后,将ORA_HAH应用于员工的姓氏(例如(。这很愚蠢,因为姓氏通常不明显;Smith和Jones(在美国(很多,Pryxz很少,所以无论哪个bucket有Smith,都可能比其他bucket拥有更多的员工(因为ORA_HASH将bucket分配给名称,而不是员工(。您必须将ORA_HASH应用于每个员工的独特之处;例如到EMPNO,或者甚至更简单地到Oracle生成的ROWNUM

select 1 + ora_hash(rownum, 2) as bucket, ename
from   scott.emp
order  by bucket, ename
;
BUCKET  ENAME     
------  ----------
1  ALLEN     
1  FORD      
1  JONES     
1  MARTIN    
1  MILLER    
2  ADAMS     
2  CLARK     
2  JAMES     
2  KING      
2  SCOTT     
3  BLAKE     
3  SMITH     
3  TURNER    
3  WARD  

最新更新