オンプレクラウド

Dr.Sum

Dr.SumDr.Sum Connect

Dr.Sum ConnectからDr.Sumへデータを書き込む方法として、全部で4つコンポーネントが用意されています。

実際に使う際はどれを使えばよいのか?と迷ってしまうこともあります。本記事では、各コンポーネントの特性について触れつつ、シーン別の使いどころと運用時のテクニックをまとめて紹介します!

ケースごとの使い分けまとめ

TRUNCATE-INSERT(全件洗い替え)したいとき

TRUNCATE-INSERTはテーブルの中身を一度空にして、INSERTする方法です。

マスタテーブルに対して利用されることが多く、処理プロセスもシンプルです。INSERTする件数が比較的小規模な場合で有効であり、他の方法と違って定期的な再構築(リビルド)が不要です。

TRUNCATE-INSERTの使い分けは、基本的にVTBを使用するか否かで判断してOKです。

VTBを使う場合は「書き込み(VTB)」の中に「テーブル内の行を削除してインポート」の選択肢があるのでそちらを利用しましょう。

VTBを使わない場合は、「Truncate」コンポーネントと「書き込み(BulkInsert)」を直列につないで実行します。

 

DELETE-INSERTしたいとき

DELETE-INSERTはテーブルの中身を特定の条件(日付範囲で絞ることが多い)を満たす行を削除後、INSERTする方法です。

主にトランザクションテーブルで利用されます。上記例のように、日々蓄積するデータのうち「今月」や「直近7日間」といった範囲でデータを更新することができます。

DELETEする範囲は日々蓄積するデータ量や更新頻度によって検討しましょう。

極端な例ですが例えば日付の範囲を「1日」にした場合、データ量は少ないので処理自体は早く終了します。
しかし、システムメンテナンスなどで数日抜けが生じてしまうと、人が手動で抜けた分をリカバリする必要があります。
「直近7日間」程度に幅を持たせておくと、理論上6日間は抜けが発生しても次の日のバッチ実行でリカバリできます。

このあたりのノウハウについては、下記で紹介されているのでぜひご一読ください。

ウイングアーク1stの事例:Dr.Sum Connectの対策事例

 

コンポーネントの使い分けに関しては、TRUNCATE-INSERTと同様VTBを使用するか否かでOKです。

「SQL実行(更新系)」の中身は下記を参考にするとよいです。

DELETE FROM ${table_name}
WHERE ${table_name}.日付 BETWEEN '${start_date}' and '${end_date}';

変数 ${start_date}および${end_date}には削除する範囲となる日付をmappingコンポーネントを用いて事前に代入します。これにより、「今月」や「直近7日間」といった範囲を動的にDELETEすることができます。

注意点として定期的な再構築(リビルド)が必要です。詳細は下記をご覧ください。

 

UPSERTしたいとき

UPSERTはキーとなる項目を参照して、キーが存在すればその行を更新、なければ追加します。

 

件数の多い大規模なマスタテーブルに利用されることが多く、特に日中更新するなどリアルタイム性が要求される場合に有効です。

TRUNCATE-INSERTやDELETE-INSERTとは違い、テーブルが空の状態もしくは一部削除された状態で参照されない点が魅力です。

使い分けとして、DataLoaderライセンスを利用する場合とConnect側の機能で処理する方法があります。

Connect機能である「書き込み(更新/挿入)」コンポーネントは標準で利用可能ですが、DataLoaderを使った場合と比較して速度面でかなり劣ります。詳細は本記事後半の「書き込み(更新/挿入)」について掘り下げた記事を参照ください。

ちなみに筆者の環境で比較したところ、3列の空のテーブルに対して30,000件のデータ挿入を行った場合、「書き込み(DataLoader)」では1.6秒、「書き込み(更新/挿入)」の「キーの値と一致する行は更新」で3分16秒かかりました。UPSERTは特にリアルタイム性が重要視されるシーンが多いのでこの点は注意が必要です。

また、DELETE-INSERTと同様定期的な再構築(リビルド)は忘れないようにしましょう。

 

絶対にケアすべきインポート中のエラーと対処テクニック

Connectを使ってDr.Sumにデータを連携する際には、CSVだけではなくネットワークを経由したデータベース(Oracle、SQL Serverなど)や、クラウドサービス(Salesforce、RedshiftやSnowflakeなどのクラウドDB)と接続することが多いです。

TRUNCATE-INSERTやDELETE-INSERTでは、データ挿入の前にテーブルを空にしたり特定範囲のデータを消す工程があります。

その際、インポート中にエラーが発生してしまい、削除処理のみ行われてしまう事象は絶対にケアすべき重要な問題です。

実際、リモートのサービス側に問題が発生していたり、ネットワークが一時的に切れてしまったりすることでインポートがエラーになってしまうことはよくあります。

 

データ取得→削除→挿入の順序を徹底しよう!

前述の通り、ネットワークを介したデータ取得中には様々な要因でエラーになる可能性があります。

その場合、Dr.Sum上のデータを削除するタイミングは非常に重要です。

Amazon S3からファイルを読み出し、TRUNCATE-INSERTする場合を考えてみます。以下はNGのスクリプトの例です。

仮にこの状態でS3との接続が切れてエラーになった場合、本番テーブルへのTRUNCATEのみ実行された形になってしまいます。

ネットワークを介した処理を噛ませる場合、できるだけそのポイントでエラーが起きる前提でスクリプトを設計しましょう。

以下では、S3からのデータ取得が成功した場合のみTRUNCATE-INSERTが行われるようにした設計です。

 

INSERTの処理時間を許容できるか検討しよう!

ConnectのBulkInsertもしくはVTBを使用したインポートを行うと、実はこっそり一時的なワークテーブルが作られています(標準のインポートも同様)。

下記のように、「tableA」というテーブルにbulkInsertすると、データベースのフォルダの下にテーブル名と同じ名前の一時的なフォルダが作られていることが確認できます。

一時的なワークテーブルに書き出す仕組みによって、INSERT中であってもSELECTで参照することができます(INSERT後の確定処理は除く)。

TRUNCATE-INSERTやDELETE-INSERTでは事前にデータの削除処理が行われるため、INSERT処理が走っている間はテーブルが空であったり、一部削除されているなど意図したデータが参照できません。

夜間実行であればあまり問題ないですが、日中更新する場合は数分単位で時間がかかると不都合が生じる可能性もあります。

このようにINSERTにかかる時間が運用上問題ないのか、許容できるかぜひ検討しましょう。

 

各挿入処理の動きをもっと詳しく!

以下、各書き込みコンポーネントについてログを追いかけながら、掘り下げた記事をまとめています。

 

 

 

 

おわりに

本記事では、Connectのデータ挿入コンポーネントについて、使いどころやテクニックについてまとめました。

コンポーネント自体は4つありますが、それぞれの使いどころは明確なのでぜひ使いこなしてみてください!

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

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からのお知らせ