都市に基づいてOracleテーブルをパーティション化する必要があるユースケースがあります。今、私は事前に都市を知りません。したがって、この場合、パーティションをどのように作成しますか。(ところで、私はすでにハッシュパーティションを作成しました(2つの都市のデータが同じパーティションにあることを保証しません)が、別々の都市のデータを別々のパーティションに入れたいです)
2 に答える
2
最も賢明なアプローチは、挿入/更新にストアド プロシージャを使用して、パーティションが存在することを確認することです (Egor Skriptunoff の提案による)。
このアプローチを使用したくない場合は、事前定義された都市のリストと、「不明な」都市のすべての値が格納されるデフォルトのパーティションを使用して、リスト パーティション分割を使用できます。次に、「不明な」パーティションを分割し、新しい都市のパーティションを作成する定期的なクリーンアップ ジョブを設定できます。
既知の 3 つの都市のパーティションを持つテーブルをセットアップする
create table shops (
pk number not null primary key,
name varchar2(30) not null,
city varchar2(30) not null)
partition by list(city)
(partition shops_paris values ('Paris'),
partition shops_berlin values ('Berlin'),
partition shops_london values ('London'),
partition shops_unknown values (default)
);
いくつかのデータを追加します (1 つの「不明な」都市、ミュンヘンがあることに注意してください)。
insert into shops(pk, name, city) values (1, 'Manufactum', 'Munich');
insert into shops(pk, name, city) values (2, 'KaDeWe', 'Berlin');
insert into shops(pk, name, city) values (3, 'Harrods', 'London');
insert into shops(pk, name, city) values (4, 'Galeries Lafayette', 'Paris');
不明なパーティションを確認してください -> 新しい都市「ミュンヘン」ができました
select * from shops partition (shops_unknown);
新しいパーティションを作成する
alter table shops split partition shops_unknown
values ('Munich') into (partition shops_munich, partition shops_unknown);
于 2013-03-21T12:33:46.123 に答える
0
新しいパーティションは明示的に作成する必要があります。
関連するすべてのロジックをプロシージャに含めます。
- パーティションが存在するかどうかを確認する
- 必要に応じて新しいものを作成する
- テーブルに値を挿入する
于 2013-03-21T12:13:15.760 に答える