コンテンツにスキップ

データの不正検知

データが想定どおりかを確かめ、外れていたらワークフローを止めます。 行数が急に減った、必須の列に空欄が増えた、といった異常に気付かずに出力してしまうのを防ぎます。

定期実行するワークフローに入れておくと、おかしなデータが出力や通知に流れるのを止められます。

入出力

ポート内容
入力データデータ
出力データデータ

条件に当てはまらなければ、入力をそのまま出します。当てはまればエラーで止まります。

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. 複数の条件をすべて満たしたときだけ止める

お題 — 単独では問題ないが、重なったら異常

入力 — 行数と 金額 の欠損数を両方見たいデータ

設定 — 条件を複数作り、オプションで「全条件に一致したらエラー」

出力 — どちらか一方だけ当てはまってもそのまま次へ流れます。両方当てはまったときだけ止まります

関連