0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-09

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

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

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

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をテーブルに追加するオプションがあります。
image.png

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

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

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

image.png

データベースへ書き込む際の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関連のシステム変数パラメータの設定も可能です。

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