Record Joiner
Record Joiner は、ストリームに含まれるフィールド間の関連性に基づいてさまざまなストリームからのレコードを結合する、SQL スタイルの JOIN
操作を実行します。Record Joiner を使用すると、複数のファイル、複数のデータベース、またはフローの上流にある任意のチャネルからのレコードを結合できます。少なくとも 2 つの入力チャネルを Record Joiner に接続する必要があります。その後、JOIN
操作の結果が 1 つの出力チャネルに書き込まれます。オプションで、結合条件と一致しないレコードを別の出力チャネルに書き込むこともできます。
JOIN
操作について十分に理解しておく必要があります。詳細については、wikipedia.org/wiki/Join_(SQL) を参照してください。結合の定義
オプション | 説明 |
---|---|
左ポート |
注: "左" テーブルと "右" テーブルは SQL
JOIN の概念です。Record Joiner を使用する前に、SQL JOIN 操作について十分に理解しておく必要があります。詳細については、wikipedia.org/wiki/Join_(SQL) を参照してください。 |
結合タイプ |
実行する
|
結合フィールド |
レコードを結合するために別のポートからのフィールドに含まれるデータと一致する必要がある、左ポートからのフィールド。 注: 結合フィールドで有効なデータ タイプは、integer (整数)、string (文字列)、datetime (日時)、date (日付)、long (長整数)、float (単精度浮動小数点数)、double (倍精度浮動小数点数)、および big decimal (任意精度の符号付き 10 進数) です。
|
左ポートからのデータをソートする |
左ポートのレコードが、[結合フィールド] に指定されたフィールドによってソート済みかどうかを指定します。レコードがソート済みの場合、このボックスをオンにするとパフォーマンスが向上します。このボックスをオンにしていない場合、Record Joiner は、[結合フィールド] に指定されたフィールドに従ってレコードをソートした後で、結合操作を実行します。 複数の結合フィールドを指定した場合、[結合フィールド] に表示されるフィールドの順に従ってレコードをソートする必要があります。例えば、次の 2 つの結合フィールドがあるとします。
この場合、最初に Amount フィールド、次に Region フィールドによってレコードをソートする必要があります。 重要: このオプションを選択してもレコードがソートされない場合は、Record Joiner から誤った結果が返ります。このオプションは、左ポートのレコードがソート済みであると確信できる場合にのみ選択してください。
|
結合の定義 |
左ポートからのレコードを他のいずれかのポートからのレコードと結合する必要があるかどうかを判断するために使用する結合条件を定義します。 これは、port1 からのレコードの Name フィールドの値が port2 からのレコードの Name フィールドの値と一致する場合に、その 2 つのレコードを結合することを指定します。 結合条件を変更するには、[変更] をクリックします。レコードを結合するために左ポートからの結合フィールドのデータとデータが一致する必要がある、右ポートからのフィールドを選択します。左ポート フィールドを変更する場合は、[キャンセル] をクリックし、[結合フィールド] フィールドでフィールドを変更します。右ポートのレコードが結合フィールドによってソートされている場合は、[右ポートからのデータをソートする] ボックスをオンにします。このボックスをオンにすると、パフォーマンスが向上します。 重要: [右ポートからのデータをソートする] を選択してもレコードがソートされない場合は、Record Joiner から誤った結果が返ります。このオプションは、右ポートのレコードがソート済みであると確信できる場合にのみ選択してください。
|
フィールドの解決
このタブでは、複数の入力ポートに同じフィールド名が存在する場合に、どのポートのデータを結合レコードで使用するかを指定します。例えば、データの 2 つのソースに対して結合を実行する場合に、各ソースに DateOfBirth という名前のフィールドが含まれているとします。この場合、どのポートのデータを結合後のレコードの DateOfBirth フィールドで使用するかを指定できます。
同じ名前のフィールドが存在しても、データが異なり、結合後のレコードに両方のフィールドのデータを保持する場合は、データを Record Joiner に送信する前に、いずれかのフィールドの名前を変更する必要があります。フィールド名の変更には Transformer ステージを使用できます。
結合しないレコードの処理
レコードを Record Joiner の出力に含めるには、そのレコードが結合条件を満たしているか、結合後のレコードと結合条件を満たさないレコードの両方を返す結合タイプを選択する必要があります。例えば、完全結合は、レコードが結合条件を満たしているかどうかにかかわらず、すべての入力ポートからすべてのレコードを返します。すべてのポートからすべてのレコードを返さない結合タイプ (左外部、内部結合など) の場合は、結合条件と一致するレコードのみが Record Joiner の出力に含まれます。
結合操作の結果に含まれないレコードをキャプチャするには、not_joined 出力ポートを使用します。このポートからの出力には、通常の出力ポートに含まれないレコードがすべて含まれます。
このポートから出力されるレコードには、InputPortIndex というフィールドが追加されます。このフィールドには、そのレコードの Record Joiner 入力ポートの番号が含まれます。この番号から、レコードのソースを特定できます。
- このステージの最適なパフォーマンスを得るためには、レコードの 2 つの独立したストリームを結合して、統合された出力が生成されるようにします。
- 1 つのパスが Broadcaster または Conditional Router のどちらかを使用して最初に分岐した後で Record Joiner を使用して再び結合されている場合、このフローはハングする可能性があります。分岐と結合の間で複数のステージが使用されている場合は、Sorter をできるだけ Record Joiner の近くで使用します。
Math
Math ステージは、単一のデータ行に対する算術演算を処理します。1 つ以上の式を使用する、様々な算術関数を実行できます。データは文字列として入力されますが、値は数値または Boolean (データに対して実行する演算の種類によります) である必要があります。
- [制御ステージ] の下で [Math] ステージをクリックして、キャンバスまでドラッグし、フロー内の配置したい位置にドロップします。
- ステージをキャンバス上の他のステージに接続します。
- [Math] ステージをダブルクリックします。[Math オプション] ダイアログ ボックスの [式] タブが表示されます。このタブには、[入力フィールド]、[Calculator]、[式] キャンバスが表示されます。または、[関数] タブをクリックして、Calculator の代わりに関数を使用することもできます。
[入力フィールド] コントロールには、入力ポートに存在する有効なフィールドの一覧が表示されます。フィールド名の構文は、非常に柔軟性の高いものですが、Groovy スクリプトの規則に基づく一部の制約があります。Groovy スクリプトの詳細な情報については、Web サイト groovy-lang.org を参照してください。