1

会計データの 100 列以上を含むステージング テーブルに CSV ファイルを読み込む SSIS ETL パッケージがあり、このデータからデータ ウェアハウスを作成しています。

100 列以上のデータから、「製品」ディメンションを作成するために必要な列を以下で特定できます...

サンプルデータ..

product_id,product_name,product_description
'1','computer','power pc'
'2','case','atx case'
'1','computer','power pc'
'3','cpu'intel'
'3','cpu'intel'

だから、私がしたことは、DIM.PRODUCTテーブルを作成したことです...

CREATE TABLE DIM.OFFICE ( 
"product_key" int IDENTITY (1,1) NOT NULL, -- Surrogate Key
"product_id" varchar(150) NOT NULL, -- Business Key
"product_name" varchar(150) NOT NULL,
"product_Description" varchar(150) NOT NULL,
)

サンプル データの「製品 ID」が製品を一意に識別することがわかっているため、#1 の製品 ID は常に product_name = computer、product_description = power pc になります。

ステージング テーブルには 300 万件のレコードがあります。後でファクト テーブルに入力するときに参照できるように、ステージング テーブルからディメンションを入力するにはどうすればよいですか。

ディメンションはタイプ 1 ディメンションであり、製品 ID #1 は常に「コンピューター」、「パワー PC」になります。

以前は SELECT DISTINCT "product id","product_name","product_description" を使用して、ステージング テーブルから個別の値のみを取得し、それをディメンションにロードしていましたが、この方法はリソースのシステムに負担をかけていることがわかりましたディメンションを入力するとき。

これを行うためのより良い、より効率的な(パフォーマンスに関する)方法はありますか?(TSQL または SSIS を使用)。

SQL 2008 SP3 を実行しています。近日中に SQL 2012 にアップグレードする予定です。

4

3 に答える 3

0

SSISとSQLが同じリソースを求めて競合しないと仮定すると
OPTION (FAST 10000)、クエリに追加することを検討できます。
これにより、SQL Serverで非ブロッキングクエリプラン(DISTINCTの並べ替えではなくハッシュ一致)が発生する傾向があります。SQLクエリ自体は長く実行される可能性がありますが、SSISはストリームを並行して処理できるため、処理全体が高速化される可能性があります。最終的にはかなりのスピードアップになるかもしれません。

于 2013-03-14T21:06:36.747 に答える
0
  1. ディメンション テーブルはファクト テーブルから取得されます。設計上の問題である可能性があります。製品の薄暗いオンライン システムで作成する必要があります。

  2. SELECT DISTINCTが現時点での最良の選択肢です。たぶん、CSV を product_id でハッシュ パーティション分割されたテーブル パーティションにロードしようとすることができます

于 2013-04-03T01:36:21.577 に答える