Oracleデータベースを使用していますが、データをテーブルに分割できる必要があります。Rracleには、データをバケットに分割できるora_hash関数があることを理解しています。ora_hash関数は決定論的ですか?
私のプログラムでは、いくつかの異なるデータベースクエリを作成し、各クエリで異なるバケット番号を要求します。
たとえば、1つのクエリで、最初の2つのバケットを要求する場合があります。
SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (0,1);
後続のクエリで、2番目と3番目のバケットを要求する場合があります。
SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (1,2);
上記の例では、ora_hashは常にテーブルをまったく同じ10個のバケットに分割しますか?テーブル内のデータは変更されていないと想定します。2番目のバケット(バケット1)は、両方のクエリで同一ですか?
シード値により、Oracleが同じデータセットに対して異なる結果を返すことができることを示唆するドキュメントがあります。したがって、シード値を使用しない場合、ora_hashは決定論的であると想定しています。ドキュメントを参照してください。