オンプレクラウド

Dr.Sum

Dr.SumDr.Sum Connect

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の動きについては公式のドキュメントを参照ください。

[Dr.Sum]書き込み(更新/挿入)

 

デフォルトでの動作とログ

全てのチェックボックスが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としては大量のデータを処理するケースが多いです。こちらで紹介するバルクインサートを使用するとパフォーマンス面で良い場合があるので是非読んでいただきつつ、利用してみてください。

 

その他のコンポーネントについても紹介しています。

 

この記事にリアクションしてみませんか?

What do you think of this post?
  • 分かりやすい (2)
  • 問題が解決した (0)
評価いただいてありがとうございます!

宇根 昌和

MotionBoard Dr.Sum
プロフィールへ >

新卒でウイングアーク1stへ入社、プリセールス活動後、Dr.Sumの開発を行っています。Pythonをベースに様々なツールからデータをDr.Sumへ集約しMotionBoardで可視化する仕組みを作ったり、Web APIを使ったデータ蓄積ノウハウをテーマにイベント登壇したりしています。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

【Connect】開発コスト・運用コストを抑えたスクリプトの構築方法

公開:2025.02.06
更新:2025.02.06

分かりやすい

1

解決した

0
  • データ取り込み
  • データ加工

Dr.Sum

invoiceAgent【「業務を変える動画たち」シリーズ】記事まとめ

公開:2025.01.16
更新:2025.08.12

分かりやすい

0

解決した

0
  • 業務を変えるシリーズ

invoiceAgent

【脱Excel】MotionBoardの入力機能で業務アプリをつくる

公開:2024.08.05
更新:2024.08.05

分かりやすい

6

解決した

2
  • データ入力
  • デザイン
  • コンテナ

MotionBoard

Ranking

Rankingランキング

1

Excelのデータを加工したい。~変換(横持ち⇔縦持ち)について~

公開:2021.01.19
更新:2024.05.08

分かりやすい

8

解決した

3
  • データ取り込み
  • データ加工

Dr.Sum

2

【DELETE-INSERT】特定期間のデータのみ洗い替えたい!【手動編】

公開:2024.01.10
更新:2024.05.08

分かりやすい

2

解決した

0
  • データ取り込み
  • SQL

Dr.Sum

3

【あの頃に戻りたい】バックアップから任意のテーブルだけを戻す方法

公開:2023.11.07
更新:2023.11.20

分かりやすい

1

解決した

0
  • 設定

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ