デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - すべて文字列Stringとして取り込む ~File Reader~

f:id:makkynm:20201220085903p:plain

 

 

はじめに

今回もReader系のNodeを扱います。ファイルの読み込みで一番Basicかつ多機能なFile Readerです。

 

 今回のテーマ ~File Reader~

 

f:id:makkynm:20200530113509p:plain

File Reader

 

覚えてほしいこと

読み込み時にデータ型を指定したいときはFile Reader

 

やりたいこと

読み込み時にデータ型を指定して、すべてStringで読み込みます

f:id:makkynm:20200530132546p:plain

やりたいこと

 

File Readerの使い方

File Readerは、最もBasicなReader Nodeですが、様々な設定ができます。特にコラムごとに設定ができる点が魅力です。

Workflow

f:id:makkynm:20200530113509p:plain

Workflow - File Reader

Workflowは下記からダウンロードできます。

kni.me

 

Confirm - Before After

ある設定をすれば、取り込みのデータ型を指定することができます。

f:id:makkynm:20200530114257p:plain

Confirm - File Reader

 

Configure

では早速使い方に行きましょう。全然関係ない部分まで説明します。重要なところはStep4なので、Step1 ~ Step3までは知ってるよ!で飛ばしていただいて構いません。

f:id:makkynm:20200530114638p:plain

Configure - File Reader
Step 1 - File Location ファイルパスの指定

まずはBrowseからファイルの場所を指定しましょう。その他のOptionは下記の通りです。

Preserve user settings for new location ファイルパスが変わったときの設定

ファイルパスが変わるとき、例えば人に共有するとき、デフォルトではStep4に設定がすべてリセットされてしまいます。ここにチェックを入れれば設定を保持してくれます。

Rescan

もう一度読み込んで、Previewの結果を更新します。

データが多い時は、Previewの画面にScan Limitを指定するオプションが現れます。CSV Readerにもあった通り、データ型の自動判別のためですので、処理速度を上げたかったら、ここで変えてみましょう。

f:id:makkynm:20200530115948p:plain

File Reader - Scan Limit (number of lines)

 

Step 2 - Basic Settings 基本読み込み設定

ここではReader系Node全般共通の設定を行います。

read row IDs:1列目をRow IDとして読み込む

read column headers:1行目をColumn Header として読み込む

Column delimiter:コラムの区切り位置設定、タブ区切り・カンマ区切り等

ignore spaces and tabs :Quote記号の中にない、余分なスペースやタブがあったときに弾いてくれます

Java-style comments :Javaのコメント表現を適用します。Javaでは、'/*' と '*/'に囲まれているものはコメントと認識します。また、 '//' のあとは改行があるまでコメントとみなします。

Single line commentJavaでは、 '//'のあとはコメントになりますが、ここで指定すれば任意の記号や文字の組み合わせをコメントとして認識させることができます。

 

Step 3 - Advanced... 詳細読み込み設定

CSV ReaderCSV Writerにも出てきた、色々な詳細設定が可能です。

f:id:makkynm:20200530121131p:plain

File Reader - Advanced...

Quote support

Quote記号の設定

Decimal Separator

CSV WriterのNumber Formatと同じですね。小数点の指定や、3桁ごとに区切る記号の指定ができます。

Ignore spaces

各行の最後にある空白を除く設定です。変にコラムとして認識されてエラーになることを防ぎます。

Short Lines

すべての行で同じ数のコラムがなくてもOKにする設定です。

unique RowIDs

もしRead Row IDを指定していた場合、少しでも重複があるとエラーになってしまいます。これをチェックすると、重複のあるRow IDを見つけたら、重ならないように文字を追加してくれます。

Limit Rows

最初の数行はスキップしたい!読み込むのは50行まで!というような制限を付けられます

Character decoding

エンコーディングが指定できます。

Missing Vlaue Pattern

もし空白セルがあった場合にここに指定されている文字で置き換えます。

ここで入力したパターンに当てはまる場合、セルを欠損値として扱います。

 

Step 4 - column properties  各コラム読み込み設定

さて、やっと本題です。Previewにあるコラムをクリックすると、各コラムごとに読み込み設定が指定できます。

部署IDは始め、Integerで読み込まれていますが、ここで指定することでStringとして読み込むように指定できます。

f:id:makkynm:20200530123222p:plain

File Reader - column properties

さて他の部分のOptionも解説します。

DON'T include column in output table 

これにチェックを入れると、コラム自体読み込まないようにできます。Column FilterでExcludeにした状態と同じですね、

Type 

読み込むデータ型を指定できます。

miss.value pattern 

コラムごとの欠損値(空白)に対する処理を指定できます。

Domain 

 データベースの用語で定義域と言ったりします。ここで、取りうる値を定義できます。

 

ちょっと一言

Domainの使い方

Domainについて、どういうときに使うのか、もう少し解説します。

Domain(定義域)とは?

Domainは定義域と訳され、取りうる値を定義できます。「開発している今は、サンプルデータだから含まれていないけれど、今後データを差し替えると出てくる値を先にKNIMEに認識させておきたい!」というようなときに使います。

なぜ先にKNIMEに認識させる必要があるのか?

例えばRow FilterやSplitterで値をプルダウンできたの覚えていますか?ここでプルダウンで選択できたのは、今テーブルにある値だけでしたよね。

このDomainを使えば、わざわざサンプルデータを編集してデータを入れ込まなくても、今データに入っていない値を各NodeのConfigureに指定することができます。

例えば、、

人事部に対して違う処理をしたいとします。しかし、現在の社員表には「人事」に所属している人はいません。こんな時にDomainを使います。

f:id:makkynm:20200530131839p:plain

Workflow

 

まずはDomainを設定しないと、Row Splitterのプルダウンで選択できる値はこのように3種類しかありません。

f:id:makkynm:20200530131915p:plain

Domain導入前

さて、Domainで「人事」という部署を追加してみようと思います。

Domainの設定を開いたら、値を入力してAddを押すと追加されます。

f:id:makkynm:20200530131139p:plain

Domainに値を追加する

これでConfirmを見てみましょう。普通のTableのOutputは何も変わっていません。

f:id:makkynm:20200530132033p:plain

Confirm - Domain設定後も変化なし

しかし、Specという部分を見ると、値が増えていることが分かります。

f:id:makkynm:20200530132159p:plain

Confirm - Spec 人事という値が増えている

これにより、Row SplitterもTableには値がないにもかかわらず、プルダウンで表示されるようになります。

f:id:makkynm:20200530132252p:plain

Configure - Row Splitter Domain導入後

  

おわりに

今回はBasicなのにいろいろできるFile Readerについて解説しました。 

そして、詳しく書きすぎると他の記事を書く時間が無くなることに気づきました。でも上級者の方々はここまで知りたいのでは!?(自己満足)

Reader系のNodeはこれにて終了して、次回からはFilter系を触ろうと思いますー

 

 

 

参考リンク