質問
フラットファイル(=CSV、tsbなど、事前に区切り文字や改行コードが定義されたファイル)のデータをチェックをすることは可能ですか。
■背景
・連携元の障害(データ登録時のミス)により、区切り文字または囲い文字が誤って混入されるケースが考えられる。
(例)囲い文字ダブルクォーテーションが、データの中に混入
" た" "
*濁点をダブルクォーテーションで記載。
(例)カンマ区切りのデータにカンマが混入し、想定列数と異なる。
正: "A","B","C"
誤: "A",,"B","C"
・後続処理で、snowflake上テーブルへのロードを予定しているが、区切り文字の混入によってはカラムがずれてしまい、欠損データとしてロードされてしまうことを懸念しており、ロードの手前で想定外データ構造を検知して処理を止めたい。
回答
フラットファイルに区切り文字または囲い文字が誤って混入されることを検知する処理について、以下のような方式で検知することが可能ですので、処理方式をご検討する際の参考としてください。
例)データの不備をチェックする方式
■区切り文字が誤って混入されていないかをチェック
可変長ファイル読み取り処理にて、構造定義を指定することにより列数をチェックすることが可能です。
◇処理の流れ
- [例外監視]処理の監視処理に[可変長ファイル読み取り]処理を配置
([可変長ファイル読み取り]処理にて指定した構造定義と異なる列数と異なっていた場合にエラーとなります) - [例外監視]処理の例外処理に[例外通知]を配置してエラーを表示
■囲い文字が誤って混入されていないかをチェック
[CSVファイル読み取り]処理後にMapperの各カラムで [含む] ロジック(ツールパレット - 条件 - 文字列)を使用し、囲い文字を含んでいないかチェックすることが可能です。
◇処理の流れ
- あらかじめ文字列型のスクリプト変数を用意する
- [CSVファイル読み取り]処理を配置
- [繰り返し(データ件数)]を配置
- Mapperを配置
- Mapper内の各カラムと囲い文字を指定した[含む]ロジックをつなぐ
- 各[含む]ロジックを[スイッチ判定による出力の切り替え]ロジック(ツールパレット - 分岐 - 基本)をつなぐ最後番目(最終の入力ハンドラ)には、変数に入力する文字等を[単一行文字列]ロジック(ツールパレット - 文字列 - 基本)などで指定
(後に条件分岐させるときに判定する文字) - 条件分岐で変数が上記6のスイッチ判定の最後番目(最終の入力ハンドラ)で指定した文字ではないとき、[例外通知]を配置してエラーを表示
(囲い文字が誤って混入されていることになります)
コメント
0件のコメント
記事コメントは受け付けていません。