Record Joiner

Record Joiner は、ストリームに含まれるフィールド間の関連性に基づいてさまざまなストリームからのレコードを結合する、SQL スタイルの JOIN 操作を実行します。Record Joiner を使用すると、複数のファイル、複数のデータベース、またはデータフローの上流にある任意のチャネルからのレコードを結合できます。少なくとも 2 つの入力チャネルを Record Joiner に接続する必要があります。その後、JOIN 操作の結果が 1 つの出力チャネルに書き込まれます。オプションで、結合条件と一致しないレコードを別の出力チャネルに書き込むこともできます。

注: Record Joiner を使用する前に、SQL JOIN 操作について十分に理解しておく必要があります。詳細については、wikipedia.org/wiki/Join_(SQL) を参照してください。

結合の定義

オプション 説明

左ポート

JOIN 操作の左テーブルとして使用するレコードのあるポート。それ以外の入力ポートはすべて、JOIN 操作の右テーブルとして使用されます。

注: "左" テーブルと "右" テーブルは SQL JOIN の概念です。Record Joiner を使用する前に、SQL JOIN 操作について十分に理解しておく必要があります。詳細については、wikipedia.org/wiki/Join_(SQL) を参照してください。

結合タイプ

実行する JOIN 操作のタイプ。次のいずれかです。

左外部
左ポートとその他のポートの間に一致がない場合でも、左ポートからすべてのレコードを返します。このオプションは、左ポートからすべてのレコードと、他のポートの一致するすべてのレコードを返します。
全体
すべてのポートからすべてのレコードを返します。
内部
左ポートと別のポートの間で一致するレコードのみを返します。例えば、4 つの入力ソースがあり、ポート 1 を左ポートとします。この場合、内部結合は、ポート 1 とポート 2 の間、ポート 1 とポート 3 の間、およびポート 1 とポート 4 の間で、一致するフィールドを持つレコードをそれぞれ返します。

結合フィールド

レコードを結合するために別のポートからのフィールドに含まれるデータと一致する必要がある、左ポートからのフィールド。

注: 結合フィールドとして使用できるのは、データ タイプが String、Integer、Date、Datetime のフィールドのみです。

左ポートからのデータをソートする

左ポートのレコードが、[結合フィールド] に指定されたフィールドによってソート済みかどうかを指定します。レコードがソート済みの場合、このボックスをオンにするとパフォーマンスが向上します。このボックスをオンにしていない場合、Record Joiner は、[結合フィールド] に指定されたフィールドに従ってレコードをソートした後で、結合操作を実行します。

複数の結合フィールドを指定した場合、[結合フィールド] に表示されるフィールドの順に従ってレコードをソートする必要があります。例えば、次の 2 つの結合フィールドがあるとします。

  • 地域

この場合、最初に Amount フィールド、次に Region フィールドによってレコードをソートする必要があります。

重要: このオプションを選択してもレコードがソートされない場合は、Record Joiner から誤った結果が返ります。このオプションは、左ポートのレコードがソート済みであると確信できる場合にのみ選択してください。

結合の定義

左ポートからのレコードを他のいずれかのポートからのレコードと結合する必要があるかどうかを判断するために使用する結合条件を定義します。例:

port1.Name = port2.Name

これは、port1 からのレコードの Name フィールドの値が port2 からのレコードの Name フィールドの値と一致する場合に、その 2 つのレコードを結合することを指定します。

結合条件を変更するには、[変更] をクリックします。レコードを結合するために左ポートからの結合フィールドのデータとデータが一致する必要がある、右ポートからのフィールドを選択します。左ポート フィールドを変更する場合は、[キャンセル] をクリックし、[結合フィールド] フィールドでフィールドを変更します。右ポートのレコードが結合フィールドによってソートされている場合は、[右ポートからのデータをソートする] ボックスをオンにします。このボックスをオンにすると、パフォーマンスが向上します。

重要: [右ポートからのデータをソートする] を選択してもレコードがソートされない場合は、Record Joiner から誤った結果が返ります。このオプションは、右ポートのレコードがソート済みであると確信できる場合にのみ選択してください。

フィールドの解決

このタブでは、複数の入力ポートに同じフィールド名が存在する場合に、どのポートのデータを結合レコードで使用するかを指定します。例えば、データの 2 つのソースに対して結合を実行する場合に、各ソースに DateOfBirth という名前のフィールドが含まれているとします。この場合、どのポートのデータを結合後のレコードの DateOfBirth フィールドで使用するかを指定できます。

同じ名前のフィールドが存在しても、データが異なり、結合後のレコードに両方のフィールドのデータを保持する場合は、データを Record Joiner に送信する前に、いずれかのフィールドの名前を変更する必要があります。フィールド名の変更には Transformer ステージを使用できます。

結合しないレコードの処理

レコードを Record Joiner の出力に含めるには、そのレコードが結合条件を満たしているか、結合後のレコードと結合条件を満たさないレコードの両方を返す結合タイプを選択する必要があります。例えば、完全結合は、レコードが結合条件を満たしているかどうかにかかわらず、すべての入力ポートからすべてのレコードを返します。すべてのポートからすべてのレコードを返さない結合タイプ (左外部、内部結合など) の場合は、結合条件と一致するレコードのみが Record Joiner の出力に含まれます。

結合操作の結果に含まれないレコードをキャプチャするには、not_joined 出力ポートを使用します。このポートからの出力には、通常の出力ポートに含まれないレコードがすべて含まれます。not_joined 出力ポートは、ここに示すように、Record Joiner ステージの右側にある白の三角形です。

このポートから出力されるレコードには、InputPortIndex というフィールドが追加されます。このフィールドには、そのレコードの Record Joiner 入力ポートの番号が含まれます。この番号から、レコードのソースを特定できます。

注:
  • このステージの最適なパフォーマンスを得るためには、レコードの 2 つの独立したストリームを結合して、統合された出力が生成されるようにします。
  • 1 つのパスが Broadcaster または Conditional Router のどちらかを使用して最初に分岐した後で Record Joiner を使用して再び結合されている場合、このフローはハングする可能性があります。分岐と結合の間で複数のステージが使用されている場合は、Sorter をできるだけ Record Joiner の近くで使用します。