Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

21 views
Skip to first unread message

Frank Bergemann

unread,
Jan 25, 2012, 5:24:58 AM1/25/12
to
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)).

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)?

- many thanks!

regards,
Frank

Robert Klemme

unread,
Jan 25, 2012, 11:40:11 AM1/25/12
to

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

Frank Bergemann

unread,
Jan 26, 2012, 3:21:30 AM1/26/12
to
Hi 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

Frank Bergemann

unread,
Jan 26, 2012, 3:22:41 AM1/26/12
to
sorry, there's a type: it should have been:

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

best regards,
Frank

Frank Bergemann

unread,
Jan 26, 2012, 3:24:03 AM1/26/12
to
On 26 Jan., 09:21, Frank Bergemann <FBergem...@web.de> wrote:
ups! there's a typo - it should have been

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

best regards,
Frank
0 new messages