我正在使用Oracle数据库,我需要能够在表中对数据进行分区.据我所知,Rracle有一个ora_hash函数,可以将数据分区为桶.ora_hash函数是否确定?
在我的程序中,我将进行几个不同的数据库查询,每个查询都要求一个不同的桶号.
例如,在一个查询中,我可能会要求前两个桶:
SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (0,1);
Run Code Online (Sandbox Code Playgroud)
在随后的查询中,我可能会要求第2和第3个桶:
SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (1,2);
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,ora_hash是否总是将表分成完全相同的10个桶?假设表中的数据没有改变.第二个桶(桶1)在两个查询中是否相同?
有文档表明,种子值使oracle能够为同一数据集返回不同的结果.所以我假设如果我不使用种子值,那么ora_hash将是确定性的.请参阅文档.
我试图从Peoplesoft数据库中随机抽取一个人口样本.在线搜索让我认为select语句的Sample子句可能是我们使用的可行选项,但是我无法理解Sample子句如何确定返回的样本数.我查看了这里找到的oracle文档:http: //docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2065953
但上述参考仅讨论了用于创建示例的语法.我的问题的原因是我需要了解样本百分比如何确定返回的样本大小.似乎它将随机数应用于您要求的百分比,然后使用种子数来计算每个"n"记录.我们的要求是我们提取一定数量的样本,例如,它们是随机选择的,并且它们代表整个表格(或者至少是我们用过滤器选择的数据分组)
如果我需要大约100个项目的样本,在10200个项目的人口中,我可以使用此声明:
SELECT * FROM PS_LEDGER SAMPLE(1) --1 % of my total population
WHERE DEPTID = '700064'
Run Code Online (Sandbox Code Playgroud)
但是,我们需要提取一定数量的样本(在这种情况下为100),这样我就可以选择一个样本大小,几乎总是返回超过我需要的数量,然后将其修剪下来IE
SELECT Count(*) FROM PS_LEDGER SAMPLE(2.5) --this percent must always give > 100 items
WHERE DEPTID = '700064' and rownum < 101
Run Code Online (Sandbox Code Playgroud)
我担心的是,我的样本不能统一代表整个人口.例如,如果示例函数在创建自己的随机生成的种子后拉动每个N记录,则选择rownum <101将切断从表格底部选择的所有记录.我正在寻找的是一种从表格中提取100条记录的方法,这些记录是随机选择的,并且相当代表整个表格.请帮忙!!
我已经使用hashCode()了StringAPI的方法,它为以下代码生成的值为99162322:
String str = "hello";
System.out.println(str.hashCode());
Run Code Online (Sandbox Code Playgroud)
是否有任何Java API可以生成仅5位数字(63346)的哈希值,例如下面的Oracle SQL?
select ORA_HASH('hello','99999') from dual --63346
Run Code Online (Sandbox Code Playgroud)