問題タブ [scd2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
114 参照

sql - 「ルール/トリガーの作成」を使用した PostgreSQL での SCD2 の実装

postgreSQL に SCD2 を実装したかったのです。今のところ、ステージングテーブル(切り捨ててロードするSTGなど)に基づいてプライマリテーブル(たとえばMAIN)を更新したかったので、「ルールの作成」を試しています。

そのため、ステージング テーブル (STG) に挿入がある場合は常に、以下の操作を自動的に実行する必要があります。

  1. 新しいレコード (STG に存在するが MAIN には存在しない) がフラグ = 1 に設定されている場合、MAIN/Primary テーブル (MAIN) に挿入します。

  2. および以下の 2 つの SQL i. ステージ テーブル (STG) から既に存在する場合、メイン テーブル (MAIN) の非キー レコードを更新し、アクティブ フラグ =1 を設定します。ii. 古いレコードを非アクティブにマークすると、MAIN テーブルでフラグが 0 に設定されている可能性があります。

以下のことを試していますが、うまくいきません。より良いアプローチ/正しい SQL を提案してください。ルール/トリガーを使用できます。

ありがとうございました。

0 投票する
1 に答える
327 参照

database - SCD タイプ 2 での削除の処理

SCD タイプ 2 テーブルで削除を処理する最善の方法を見つけようとしているモデラーとして。

原則として、SCD タイプ 2 テーブルは、START_DT や END_DT などの ETL 日付を使用して変更を追跡します。

  1. START_DT は、レコードが有効になる日付になります。
  2. END_DT は、別のフォームに変更された日付、または記録の現在のバージョンを示す Null/High Date になります。
  3. どの時点でも、キーの組み合わせには、Null または High Date のいずれかの END_DT を持つ最新バージョン レコードが存在します。

レコードがソースから削除された場合、以下から最適なオプションは何ですか?

  1. SRC_DELETE_IND のような追加の列があり、デフォルトで「N」に設定され、レコードがソースから削除された場合は「Y」に設定されます。
  1. 1 と同じですが、Delete Came のときに新しい重複行を挿入します。
  1. SRC_DELETE_IND の有効期限/終了日の代わりに、レコード

しかし、ここでは Open レコードが残っていません。

ソースにレコードが再表示され、誤った削除として示される場合、複雑さが増します。オプション 1 の 10 日に、データは次のようになります。

またはオプション 2

オプション 3 の場合

どちらのオプションがより理にかなっており、DWH のベスト プラクティスに従っています。

0 投票する
1 に答える
55 参照

sql - INSERT 戦略を使用した SCD Type-2

Data Vault 2.0 モデルを使用しています。ここでは、テーブルで UPDATE を使用することは想定されていません。通常、RDBMS では、UPDATE & INSERT 戦略を使用して SCD-2 を実装します。しかし、私の場合、INSER 戦略しか使用できません。私のソースは Kafka の入力であり、Snowflake に (avro 形式で) 読み込まれます。これをフラット化し、RDBMS 形式の別のテーブルに読み込みます。

私の質問は次のとおりです。UPDATEを使用せずにSCDタイプ2ロジックを実装するのを手伝ってくれませんか。INSERT 戦略でのみ、これを行う必要があります。

履歴も残しておきましょう。たとえば、interval-a と interval-b で rec-1 を取得した場合、rec-1 の 2 つの更新を取得した場合、ターゲットに 3 つのレコードすべてをロードして、最後に受信したレコードが最新であることを示す必要があります。 1。