2017-03-05 8 views
-1

私はほぼリアルタイムのdwhを作成しようとしています。私の最初の試みは、私のDWHから私のアプリケーションにテーブルをロードする15分ごとです。リアルタイムプロセスをどのように削除するのですか?

ほぼリアルタイムのDWHが直面する可能性のある問題をすべて回避したいと思います。これらの問題の1つは、複数選択htmlタグの値を示す空のテーブルを照会することです。

これを解決するには、次の解決策を考えましたが、この種の問題を解決する標準が存在するかどうかはわかりません。私は、ETLプロセスで行を挿入

UPDATE providers set my_flag=1 

:私はこのような表を更新、挿入する前に

CREATE TABLE providers (
    provider_id INT PRIMARY KEY, 
    provider_name VARCHAR(20) NOT NULL, 
    delete_flag INT NOT NULL 
) 

は、私は複数選択の可能な値を保存するには、このようにテーブルを作成しますこのように:

INSERT INTO providers (provider_name, delete_flag) VALUES ('Provider1',0) 

私のアプリから私はこのようなテーブルをクエリ:

アプリがまだ動作していて、重複することなくすべてのプロバイダを選択している間(ソースは1つのプロバイダを削除、追加または更新できるので、常にソースを尊重しなければならない)、テーブルが空であるため、ちょうどINSERT文の後にこの文を実行することができます。

DELETE FROM providers WHERE delete_flag=1 

は、私は、これはいくつかの変更と小さなテーブル、または大きなテーブルのための良い解決策だと思いますが、表が大きい場合どうなりますか?この種の問題を解決するためにいくつかの標準が存在しますか?

私たちはデータを更新しているため、ユーザーの利便性を損なうことはありません。

答えて

1

クエリを混乱させる保守ウィンドウを使用せずに、ディメンションの一括変更を公開するには2つの方法があります。

最初のものはトランザクションコンセプトを使用するとシンプルですが、大きなデータには悪い結果を出します。あなたが変更などの論理的DELETEフラグを必要としない

DELETE the replaced dimension records 
INSERT the new or changed dimension records 
COMMIT; 

注のみCOMMIT後に表示されている - ので、テーブルは空になることはありません。

大規模なディメンションで変更が多い場合は、この方法は適切ではありません。そのような場合は、EXCHANGE PARTITIONの機能をMySQL 5.6のように使用することができます。

すべてのデータを含む1つのパーティションのみでパーティション化されたディメンションテーブルと同じ構造の一時テーブルを定義します。

CREATE TABLE dim_tmp (
    id INT NOT NULL, 
    col1 VARCHAR(30), 
    col2 VARCHAR(30) 
) 
    PARTITION BY RANGE (id) (
     PARTITION pp VALUES LESS THAN (MAXVALUE) 
); 

テーブルに完全な新しいディメンション定義を入力し、この一時テーブルをディメンションテーブルに切り替えます。

ALTER TABLE dim_tmp EXCHANGE PARTITION pp WITH TABLE dim; 

この文の後、一時テーブルからのデータは、お使いのディメンション表(新しい定義)で(公開)保存され、次元の古い状態は一時テーブルに格納されます。

この機能の制約については、上記のドキュメントのリンクを確認してください。

免責事項:私はOracle DBでこの機能を使用していますが、MySQLでの使用経験はありません。

+0

あなたの最初の解決策は良いです。しかし、SQLサーバーでは、コミットステートメントをアクティブ化する必要があります。デフォルトでは、コミットが行われます。 2番目の解決策は私がコンセプトを理解していますが、ここでパーティションの機能は何ですか? – Maik

+0

パーティションは技術的な理由から使用されます。あなたは、テーブルを持つテーブルではなく、テーブルに対してパーティションを切り替えることができます。ドクをチェックしてください。 –

+0

あなたの答えをありがとう! – Maik

関連する問題