問題意識
NiFi の CSV Record Reader では Infer Schema という Schema Access Strategy を選択することができます。
CSV には型の情報がありませんが、この設定を使って1行目がヘッダー(項目名)になっている CSV を読み込むことで、2行目以降のデータの内容をもとに各項目の型を推論したスキーマを当てはめて処理してくれます。
これはとても便利なのですが、「推論された型が本当に合っているのか?」という課題もあります。
かといって、項目数が多い CSV の場合、全項目のスキーマを手作業で定義するのは大変です。
そこで、「Infer Schema を使って推論されたスキーマを、何らかの形で出力して、それを検証・修正する形で本チャンのスキーマを作れないか」という話がこちらの雑談会で話題になりました。
結論
NiFi で 推論したスキーマを出力することは可能でした!
やりかた
ExtractRecordSchema プロセッサーを使います。
使い方はこんな感じ!
Fetch 系など、CSVファイルを取得した処理の後続に ExtractRecordSchema を配置して、Record Reader に CSVRecordReader を指定します。CSVRecordReader の Schema Access Strategy で、Infer Schemaを選択します。
ExtractRecordSchema から出力されるフローファイルの attribute に、avro.schema という項目があり、そこに推測されたスキーマが入っています。
これをベースに、必要に応じて型や null の許容有無などを修正することで、本番運用に耐えるスキーマを楽に作れるのではないでしょうか!