0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【どっちが早い?】標準UPSERT機能 vs DataLoaderのアップデートローダー機能【DataSpiderのDr.Sumアダプタ】

Last updated at Posted at 2023-02-09

やりたいこと

DataSpiderというETLツールにDr.Sumアダプタ機能を追加することで、Dr.Sumへの書込みが可能になります。
Dr.Sumアダプタ機能には標準の書込み機能があり、「キーと一致する行は更新」する設定ができます。
一方、Dr.Sumへ書き込む際にDataLoaderというオプション機能を使うと、同様に「キーと一致する行は更新」することができます。
今回はこの2つの「キーと一致する行は更新」して書き込む方法(一般的にいうとUPSERT)の違いを調査してみようと思います。

アイキャッチ.png

結論

結論からいうと、2つの違いは以下です。
・書き込み(更新/挿入)アイコンの「キーの値と一致する行は更新」
書き込み先のテーブルにUPDATEを全行に対して行い、無ければINSERTしています。そのため、件数が多いとその分処理が遅くなります。
・書き込み(DataLoader)アイコン
インポート処理がSQLのレイヤではなくDr.Sum内部で完結しており、全件一括で処理しているため高速なインポートがを実現しています。

では、Dr.Sumのログを確認しながら各処理の中身を見ていきます。

UPSERTって?

データベース用語として良く使われる用語で、UPDATEとINSERTを組み合わせた造語らしいです。
テーブルへレコードの書き込みを行う際、キー項目を見て「キー項目があれば更新(UPDATE)、無ければ挿入(INSERT)」する操作を指します。

upsert.png

調査!

サンプルデータとして、次の4パターンで実験してみます。UPDATEする行数も固定しておきます。
・3列のテーブルに対し10件UPSERT(UPDATE:3件、INSERT:5件、変更なし:2件)
・3列のテーブルに対し50000件UPSERT(UPDATE:10000件、INSERT:10000件、変更なし:30000件)
・10列のテーブルに対し10件UPSERT(UPDATE:3件、INSERT:5件、変更なし:2件)
・10列のテーブルに対し50000件UPSERT(UPDATE:10000件、INSERT:10000件、変更なし:30000件)

ロジック

・書き込み(更新/挿入)アイコンの「キーの値と一致する行は更新」で書き込み

標準UPSERT.png

・DataLoaderで書き込み

DataLoader.png

実験方法

上記ロジックで、それぞれ4パターンの処理を実行し処理速度を調べてみます。
DataSpiderの実行履歴から、書き込みアイコンの処理にかかった時間を処理時間とします。

実験方法.png

結果

結果は表のとおりです。

result.png

結果から50000行UPSERTとなると、標準のUPSERT機能だとかなり遅くなっていることがわかりますね。
これはなぜでしょうか。Dr.Sumのログを見つつどんな処理が流れているのか見てみます。

標準UPSERTはなぜ遅い?

10列10行のデータを標準UPSERTを行ったときのログがこちらです。

2022-08-01_00h03_18.png

insertデータを除くと、書き換えたデータは5件中3件だけにも関わらず、update文は5件実行されています。
データが書き換わっているか否かにかかわらずテーブルの件数分SQLが実行されているため時間がかかってしまうようです。

DataLoaderはなぜ早い?

同様にSQLを見てみます。

SQL.png

このログを見ると、INSERTやUPDATEといったSQLは実行されていないようです。「IMPORT」ログも見てみます。

updateload_import.png

IMPORTログを見てみると、bulk insertで一括インサート処理が行われているようです。
SQLのレイヤではなく、インポート処理が内部で完結しているため高速な処理ができているようですね。

まとめ

今回は、DataSpiderのDr.SumアダプタのUPSERT機能について調査しました。
標準のUPSERT機能とDataLoaderを使ったUPSERTで処理速度を比較し、ログを頼りにどんな処理を行っているのか調査しました。
結果として、標準のUPSERT処理では全行に対してUPDATE・無ければINSERTを行っているのに対し、DataLoaderはそもそもSQLベースでの処理ではなくDr.Sum内部で一括処理を行っているため高速な処理を実現しているようです!すごい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?