# Re: 10g: parallel pipelined table func - compensating hash() function for parallel_enable clause

Date: Thu, 26 Jan 2012 00:21:30 -0800 (PST)

Message-ID: <03299255-2394-49d1-8052-7b82b131f39e_at_n6g2000vbz.googlegroups.com>

Hi Robert,

On 25 Jan., 17:40, Robert Klemme <shortcut..._at_googlemail.com> wrote:

*> On Wednesday, January 25, 2012 11:24:58 AM UTC+1, Frank Bergemann wrote:*

*> > Hi,*

*>*

*> > How can i compensate the oracle hash function for*

*>*

*> > parallel_enable(partition myCursor by hash(Some_Key))*

*>*

*> > Because Some_Key is already a good ID to dispatch to the table*

*> > functions.*

*> > For a bulk i have e.g. #10 Some_Key values with nearly the same*

*> > #number of records per Some_Key value.*

*> > This means a balanced load distribution to the parallel pipelined*

*> > table function instances.*

*> > However oracle requiring hash(Some_Key) undermines the load balancing*

*> > (the same for range(Some_Key)).*

*>*

*> Why is it the same for range partitioning?*

*>*

*> > So i would like to translate Some_Key to a value, that after*

*> > hash(Some_Key) results in ID (Some_Key) used for dispatch - some kind*

*> > of anti-hash.*

*>*

*> > So functionally speaking it ends up in*

*>*

*> > parallel_enable(partition myCursor by hash(antihash(Some_Key)))*

*>*

*> > ... which effectively is*

*>*

*> > parallel_enable(partition myCursor by SomeKey)*

*>*

*> > What's the anti-hash (inverse) function, which compensates for*

*> > hash(Some_Key)?*

*>*

*> Hash functions do not have an inverse function because they are not injections.*

*>*

*> http://en.wikipedia.org/wiki/Inverse_function*

*>*

*> Kind regards*

*>*

*> robert*

I have to correct myself - i don't need an inverse "function" in terms
of mathematics.

That is not possible, because hashing compacts the number space
resulting in (minimized) clashing.

So it is not n:1 in forward direction and 1:n in backwards direction -
so no function.

But i just need *some* back-mapping.

And i found a way:

Create a look-up table for the forward mapping and use it in inverse
direction (fortunately i have only a small set of input values).

best regards,

Frank
Received on Thu Jan 26 2012 - 02:21:30 CST