MENU
Dr.Sum ConnectからDr.Sumへデータを書き込む方法として、全部で4つのコンポーネントが用意されています。
実際に使う際はどれを使えばよいのか?と迷ってしまうこともあります。これら各コンポーネントについて裏側の動きを踏まえたパフォーマンス面から利用シーンまでわかるとよいですね。
本記事では、4つ目<書き込み(DataLoader)>についてがっつりログを追いかけて徹底解剖していきます!
DataLoaderのライセンスがあり、UPSERT処理を行いたいときはこちらを使いましょう!
もしDataLoaderのライセンスがあり、仮想テーブルを使ってUPSERT処理をしたい場合は、「書き込み(VTB)」のコンポーネントから「キーが重複したらアップデート」が可能なのでそちらを使いましょう。
CSVファイルは下記のように3行のみとしています。
pkcol,c1,c2
1,"v11","v12"
2,"v21","v22"
3,"v31","v32"
「dataloader_update」という名前がデフォルトで配置されます。
設定画面はシンプルで、与えられた入力データをそのままテーブルへインポートします。
DataLoaderのライセンスがないと利用できないため、「DataLoader接続テスト」ボタンから確認しましょう。
設定画面のポイントは下部にある「キーとなる列名」の部分です。こちらは選択したテーブルにNOT NULL UNIQUE制約がないとグレーアウトして設定できないのでこちらも確認しておきましょう。
VTBでは基本的にBulkInsertと同様インポート処理になります。そのため、IMPORTログとより詳細に処理が分かるCOMMITログを見てみます。
ここでは、モードが3(= アップデートロード)でキーとなるカラムについての情報が出力されています。
下から2行目のログの通り、空のテーブルに対して3件挿入したためテーブル全体の件数も3件になります。
BulkInsertと似たログですが、「DBM_BUILD_TABLE_UPDATE_LOADER」や「UpdateLoad ***」とある通り、専用の処理が実行されています。
CRXやCRSというキーワードが出ています。これは列指向であるDr.Sum特有のデータの持ち方で、CRXとDAT(CRX)という2つのファイルに対する処理が行われていることを意味しています。
1.2.2. テーブルの物理構造 |
詳細は割愛しますが、Dr.Sumが得意な列方向での処理によって高速に挿入・更新されています。
アップデートロード機能は、テーブルにデータがあれば更新・なければ追加する機能です。データ件数が3件のテーブルに対して、以下のCSVをインポートした場合のログも見てみます。
pkcol,c1,c2
1,"v11","v12"
2,"v21","v22"
3,"v31","33333"
4,"v41","v42"
5,"v11","v12"
挿入する行がpkcol = 4, 5の2行分あると表示され、全体として5件というように表示されますね。
「CRX …」と出ているログに注目すると、pkcolについてはnode count = 5に、c1とc2についてはnode count = 4になっています。
CRXとは下記の画像の通り、「北海道」や「青森」といった値のバリエーションを重複なく保持しているファイルです。
この値のバリエーションの数のことをカージナリティと呼んでいます(例えば、都道府県なら高々47)。
今回インポートした5件のCSVの値のカージナリティを見てみると、以下の表のようになります。
カラム名 | 値の一覧 | カージナリティ |
pkcol | 1,2,3,4,5 | 5 |
c1 | v11,v21,v31,v41 | 4 |
c2 | v12,v22,3333,v42 | 4 |
ログの「node count = 」から各カラムのカージナリティも確認できますね。
ちなみに、Enterprise Managerのデータファイル情報からもカラムのカージナリティは確認可能です。
本記事では、Connectのデータ挿入コンポーネントのうち「書き込み(DataLoader)」について紹介しました。
専用のアップデートロード処理によって高速にUPSERTが可能です。
他のコンポーネントについても紹介しているので、ぜひご覧ください。
Related article
Pick up
Ranking
Info