はじめに
DataMagic は、色々な機能を備えています。
機能・概要一覧
| 機能 | 概要 |
|---|---|
| マッチング | 入力ファイルのレコードと、共通する項目名をキーにした複数のマッチングファイルのレコードを結合し、一つのデータセットとして出力する |
| マージ | 入力ファイルとマージファイルを連結して、入力マージデータとして取り扱えます。入力マージデータに対しては、データ加工前に重複行の削除やソートする |
| 出力先振り分け | 抽出条件に沿って、出力ファイルを振り分ける |
| 数値項目演算 | 出力項目が数値タイプの場合、入力項目同士や任意の値との演算式を指定し、その演算結果を出力項目の値として出力する |
| データ抽出 | 入力データから、指定した条件に合致したデータのみを抽出する |
| 項目入替 | 入力データの項目を入れ替えて、別のフォーマットで出力する |
| 項目結合 | 複数の項目を結合して、1つの項目として出力する |
| 項目分割 | 単一項目を分割して、複数の項目として出力する |
| 全角半角 | 「カナ」「英数字」および「記号」を、半角から全角、全角から半角へ変換する |
| 出力フォーマット指定 | 日付型、数字文字列型の入力項目を出力する際に、フォーマットを指定する |
| 入力ソート | 入力ファイルの形式がCSV、フォーマット、Excelの場合は、データ加工の前にソートする |
| 属性変換 | 入力データを出力データに変換する際に、数値タイプを任意の数値タイプへ変換する |
| 日付項目演算 | 日付データに対して、演算や西暦⇔和暦の変換を指定し、その結果を出力項目の値として出力する |
| 関数 | 入力項目の値を関数で処理し、その処理結果を出力項目の値として出力する |
| マッピング | 入力ファイルから出力ファイルへのデータの流れや加工、変換ルールを定義し、異なるデータ形式間での項目の対応関係を設定する |
| 動的指定 | データ加工の実行時にコマンドの引数に指定した数値や文字列を、条件や出力情報に使用できる |
| ユーザ出口変換 | データを加工するときに、項目単位で独自の変換を設定するために、ユーザ出口プログラムを独自に作成できる |
| データ挿入 | レコード内の任意の項目にユーザ指定の任意の値を挿入できる |
| 仕様書出力 | データ加工の処理と設定内容を仕様書としてExcelファイルに出力できる |
| チュートリアル | データ加工の設定を対話的に実行して、DataMagicの基本的な操作方法を習得できる |
| カスタムエラー | カスタムエラー条件を使用すると、データの形式は問題ないが、意図しないデータ(例 別の事業所のデータ)を検出したときにデータ加工をエラーにできる |
| ステップ実行 | プログラムのデバッガの処理のように、経過を確認しながら実行し、意図するように変換できなかった場合の解析、またはデータ加工の処理経過の確認に使用できます。 |
| コード変換 | 1バイトコード間、または2バイトコード間で、文字コードを変換する |
今回の課題
DataMagic の紹介をしていると、よく聞かれる質問の一つに、
コレ、エラーレコードの読み飛ばしってできるの ![]()
分かりますよ、その質問。よ~く分かりますよ。
あとチョットで処理が完了するって時に、不正なレコードに引っかかって 異常終了 ![]()
今までの処理時間返せ~~~ ![]()
私も何度か当たり散らしたしたことがあります。
DataMagic には、不正なレコードだけ除外して処理を継続させる エラーデータスキップ機能 があります。
勿論、すべての状況で不正レコードをスキップする訳ではありませんが、この機能を使うことで、エラー発生原因となった該当レコードをスキップして処理を継続させることができます。
エラーデータスキップ
エラーデータスキップ機能は、データ加工実行コマンド(utled コマンド) を実行した場合に使用できます。
1.パラメータ
エラーデータスキップに関係するパラメータは以下になります。
2.エラーデータスキップ
今回は、テスト実行 の設定&データを流用して「データ加工ID=ErrorSkip」を作成。
上記のパラメータを組合わせて、エラーデータスキップを試してみます。
スキップ用のパラメータ無し
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r
変換エラー (ERRCODE=053-038)
入力データ(327)を数字文字列型に変換できませんでした。
-errdatfile filename
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errdatfile C:\@data\DataMagic\error_skip\errdatfile.txt
エラーデータスキップ発生 (ERRCODE=125-001)
最後まで処理を実施しました。
-errcausefile filename
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errcausefile C:\@data\DataMagic\error_skip\errcausefile.txt
エラーデータスキップ発生 (ERRCODE=125-001)
最後まで処理を実施しました。
この場合、出力ファイルの内容は
と同じ
エラー原因ファイルのフォーマットは、操作マニュアルの ココ
で公開してます。
ちなみに、この出力内容は「テスト実行」のテスト結果ファイルのと同じでした。
-errcausekeys numbers
今回はキー項目として、5項目目の "品目名" と、6項目目の "品目コード" を指定してみました。
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errcausekeys 5,6 -errcausefile C:\@data\DataMagic\error_skip\errcausefile.txt
エラーデータスキップ発生 (ERRCODE=125-001)
最後まで処理を実施しました。
指定したエラー原因ファイルの中は、
の出力内容+指定したキー項目の値を出力
-errovrwr
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errdatfile C:\@data\DataMagic\error_skip\errdatfile.txt
出力ファイルオープンエラー (ERRCODE=052-007)
エラーデータファイル(C:\@data\DataMagic\error_skip\errdatfile.txt)のオープンに失敗しました。理由(ファイルがあります。)
エラーデータファイルが存在する状態で、指定あり
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errovrwr -errdatfile C:\@data\DataMagic\error_skip\errdatfile.txt
エラーデータスキップ発生 (ERRCODE=125-001)
最後まで処理を実施しました。
-errdatmax max
今回のエラーレコードは 2 件なので、1 を指定(エラーデータファイルの出力を指定)
C:\HULFT Family\huledpro>utled.exe -i ErrorSkip -r -errdatmax 1 -errdatfile C:\@data\DataMagic\error_skip\errdatfile.txt
エラーデータスキップ発生 (ERRCODE=125-002)
エラースキップ件数が最大件数を超えました。
この場合、出力ファイルには、エラーレコードの最初のエラー項目まで出力
指定したエラーデータファイルの中は、最大件数(1件)までスキップしたレコードを出力
付随情報
今回紹介したパラメータの内、
って、エラー解決にどう役立つのか、正直ピンとこなかったのですが、
この キー項目 ってヤツ、結構役に立つらしい。
例えば、本編の入力データがフォーマット形式で、同様の処理を行うと、エラー原因ファイルには以下の内容が出力されます。
仮に、入力データのレコードが、改行コードで区切られていない場合。
のような、表示内で折り返すだけのものや、想定外のところで折り返しているように見えるエディタで、入力データを表示すると
- レコードの区切りを探すのが難しい
- 入力レコード数が分かっても、対象のレコードが探しづらい
のエディタのように、指定した桁数で折り返して、入力データが表示できれば、
エラー原因ファイルに出力された「入力レコード数(10)」や「入力レコード数(14)」の情報から、対象のレコードが直ぐに見つけられますが、
- エラーが発生した入力レコード数が大きかった場合、対象のレコードが探しづらい
そんな時、ユニークキーをキー項目として指定しておくと、エラーレコードのユニークキーがエラー原因ファイルに出力されるので、そのユニークキーを使って検索することで、エラーレコードが見つけ易くなります。
また、入力データが他の処理で加工されたものだった場合、
元ネタファイルのエラーレコードがエラー原因ファイルに出力された 入力レコード数 とは異なる場合が往々にしてあります。
そんな場合も、ユニークキーをキー項目として指定しておくと、出力されたユニークキーを使って元ネタファイルを検索することで、元ネタファイルの中のエラーレコードが見つけ易くなります。
この説明でイメージできたア・ナ・タ。 キー項目って結構使えるでしょ ![]()
補足
エラーデータスキップの機能を使用する場合は、以下のマニュアルの記載で、必ず制限などを確認してください。
- リファレンスマニュアル > 1. コマンド > 1.4 データ加工実行コマンド(utled コマンド)
- 操作マニュアル > 7. データ加工の関連機能 > 7.8 エラーデータスキップ
以上です。









