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をテーブルに追加するオプションがあります。
柔軟な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)されます。