【KNIME】ノード紹介:concatenate 〜複数のテーブルをとにかく纏める〜
今回は時間がうまく作れなかったので、短めの記事です。でも活用頻度は大のノードを紹介します。
Concatenate
名前の通り、連結するノードです。極力余計なことはしないで、複数のデータを"縦方向に"連結します。キャプチャを見た方が早いと思うので、貼ります↓。
入力側の2つのテーブルには"name", "maker", "price"の共通するカラムがあります(属性も一致)。カラム名が同じものは、同じところに並べてくれます。一方で"status", "amount"はそれぞれ片方にしかありません。このようなカラムもとにかく連結してくれます。データのない部分は欠損値になります。
設定画面で、両者に共通のカラムだけ残すという指定もできますが、何も考えず繋げてGoでいいかな?と思いますよ!
さて、結果"name"の 【A】に注目します。Aはどちらの入力側テーブルにも入っているデータです。結果側ではAは2回、それぞれ別のrowとして格納されます。これが冒頭で述べた、「極力余計なことをしないで」という雰囲気でしたが伝わったでしょうか?
【concatenateをした後にGroupByする】のと、【JoinerでFull outer joinする】のはほぼ同じですね。
注意点としては
【カラム名は同じ、属性が違う】
みたいなデータをconcatenateするときは少し気をつけましょう。例を載せます↓
わざと、下側の入力テーブルの"price"をstringに変えました。Number to stringノードの詳細は今回は省きますが、設定画面でintegerやdoubleにしたいstring属性のカラムを選ぶだけです。この状態でconcatenateすると結果の"price"の属性は?になっています。この状態を避けるためにも、入力データのカラム属性には気をつけましょう。
<補足>
上記の?ですが、こんな感じで直せます↓
String Manipulationを使って、
toInt($price$)と記述し、priceカラムをreplace(置き換え)すれば、結果はintegerになりますよ。string manipulationは万能選手です。
concatenateノードには2つのテーブルしか連結できませんが、concatenate (optional in)というノードを使うと4つまで連結可能です(1番最初のキャプチャをみてね)。
Row splitterなどでデータを2つのフローに分けた後に、それぞれに対し必要な処理を行い、最後にconcatenateするというような使い方もします。
世の中、絶対ということはなかなか無いと思いますが、KNIMEを使う限りかなり高い確率で使用するノードです。知っておいて損はないですよ。