RecordJoin - レコードのJOIN
入力ストリーム1のレコード(Record, CSV, FixedLength)と入力ストリーム2のレコード(Record, CSV, FixedLength)を指定されたキーによりJOINして取得します。
(注1)入力ストリーム1、2の番号1、2は、フローデザイナーで本コンポーネントをクリックしたときに表示される入力線の番号と対応付けされます。入力順序を変更するには、本コンポーネントを右クリックして表示されるメニューから「入力順序の並べ替え」をクリックし、表示された「入力順序の並べ替え」ダイアログボックスのリスト右に表示されている矢印をクリックします。
(注2)
入力キー プロパティを設定する場合には、事前に入力ストリームを2つ接続してください。また、プロパティを設定した後に、上記の「入力順序の並べ替え」を行った場合には、再度
入力キー プロパティと
出力フィールド プロパティを設定しなおしてください。
■ストリーム情報
入力 | フォーマット | Record,CSV,FixedLength |
接続数 | 2 |
出力 | フォーマット | Record,CSV,FixedLength |
説明 | JOINしたレコードが出力されます |
■コンポーネントプロパティ
名前 | プロパティ型 | マッピング | 説明 |
モード | choice | - |
処理を行う方法を指定します。
オンメモリを指定した場合はFlowServiceのメモリを使用して処理を行うのでパフォーマンスが上がります。
RDBを指定した場合はオンメモリと比べて大量のレコードを処理することができます。
オンメモリ [OnMemory]
| - | オンメモリで処理を行います。
|
RDB [RDB]
| - | コネクション名 で指定されたRDBを使用して処理を行います。
|
|
コネクション名 | connection | - |
接続先のRDBを指定します。
コネクションペインまたは管理コンソールにて作成されたRDB接続名を選択します。
サポートされるRDBはHSQLDBです。
接続先のRDBとしてInternalDataStorageを使用することができます。
ただし、このコンポーネント以外ではInternalDataStorageは使用しないでください。
|
JOIN処理 | choice | - |
入力ストリームのレコードをどのように結合するかを指定します。
- INNER JOIN [inner]
-
inner joinを使用します。
- LEFT OUTER JOIN [outer]
-
left outer joinを使用します。
- RIGHT OUTER JOIN [rightOuterJoin]
-
right outer joinを使用します。
- FULL OUTER JOIN [fullOuterJoin]
-
full outer joinを使用します。
|
ループを開始 | loopProcess | - |
結果セットをまとめて出力するか1レコードずつループして出力するか選択します。
はい [true]
| - | ループの起点となって1レコード(行)ずつストリームに出力されます。
|
いいえ [false]
| - | すべてのレコード(行)がまとめてストリームに出力されます。
|
|
精度 | int | - | va
フィールドの型がDecimalの場合に精度を指定します。
|
小数点以下の桁数 | int | - |
フィールドの型がDecimalの場合に小数点以下の桁数を指定します。
|
末尾の0を削除 | boolean | - |
フィールドの型がDecimalの場合に小数点以下の末尾の0を切り捨てるかどうかを指定します。
はい [true]
| - | 小数点以下の末尾の0を切り捨てて出力します。
|
いいえ [false]
| - | 小数点以下の末尾の0を切り捨てずに出力します。
|
|
インデックスを作成する | boolean | - | 入力キー に対してインデックスを作成するかどうかを指定します。
インデックスを作成することによってパフォーマンスが大幅に向上する場合があります。
はい [true]
| - | インデックスを作成します。
|
いいえ [false]
| - | インデックスを作成しません。
|
|
入力キー | category | - |
JOINで使用されるキーを指定します。
入力キー1に入力ストリーム1のキーとなるフィールドを指定し、入力キー2に入力ストリーム2のキーとなるフィールドを指定します。
各入力ストリームのフィールドが「前に接続しているコンポーネント名.入力フィールド名」の形式でドロップダウンリストで表示され、キーを選択できるようになっています。この指定により、入力キー1 = 入力キー2 という条件でレコードをJOINします。
入力キーは複数指定することができます。一番下の空いたフィールドをクリックして追加します。キーを複数指定した場合はand条件となります。
|
出力フィールド | category | - |
取得対象に指定したフィールドが表示されます。
取得するフィールドを指定するには、本コンポーネントをダブルクリックして表示される「出力列の選択」ダイアログボックスで選択します。詳しくは、下記トピック「出力列の選択」を参照してください。
|
■ループ処理
ループを開始 プロパティが「はい」の場合、このコンポーネントがループの起点となって処理されたレコードは1レコードずつ出力されます。
■トランザクション処理
コミット | 何もしません。 |
ロールバック | 何もしません。 |
■エラー処理
タイプ | パラメーター | エラー処理フロー
へのストリーム | エラー
コード | 説明 |
汎用 |
なし
| コンポーネントの入力ストリーム | 1 | コネクション名に指定した接続先のRDBがHSQLDBでない場合 |
3 | コネクション名に値が設定されていない場合 |
4 | 入力ストリームが2つなかった場合 |
5 | 1番目の入力ストリームのフィールド定義が存在しない場合 |
6 | 2番目の入力ストリームのフィールド定義が存在しない場合 |
7 | 出力ストリームのフィールド定義が存在しない場合 |
8 | 出力ストリームのフィールドが、入力ストリームのフィールドに存在しなかった場合 |
9 | 入力キーが設定されていなかった場合 |
10 | 入力キーが入力ストリームのフィールド定義に存在しなかった場合 |
レコードが無い |
なし
| コンポーネントの入力ストリーム | 2 | 出力ストリームのレコードが0件の場合 |
■制限事項
- 大量のレコードを処理しようとすると実行時にメモリ不足でエラーになることがあります。
-
ループを開始 プロパティが「はい」の場合に、出力ストリーム(CSV, FixedLength)の読込み開始行プロパティとして2以上の値を設定すると、出力ストリームは0行のストリームデータとなります。ループを開始 プロパティが「はい」の場合には、出力ストリームの読込み開始行プロパティとしては1を設定するようにしてください。
-
モード プロパティが「RDB」の場合に、コネクション名 プロパティでInternalDataStorageを指定した場合、InternalDataStorageの使用可能最大メモリサイズはJavaのデフォルト値となっていて、個別に指定することはできません。Javaのデフォルト値は搭載されている物理メモリの1/4のメモリサイズです。
■出力列の選択
JOINして取得したいフィールドを指定するには、本コンポーネントをダブルクリックして表示される「出力列の選択」ダイアログボックスを使います。
「出力列の選択」ダイアログボックスでは、入力ストリーム1、入力ストリーム2のフィールドがそれぞれin[1].フィールド名、in[2].フィールド名の形式で一覧表示されます。一覧で、出力したいフィールドのチェックボックスをオンにして「OK」ボタンをクリックすると取得対象になり、
出力フィールド プロパティに表示されます。
入力ストリームごとにすべてのフィールドを出力、または出力解除したい場合は「すべて選択」「すべて解除」ボタンをクリックします。
出力フィールド名は出力ストリームのフィールド名になります。出力フィールド名は変更可能で、フィールドをクリックすると編集することができます。入力フィールド名は表示のみです。
■JOIN処理=INNER JOINの例
入力ストリーム1のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
empid | name | deptid |
1 | aaa | 2 |
2 | bbb | 3 |
3 | ccc | 1 |
入力ストリーム2のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
プロパティを以下のように設定します。
プロパティ名 | 値 | 説明 |
JOIN処理 | INNER JOIN | inner joinでレコードをJOINします |
入力キー | 入力キー1 | xxxx.deptid | xxxx は入力ストリーム1のコンポーネント名 |
入力キー2 | yyyy.deptid | yyyy は入力ストリーム2のコンポーネント名 |
出力フィールド | empid | 入力フィールド名 in[1].empid |
name | 入力フィールド名 in[1].name |
name_2 | 入力フィールド名 in[2].name |
出力ストリームは以下のようになります。
empid | name | name_2 |
1 | aaa | sales |
3 | ccc | dev |
JOIN処理 が「
INNER JOIN」の場合、入力ストリーム1のdeptidと入力ストリーム2のdeptidが等しいレコードのみ出力されます。
■JOIN処理=LEFT OUTERの例
入力ストリーム1のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
empid | name | deptid |
1 | aaa | 2 |
2 | bbb | 3 |
3 | ccc | 1 |
入力ストリーム2のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
プロパティを以下のように設定します。
プロパティ名 | 値 | 説明 |
JOIN処理 | LEFT OUTER JOIN | outer joinでレコードをJOINします |
入力キー | 入力キー1 | xxxx.deptid | xxxx は入力ストリーム1のコンポーネント名 |
入力キー2 | yyyy.deptid | yyyy は入力ストリーム2のコンポーネント名 |
出力フィールド | empid | 入力フィールド名 in[1].empid |
name | 入力フィールド名 in[1].name |
name_2 | 入力フィールド名 in[2].name |
出力ストリームは以下のようになります。
empid | name | name_2 |
1 | aaa | sales |
2 | bbb |
|
3 | ccc | dev |
JOIN処理 が「
LEFT OUTER JOIN」の場合、入力ストリーム1のdeptidと入力ストリーム2のdeptidが異なるレコードも出力されます。
■JOIN処理=RIGHT OUTERの例
入力ストリーム1のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
empid | name | deptid |
1 | aaa | 1 |
2 | bbb | 2 |
3 | ccc | 3 |
4 | ccc | 4 |
入力ストリーム2のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
deptid | name |
2 | sales |
3 | dev |
4 | marketing |
5 | hr |
プロパティを以下のように設定します。
プロパティ名 | 値 | 説明 |
JOIN処理 | RIGHT OUTER JOIN | right outer joinでレコードをJOINします |
入力キー | 入力キー1 | xxxx.deptid | xxxx は入力ストリーム1のコンポーネント名 |
入力キー2 | yyyy.deptid | yyyy は入力ストリーム2のコンポーネント名 |
出力フィールド | empid | 入力フィールド名 in[1].empid |
name | 入力フィールド名 in[1].name |
name_2 | 入力フィールド名 in[2].name |
出力ストリームは以下のようになります。
empid | name | name_2 |
2 | bbb | sales |
3 | ccc | dev |
4 | ddd | marketing |
| | hr |
JOIN処理 が「
RIGHT OUTER JOIN」の場合、入力ストリーム1のdeptidと入力ストリーム2のdeptidが異なるレコードも出力されます。
■JOIN処理=FULL OUTERの例
入力ストリーム1のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
empid | name | deptid |
1 | aaa | 1 |
2 | bbb | 2 |
3 | ccc | 3 |
4 | ccc | 4 |
入力ストリーム2のレコードが以下のような内容であったとします。(レコードの内容を表形式で記します)
deptid | name |
2 | sales |
3 | dev |
4 | marketing |
5 | hr |
プロパティを以下のように設定します。
プロパティ名 | 値 | 説明 |
JOIN処理 | FULL OUTER JOIN | full outer joinでレコードをJOINします |
入力キー | 入力キー1 | xxxx.deptid | xxxx は入力ストリーム1のコンポーネント名 |
入力キー2 | yyyy.deptid | yyyy は入力ストリーム2のコンポーネント名 |
出力フィールド | empid | 入力フィールド名 in[1].empid |
name | 入力フィールド名 in[1].name |
name_2 | 入力フィールド名 in[2].name |
出力ストリームは以下のようになります。
empid | name | name_2 |
1 | aaa | |
2 | bbb | sales |
3 | ccc | dev |
4 | ddd | marketing |
| | hr |
JOIN処理 が「
FULL OUTER JOIN」の場合、入力ストリーム1のdeptidと入力ストリーム2のdeptidが異なるレコードも出力されます。