Xplenty中級編 Part4: DB周りの設定(Destination編)


今回は、お客様からの質問が多いデータベース周りの細かい設定について、データベースがDestination(送信先)の場合の設定について解説します。

Q. Xplentyのジョブでデータベースへロード時にエラーが発生した場合、どうなりますか?

A. あるジョブでデータベースへのロード時にエラーが発生した場合、ジョブのステータスとしては、エラーになります。問題は全てのデータが無効になるのか、それまで書き込まれていたデータはそのままデータベースにロールバックされずに残るのかという点ですが、これはXplenty側のパッケージでどのオプションを設定しているかによって変わります。

Transaction per connectionにチェックがONの場合

この場合は「Batch size」に関係なく、コネクションレベルで制御されます。Max paralell Connectionsが1の場合は、ジョブ実行中にエラーが発生した場合、そのジョブで更新された行はすべてロールバックされ、結果としてデータベース側はジョブ実行前の状態に戻されます。(データ更新なし)

Transaction per batchにチェックがONの場合

この場合は、Batch sizeで指定された値(レコード数のことです)で処理が随時コミットされます。例えば、Batch sizeを1000とした場合、1000行ごとにコミットされます。もし、3000件更新するジョブがあるとして、最初の1000件は問題なくコミットでき、その次の1000件を処理中にエラーが発生した場合、ジョブは、その時点でエラーとなり終了しますが、最初のコミット済みの1000件分の更新は、データベース側に反映され、ジョブが終了します。(一部反映)

Q.更新されるデータが書き込み先のスキーマ定義と異なる場合は、Xplenty側でスキーマを変更するオプションはありますか?

A.データベースでA、B、Cのフィールドを持つスキーマ構造に対し、A、B、C、Dのデータを持つ場合、スキーマ構造を変更し、フィールドDをテーブルに追加するオプションがあります。

注意:ある日データソースで勝手に列フィールドが増えていて、それを自動的に検知し、ジョブ定義に自動的に反映する機能はありません。このオプションは、あくまで増えたフィールドに対応する形でジョブ定義をマニュアルで変え、それにより、Xplentyからデータベースに対してAlter tableを実行し、スキーマ構造を変更することができる機能です。

柔軟なSQLによる前処理/後処理が可能

さらに、より柔軟にデータベースを制御できるようにデータのロード前と後の両方でSQL実行をサポートしています。これにより、例えば、ELTシナリオの場合、データを一度DWH側に投入し、投入後にSQLを利用してViewを作成したり、投入後のデータをUpdate文で加工するなど、柔軟に行うことができます。また、ロード前にテーブルを作成したり、xxx日以前のデータは削除する、もしくは一括で論理削除するといった処理も可能です。

データベースへ書き込む際のMergeオプションとその動きについて

データベースに書き込む際に以下の2種類のMergeオプションを選択可能です。それぞれの処理の特徴を理解し、正しいオプションを選択してください。

Merge with existing data using delete and insert

これから書き込むデータと書き込み先のテーブルの両方に存在する(Upsertキーが重複する)レコードについて書き込み先のテーブル削除してから、すべてのデータをターゲットテーブルに挿入することで、データをテーブルの既存データにマージします。フィールドマッピングでUpsertキーを正しく設定する必要があります。マージは次のような手順で行われます。

  • Step1 : データベースのデフォルト・スキーマのキー・マッピングに従って、主キーを持つステージング・テーブルが作成されます。
  • Step2 : データフローの出力がステージング・テーブルに一括コピーされます。
  • Step3 : ステージング・テーブルに存在するキーを持つ行がターゲット・テーブルから削除されます。ステージング・テーブルのすべての行がターゲット・テーブルに挿入されます。ステージング・テーブルが削除(Drop)されます。

Merge with existing data using update and insert

既存のデータに対してはUpdateし、新しいデータはInsertすることで、入力されたデータをテーブルの既存のレコードに対しマージします。フィールドマッピングでマージキーを正しく設定する必要があります。マージは次のような手順で行われます。

  • Step1 : データベースのデフォルト・スキーマのキー・マッピングに従って、主キーを持つステージング・テーブルが作成されます。
  • Step2 : データフローの出力がステージング・テーブルに一括コピーされます。
  • Step3 : データベース固有のコマンドが発行され、既存のレコードが更新され、挿入されます。ステージング・テーブルは削除(Drop)されます。

最後に

データベースの場合のオプションを正しく理解することで、よりきめ細かい設定が可能になります。また、データベースに関連するJDBC関連のシステム変数パラメータの設定も可能です。