問題タブ [data-vault]

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 投票する
2 に答える
576 参照

sql - Snowflake一時テーブルの各行をループして、その値を含む各フィールドが単一の行である別のテーブルにその値を挿入するにはどうすればよいですか?

データをファクト テーブルにロードしています。Snowflake の元の一時テーブルは次のようになります。

ここに画像の説明を入力

フィールドindicator_nbrは、調査内で尋ねられる質問です。

倉庫データベースの構築にはデータ モデリング手法を使用しているため、データは次のようにファクト テーブルに追加されます。

ここに画像の説明を入力

次に、指標 2 と 3 についても同様です。他に質問がある場合は、同様に続けます。

値を持つ各フィールドは、単一の行になります。もちろん、 and のように追加するメタデータは他にもありますload_dtrecord_src、それらは問題ではありません。

現在のスクリプトは次のことを行っています。

  1. フィールドを配列に取得 =>fields_array = ['indicator_1', 'indicator_2', 'indicator_3']

  2. 配列に対してループが実行され、各行の値を含む各フィールドの追加が開始されます。100 行あるとします。一度に 1 つずつ、300 の挿入を実行します。

    for (var col_num = 0; col_num<fields_array.length; col_num = col_num+1) {

    }

完全なスクリプトを示すこの投稿のコメントで述べたように、各from values挿入クエリを連結する文字列をループすることをお勧めします。

提案された解決策には 2 つの問題があります。

  1. Snowflake にはクエリのサイズ制限があります (1 MB 未満にする必要があります)。
  2. 各フィールドをループして を連結するfrom values場合はselect、一時テーブルからもクエリを実行して列の値を取得する必要があるため、最適化は行われません。または、時間を少し短縮しますが、そうではありません。過ぎる。

編集:可能な解決策

一時テーブルからすべてを選択するSQLクエリを実行し、ハッシュとすべてを実行して、転置後に配列に保存することを考えていましたが、その方法がわかりません。

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。

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

database - Data Vault: リンクと参照テーブル

私は、DWH 内の企業に関するすべての説明情報を含むh_companyサテライトと呼ばれるハブを持っています。s_company

ソースデータベースには、company_branch会社をいくつかのブランチにマップする というマッピングテーブルがあります (1 つの列はcompany_idで、2 番目の列はbranch_id です)。重要な注意: branch_id列は satellite には存在しませんs_company

ソース データベースに という 3 番目のテーブルがありbranch、これはbranch_iddescription列で構成されています。reference_table多くのレコードが含まれておらず (30 ブランチのみ)、多くの変更がなく、参照テーブル (id と説明の列) の構造を持っているため、これは完璧です。

私の質問は: 会社 <--> 支店の関係をモデル化する最良の方法は何ですか?

  1. サテライトs_companybranch_id列がある場合、基本的にはbranchテーブルを DWH の参照テーブルとしてモデル化し、後で s_company サテライトに参加することができます。残念ながら、サテライトにはbranch_id列がありませんs_company

  2. 私のアプローチは、company_branchテーブルをリンクとしてモデル化し、接続h_companyしてh_branch(テーブルから作成)、サテライト(テーブルからcompany_branch作成)を作成することです。しかし、ブランチは実際にはビジネス オブジェクトではなく、単なる追加情報 (完全な参照テーブル) であり、ブランチ サテライトには 30 レコードしか含まれないため、このアプローチはやり過ぎのように見えます。s_branchbranch

この場合、会社 <--> 支店の関係をどのようにモデル化しますか?

テーブル:

h_company 列: company_id、technicall_columns

s_company 列: company_id、desctiptive_columns (branch_id なし)、techncall_columns

company_branch 列: company_id、branch_id

ブランチ列: branch_id、説明