データの不正検知
データが想定どおりかを確かめ、外れていたらワークフローを止めます。 行数が急に減った、必須の列に空欄が増えた、といった異常に気付かずに出力してしまうのを防ぎます。
定期実行するワークフローに入れておくと、おかしなデータが出力や通知に流れるのを止められます。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
条件に当てはまらなければ、入力をそのまま出します。当てはまればエラーで止まります。
Spark エンジンでは動きません。
設定項目
エラー条件
エラーにする条件を 1 件ずつ設定します。いくつでも足せます。
- 処理タイプを選択
- 列の要素から検知(既定)か全体の要素から検知。
- 列を選択必須
- 列の要素から検知のときだけ出ます。詳細設定の下に並びます。
- 検知する要素を選択
- 何を見るか。処理タイプと列の型で選択肢が変わります(次の節)。印は付きませんが、選ばずに実行すると止まります。
- 比較タイプを選択必須
- 等しい(=) / 等しくない(!=) / より小さい(<) / 以下(<=) / より大きい(>) / 以上(>=)。
- 条件値を入力必須
- 比べる値。日付・日付時間の列で最大値・最小値を見るときだけ日付として読まれ、それ以外は数値として読まれます。ただし下の注意のとおり、いまは日付の列を選ぶと要素を選べません。
- エラーメッセージを自分で定義する
- チェックを入れると入力欄が開きます。入れた文がそのまま出ます。off のままなら、要素ごとの既定の文が出ます。
オプション
- エラー条件
- 全条件に一致したらエラーか一つでも条件に一致したらエラー(既定)。上の「エラー条件」とは別の項目です。こちらは条件が複数あるときの組み合わせ方を決めます。
検知できるもの
| 処理タイプ | 列の型 | 見られる要素 |
|---|---|---|
| 全体の要素から検知 | — | 行数 / 列数 |
| 列の要素から検知 | 文字列 | 欠損値数 / 欠損率(%) / カウント数 / ユニーク数 |
| 列の要素から検知 | 数値 | 上に加えて 最大値 / 最小値 / 平均値 / 中央値 |
| 列の要素から検知 | 日付 / 日付時間 / 時間 | 選べません(下の注意を参照) |
カウント数は「空欄でない行の数」 です。欠損値数は「行数 − カウント数」、欠損率(%) はそれを行数で割って 100 を掛けた値(百分率)です。1 割の欠損なら 10 になります。
判定に使うのは親ノードのサマリ
このノードはデータ本体を読み直さず、前のノードが作ったサマリ情報を見ます。 そのため、前のノードを実行し直していないと古い値で判定されることがあります。
条件に一致したら止まる
条件が複数のときは、既定が「一つでも条件に一致したらエラー」です。
どの条件に当たったかはメッセージに出ます。 条件1: のように番号が付くので、複数あっても特定できます。
エラーと対処
検知したとき
条件に当てはまったときに出ます。エラーメッセージを自分で定義するが off なら、要素ごとの既定の文に列名が差し込まれます。
条件1: 列:
<列名>の欠損値数が不正です。
直し方 — まずデータ側を確かめてください。このノードは異常を知らせるためのものなので、条件を緩める前に、なぜ外れたのかを見ます。
要素ごとの既定の文
| 検知する要素 | 出る文 |
|---|---|
| 欠損値数 | 列:<列名>の欠損値数が不正です。 |
| 欠損率(%) | 列:<列名>の欠損値率が不正です。 |
| カウント数 | 列:<列名>のカウント数が不正です。 |
| ユニーク数 | 列:<列名>のユニーク数が不正です。 |
| 最大値 | 列:<列名>の最大値が不正です。 |
| 最小値 | 列:<列名>の最小値が不正です。 |
| 平均値 | 列:<列名>の平均値が不正です。 |
| 中央値 | 列:<列名>の中央値が不正です |
| 行数 | 行数が不正です |
| 列数 | 列数が不正です |
条件値を入れていない
条件値を入力してください。
直し方 — 条件値を入力に値を入れてください。
選んだ列が見つからない
列を選択で指定した列が、前のノードのサマリにないときに出ます。列名を変えたあとに起きます。
対象の列が選択されていません。
直し方 — 列を選択を選び直してください。
データ量が多くて判定できない
データ量が大きく、前のノードが指標の計算を省いたときに出ます。
データ量上限を超えており判定できません。改善をお待ち下さい。
{{target_col}}
{{target_col}} には 対象列: <列名> が入ります。サマリそのものが見つからなかったときは空になります。
直し方 — 判定できる量まで減らしてから掛けてください。
親ノードのサマリが古い
親ノードのサマリ情報が古いため計算ができませんでした。新しくデータを作成し直してください。
直し方 — 前のノードを実行し直してください。
よく使う例
1. 行数が減ったら止める
お題 — 毎朝 1 万行くらい入るはずのデータが、急に少なくなったら気付きたい
入力 — 毎朝取り込む受注データ(ふだんは 1 万行前後)
設定 — 処理タイプ「全体の要素から検知」、要素「行数」、比較タイプ <、条件値 5000、メッセージ「取り込み行数が少なすぎます」
出力 — 1 万行あった日はそのまま次へ流れます。3,000 行の日は「条件1: 取り込み行数が少なすぎます」で止まります
2. 必須列の欠損を検知する
お題 — 顧客 ID が空の行が混ざっていたら止めたい
入力 — 顧客ID 金額 の明細データ
設定 — 処理タイプ「列の要素から検知」、列 顧客ID、要素「欠損値数」、比較タイプ >、条件値 0
出力 — 空欄が 1 つでもあれば止まります。なければそのまま次へ流れます
3. 欠損率で見る
お題 — 少しの欠損は許すが、1 割を超えたら止めたい
入力 — 1,000 行のうち 担当者 が 50 行空いているデータ
設定 — 要素「欠損率(%)」、比較タイプ >、条件値 10
出力 — 欠損率 5% なのでそのまま次へ流れます。150 行空いた日(15%)は止まります
4. 値の範囲を確かめる
お題 — 金額に負の値が入っていないか
入力 — 金額 を含む明細データ
設定 — 列 金額、要素「最小値」、比較タイプ <、条件値 0
出力 — 最小値が 0 以上ならそのまま次へ流れます。-500 の行があると止まります
5. 日付が古すぎないか
お題 — 最新のデータが入っているか確かめたい
入力 — 日付 を含む日次データ
設定 — 日付の列は直接選べません(上の注意を参照)。先に日付列同士の差分計算で「日付列1 = 固定日付 $today」「日付列2 = 日付」「結果の単位 = 日」として 経過日数 を作り、このノードでは 列 経過日数、要素「最小値」、比較タイプ >、条件値 3
出力 — いちばん新しい行でも 3 日より前のデータしかないときに止まります。当日や前日のデータが入っていれば最小値が 3 以下になるので、そのまま次へ流れます
6. 複数の条件をすべて満たしたときだけ止める
お題 — 単独では問題ないが、重なったら異常
入力 — 行数と 金額 の欠損数を両方見たいデータ
設定 — 条件を複数作り、オプションで「全条件に一致したらエラー」
出力 — どちらか一方だけ当てはまってもそのまま次へ流れます。両方当てはまったときだけ止まります