MENU
Dr.Sum ConnectからDr.Sumへデータを書き込む方法として、全部で4つのコンポーネントが用意されています。
実際に使う際はどれを使えばよいのか?と迷ってしまうこともあります。これら各コンポーネントについて裏側の動きを踏まえたパフォーマンス面から利用シーンまでわかるとよいですね。
本記事では、4つ目<書き込み(更新/挿入)>についてがっつりログを追いかけて徹底解剖していきます!
DataLoaderのライセンスがない場合に、UPSERT機能(テーブル上のキー項目を参照して、一致する行は更新、なければ挿入する機能)を使いたい場合にこちらのコンポーネントを利用しましょう。
ただし、本記事で紹介するように速度面でボトルネックになりやすい点は注意が必要です。
基本的な追加処理はBulkInsert、またDataLoaderのライセンスがある場合はアップデートローダー機能を使うとよいでしょう。
今回はシンプルに、CSVファイルからデータを読み取り、Dr.Sumへ書き込むスクリプトを使います。
CSVファイルは下記のように3行のみとしています。
pkcol,c1,c2
1,"v11","v12"
2,"v21","v22"
3,"v31","v32"
「書き込み(更新/挿入)」コンポーネントを配置すると、デフォルトで「create_put_table_data」という名前でコンポーネントが配置されます。
設定画面は下記のようになっていて、3~4つの任意のチェックボックスがあります。
各チェックボックスのON/OFFの動きについては公式のドキュメントを参照ください。
全てのチェックボックスがOFFの状態では、ドキュメントではシンプルにCSVのデータが挿入されます。実行するたびに、CSVのデータが追加されていきます。
では、本記事の趣旨である裏側の動きを見てみましょう。CSVから3件Dr.Sumのテーブルに入れるスクリプトを実行した際のDr.Sum側のSQLログは下記のようになっています。
ログを見るとわかる通り、3件挿入する場合は3回INSERT文が発行・実行されています。動きとしてはシンプルですが、挿入したい件数が数万と増えていくと速度面でボトルネックになりやすいことが分かります。
件数が多い場合は特に、別の記事で紹介するバルクインサートする方法の方がよい場合があります。
ではレコード削除にチェックした場合はどうでしょうか。結果としては、挿入時に全件削除処理が走るため、実行毎に結果は変わらずCSVの件数とテーブルの件数はイコールになります。
前章同様、ログを見ていきましょう。
コネクションIDが2つあるため色分けを行っています。とはいえ、重要なのは赤枠で囲った部分で、DELETE文が条件(WHERE句)なしで発行されていますね。
全行削除する場合は、Dr.Sumのマニュアルでは「DELETEよりも高速に全データを削除できます。」とあるので、件数が多い場合は「Truncate」コンポーネントを使ったスクリプトにしたほうが良い可能性があります。
8.3.34. TRUNCATE(表の全データを切り捨てる) |
いわゆるUPSERTの動きになります。テーブルに存在するキーの情報を使って、キーにマッチする行が既にある場合はUPDATE、ない場合はINSERTします。
そのため、テーブルにはNULL UNIQUE制約のついたカラムが必要になります。
例として、pkcol = 1, c1 = NULL, c2 = NULLの行のみ持っているテーブルに対して冒頭のCSVを「キーと一致する行は更新」にチェックした状態で実行すると下記のようになります。
ではログを見てみましょう。
興味深いですね。ポイントはキーに指定したカラム(今回はpkcol)について、CSVにある全行でUPDATEをかけている点です。具体的には「UPDATE ~~~ WHERE plcol = ‘1’;」といったようにWHEREの条件をひとつずつ変えながら実行されています。
そして、キーがなかった場合は改めてINSERT文を発行しています。これまで述べてきたように、件数が大きくなってくると最悪、UPDATE・INSERT含めて件数× 2のSQLが発行・処理されるので避けたいですね。
本記事ではConnectで使えるテーブル書き込みコンポーネント「更新/挿入」について動作とともにログレベルまで追いかけて紹介しました。
DataLoaderがない場合にUPSERT機能を使いたい場合に重宝します。
SQLベースでシンプルかつログも追いやすい点はメリットであり、件数が少ない場合には大きなボトルネックにはなりずらいです。
とはいえ、Dr.Sumとしては大量のデータを処理するケースが多いです。こちらで紹介するバルクインサートを使用するとパフォーマンス面で良い場合があるので是非読んでいただきつつ、利用してみてください。
その他のコンポーネントについても紹介しています。
Related article
Pick up
Ranking
Info