0

「CSVファイル入力」ステップを使用してPentaho DI変換にもたらされる2つのデータセット(csvファイル)があります。ファイルAには列joincolがあり、値はファイルBの列joincolに表示されます。ファイルAのデータとファイルBのデータを条件A.joincol = B.joincolに結合して、ファイルwantcolの対応するデータをファイルBから取得します。左外部結合によりペンタオDIの行が削除される

かなり簡単なものです。

(必要な)予備ステップとして、結合する列(すなわち、A.joincolおよびB.joincol)の両方のデータセットを昇順に並べ替えます。

次に、「最初のステップ」としてファイルAのソートされたデータと「第2のステップ」としてファイルBのソートされたデータを使用して「結合タイプ」を選択し、LEFT OUTER。 「第1ステップのキー」セクションの「キーフィールドを取得」を選択し、joincolが参加する唯一のキーフィールドであることを指定し、「第2ステップのキー」と同じ操作を行います。正確には左外と

    あるべき行がドロップされる
  • 絶対に不可能

    がドロップされる
  • 行を結合行のグループのものされています

    ので、参加の一部を除いて動作します昇順にソートされたときの最後の値joincolに対応します。

私は、ファイル内の値がAのjoincolすべてがExcelでVLOOKUPを行うことによって、ファイルBのjoincolに表示されていることを確認しました。いずれにせよ、たとえがなくても、値のうちがファイルBに現れたとしても、左外部結合は、少なくとも私が入るすべての行を残すはずです。私は私の探検の早い段階でこのようなクレイジーなバグに遭遇したと信じています。しかし、私はマージジョインのためのドキュメントを読んで、私が必要なすべてのステップ(ここで説明したもの)に従ったと信じています。誰かが私が何かを逃した場合私に知らせることができますか?これはよくあるエラーの結果でしょうか?

ありがとうございました!

+0

最後の行が存在し、CSVファイルの入力行と並べ替え行のステップによって渡されていることを確認しましたか?ソートを下降させてからステップをプレビューすると、行が最初になるはずです。 – Cyrus

+0

ええ、私は大量のデータを処理していないので、各ステップの出力のすべての行を手動で検査しました。彼らは両方の入力に参加していました。 – Rookatu

+0

[mcve]を読んで行動してください。あなたの質問ははっきりしていますが、詳細はもっと必要です。また、どこから「ステップ」を得ているのかを説明してください。 (http://www.bidimensions.com/category/tutorial/?)PS左側のすべての値が右側に表示される場合、左側の結合結果は内側の結合結果と同じになります。では、なぜあなたは入会を辞めたのですか? – philipxy

答えて

1

結合は、PDIではなくSQLの典型です。

PDIにはデータのメインストリームがあり、各行について、もう一方のストリームの対応を探して必要な列を返します。

注文の顧客など、1つの値を探す場合は、Lookup/Lookup Streamの手順を使用します。一部の値が欠落していると予想される場合(LEFT JOIN)、デフォルトを使用できます。あなたが対応(INNER JOIN)で行だけをしたいときは、ちょうどあなたが置くデフォルトを除外することができます。

顧客のすべての注文など、多くの行を返す必要がある場合は、Joins/Merge Joinです。経験から、通常、質問を逆にする方が簡単です。

あなたができない場合は、あなたは完全な外人の場合で、Joins/Join Rows (Cartesian Product)を使用する必要があります。ここには1つまたは複数の条件を追加できます。

+0

こんにちは@AlainD、私は答えを感謝します。私のプロセスは通常、ルックアップ値が存在しない場合にデータを失わないように、通常は左結合を使用することです。ルックアップが見つからない行については、ルックアップ列の値をデフォルトに合体させ、後でその行を「キックアウト」として検査します。私はこれがETL開発の標準的な慣行だと考えています。私は左の結合がうまくいかない理由を明確にしていない。そこに洞察力はありますか?ありがとう! – Rookatu

+0

こんにちは@Rookatu、例なしで言うことは難しいです。私の意見は、PDIのステップではなく、着信フローのデータに問題があることです。大文字小文字の区別、ロケール、コレータ、全体のタイプなど、ソート順にはおそらく多くのオプションがあります。したがって、CSV入力が遅延変換モードでないことを確認して、データが内部バイナリバイトから適切な文字列、数値、日付などに変換された後、ソートステップに入ります。 – AlainD

+0

入力データの問題または左側で考慮したファイルの問題が右側のファイルの行より少なくなります。 –

関連する問題