問題タブ [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.
sql - Snowflake一時テーブルの各行をループして、その値を含む各フィールドが単一の行である別のテーブルにその値を挿入するにはどうすればよいですか?
データをファクト テーブルにロードしています。Snowflake の元の一時テーブルは次のようになります。
フィールドindicator_nbr
は、調査内で尋ねられる質問です。
倉庫データベースの構築にはデータ モデリング手法を使用しているため、データは次のようにファクト テーブルに追加されます。
次に、指標 2 と 3 についても同様です。他に質問がある場合は、同様に続けます。
値を持つ各フィールドは、単一の行になります。もちろん、 and のように追加するメタデータは他にもありますload_dt
がrecord_src
、それらは問題ではありません。
現在のスクリプトは次のことを行っています。
フィールドを配列に取得 =>
fields_array = ['indicator_1', 'indicator_2', 'indicator_3']
配列に対してループが実行され、各行の値を含む各フィールドの追加が開始されます。100 行あるとします。一度に 1 つずつ、300 の挿入を実行します。
for (var col_num = 0; col_num<fields_array.length; col_num = col_num+1) {
}
完全なスクリプトを示すこの投稿のコメントで述べたように、各from values
挿入クエリを連結する文字列をループすることをお勧めします。
提案された解決策には 2 つの問題があります。
- Snowflake にはクエリのサイズ制限があります (1 MB 未満にする必要があります)。
- 各フィールドをループして を連結する
from values
場合はselect
、一時テーブルからもクエリを実行して列の値を取得する必要があるため、最適化は行われません。または、時間を少し短縮しますが、そうではありません。過ぎる。
編集:可能な解決策
一時テーブルからすべてを選択するSQLクエリを実行し、ハッシュとすべてを実行して、転置後に配列に保存することを考えていましたが、その方法がわかりません。
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。
database - Data Vault: リンクと参照テーブル
私は、DWH 内の企業に関するすべての説明情報を含むh_company
サテライトと呼ばれるハブを持っています。s_company
ソースデータベースには、company_branch
会社をいくつかのブランチにマップする というマッピングテーブルがあります (1 つの列はcompany_idで、2 番目の列はbranch_id です)。重要な注意: branch_id列は satellite には存在しませんs_company
。
ソース データベースに という 3 番目のテーブルがありbranch
、これはbranch_idとdescription列で構成されています。reference_table
多くのレコードが含まれておらず (30 ブランチのみ)、多くの変更がなく、参照テーブル (id と説明の列) の構造を持っているため、これは完璧です。
私の質問は: 会社 <--> 支店の関係をモデル化する最良の方法は何ですか?
サテライト
s_company
にbranch_id列がある場合、基本的にはbranch
テーブルを DWH の参照テーブルとしてモデル化し、後で s_company サテライトに参加することができます。残念ながら、サテライトにはbranch_id列がありませんs_company
。私のアプローチは、
company_branch
テーブルをリンクとしてモデル化し、接続h_company
してh_branch
(テーブルから作成)、サテライト(テーブルからcompany_branch
作成)を作成することです。しかし、ブランチは実際にはビジネス オブジェクトではなく、単なる追加情報 (完全な参照テーブル) であり、ブランチ サテライトには 30 レコードしか含まれないため、このアプローチはやり過ぎのように見えます。s_branch
branch
この場合、会社 <--> 支店の関係をどのようにモデル化しますか?
テーブル:
h_company 列: company_id、technicall_columns
s_company 列: company_id、desctiptive_columns (branch_id なし)、techncall_columns
company_branch 列: company_id、branch_id
ブランチ列: branch_id、説明