GenerateTableFetch 2025.10.2.19¶
バンドル¶
org.apache.nifi | nifi-standard-nar
説明¶
テーブルから行の「ページ」を取得する SQL 選択クエリを生成します。パーティションサイズプロパティは、テーブルの行数とともに、ページのサイズと数を決定し、FlowFiles を生成します。さらに、最大値列を設定することで増分フェッチを実現できます。これにより、プロセッサーは列の最大値を追跡し、観測された最大値を超える列の値を持つ行のみを取得します。このプロセッサーは、プライマリノードのみで実行されることを想定しています。このプロセッサーは、着信接続を受け入れることができます。着信接続が提供されるかどうかでプロセッサーの動作が異なります。着信接続が指定されない場合、プロセッサーは指定されたプロセッサースケジュールで SQL クエリを生成します。式言語は多くのフィールドでサポートされていますが、FlowFile 属性は使用できません。ただし、プロパティは環境/システムプロパティを使用して評価されます。着信接続が指定され、プロセッサータスクで FlowFile が使用できない場合、作業は実行されません。着信接続が指定され、プロセッサータスクで FlowFile が使用できる場合、テーブル名などのフィールドに対して、式言語で FlowFile の属性を使用できます。ただし、最大値列と返される列のフィールドは空であるか、指定された各テーブルで使用可能な列を参照する必要があります。
入力要件¶
ALLOWED
機密動的プロパティをサポート¶
false
プロパティ¶
プロパティ |
説明 |
|---|---|
返す列 |
クエリで使用する列名のカンマ区切りリスト。データベースで名前に特別な処理(引用など)が必要な場合は、それぞれの名前にその処理を含める必要があります。列名を指定しなかった場合は、指定したテーブルのすべての列が返されます。NOTE: 増分フェッチが正しく動作するためには、指定したテーブルに対して一貫性のある列名を使用することが重要です。 |
データベース接続プーリングサービス |
データベースへの接続を取得するために使用するController Service。 |
データベース方言サービス |
特定のサービスやベンダーに特化したステートメントを生成するためのデータベース方言サービス。 |
最大待機時間 |
実行中の SQL セレクト・クエリに許容される最大時間。1秒未満の最大時間はゼロに等しくなります。 |
Maximum-value Columns |
列名のコンマ区切りリスト。プロセッサーは、プロセッサーが実行を開始してから返された各列の最大値を追跡します。複数の列を使用すると、列リストに順序が与えられ、各列の値は前の列の値よりもゆっくりと増加すると予想されます。したがって、複数の列を使用することは、列の階層構造を意味し、これは通常テーブルのパーティション分割に使用されます。このプロセッサーを使用すると、前回の取得以降に追加/更新された行のみを取得することができます。ビット/ブール値のような一部の JDBC 型は最大値を維持するのに適していないため、これらの型の列はこのプロパティにリストしないでください。処理中にエラーが発生します。列が指定されない場合、テーブルのすべての行が考慮され、パフォーマンスに影響が出る可能性があります。NOTE:増分フェッチが正しく動作するためには、特定のテーブルに対して一貫した最大値の列名を使用することが重要です。 |
テーブル名 |
クエリ対象のデータベース・テーブル名。 |
db-fetch-db-type |
特定のサービスやベンダーに特化したステートメントを生成するためのデータベース型。汎用タイプはほとんどのケースをサポートしますが、特定のタイプを選択することで、最適な処理や追加機能が有効になります。 |
db-fetch-where-clause |
SQL クエリを構築する際に WHERE 条件に追加するカスタム句を追加します。 |
gen-table-column-for-val-partitioning |
値をパーティショニングに使用する列の名前。デフォルトの動作は、オフセット/リミット戦略を使用して、データベースから取得する「ページ」にパーティショニングするために結果セットの行番号を使用することです。しかし、ある種のデータベースでは、列の値そのものを使って「ページ」を定義した方が、適切な状況下では効率的な場合があります。このプロパティは、デフォルト値のクエリがうまく動作していない場合、最大値列がない場合、または、型が長整数に強制できる(つまり、日付やタイムスタンプではない)最大値カラムが1つしかない場合、列の値が均等に分散しており、スパースでない場合にのみ、最高のパフォーマンスを得るために使用されるべきです。 |
gen-table-custom-orderby-column |
Max-Value Columnsが提供されず、パーティショニングが有効になっている場合に、結果の順序付けに使用される列の名前。このプロパティは、Max-Value Columnsがセットされているか、Partition Size = 0の場合は無視されます。NOTE: 最大値列もカスタム ORDER BY 列もセットされていない場合、データベース/ドライバーによっては、プロセッサーがエラーを報告したり、生成された SQL の行が欠落したり重複したりする可能性があります。なぜなら、明示的な順序付けがなければ、各パーティションのフェッチは任意の順序で行われるからです。 |
gen-table-fetch-partition-size |
生成された各ステートメント SQL によってフェッチされる結果行の数。テーブルの総行数をパーティションサイズで割ったものが、生成された SQL ステートメントの数 (つまり FlowFiles) になります。値ゼロは、 SQL ステートメントがテーブルのすべての行をフェッチする単一の FlowFile が生成されることを示します。 |
gen-table-output-flowfile-on-zero-results |
指定された依存関係によっては、このプロセッサーを実行しても、 SQL ステートメントが生成されないことがあります。このプロパティが true の場合、空の FlowFile が生成され(存在する場合、入ってくる FlowFile の親を持つ)、'success' リレーションシップに転送されます。このプロパティが False の場合、出力 FlowFiles は生成されません。 |
状態管理¶
スコープ |
説明 |
|---|---|
CLUSTER |
指定したテーブルに対してクエリを実行した後、指定した列の最大値は、次回以降のクエリ実行時に使用できるように保持されます。これにより、プロセッサーは最大値が保持値より大きい記録のみをフェッチすることができます。これは、増分フェッチや新しく追加された行のフェッチなどに使用できます。最大値をクリアするには、ステート管理のドキュメントに従ってプロセッサーのステートをクリアします。 |
リレーションシップ¶
名前 |
説明 |
|---|---|
failure |
このリレーションシップは、 SQL クエリ実行(着信 FlowFile を使用)が失敗した場合にのみ使用されます。着信 FlowFile は、ペナルティが課せられ、このリレーションシップにルーティングされます。着信接続が指定されていない場合、この関係は使用されません。 |
success |
SQL クエリ結果セットから FlowFile の作成に成功しました。 |
属性の書き込み¶
名前 |
説明 |
|---|---|
generatetablefetch.sql.error |
プロセッサーに着信接続があり、着信 FlowFile を処理すると SQL 例外が発生する場合、 FlowFile は失敗にルーティングされ、この属性が例外メッセージにセットされます。 |
generatetablefetch.tableName |
クエリ対象のデータベース・テーブル名。 |
generatetablefetch.columnNames |
クエリで使用される列名のカンマ区切りリスト。 |
generatetablefetch.whereClause |
期待される行を取得するためにクエリで使用されるWhere句。 |
generateetablefetch.maxColumnNames |
カンマで区切られた列名のリストで、プロセッサーの実行開始以降に返されたデータの追跡に使用されます。 |
generatetablefetch.limit |
SQL ステートメントによってフェッチされる結果行の数。 |
generatetablefetch.offset |
対応するパーティションを取得するために使用するオフセット。 |
フラグメント識別子 |
同じクエリ結果セットから生成されたすべての FlowFiles は、fragment.identifier 属性の値が同じになります。そして、この結果を相関させるために使用することができます。 |
フラグメント.数 |
これは、1つの ResultSet によって生み出される FlowFiles の総数。この属性は、fragment.identifier属性と併用することで、同じ受信 ResultSet に属する FlowFiles の数を知ることができます。 |
フラグメント.インデックス |
同じ実行から生成されたすべての発信リスト (FlowFiles) における、この FlowFile の位置。fragment.identifier属性と組み合わせて使用することで、どの FlowFiles が同じ実行に由来し、 FlowFiles がどのような順序で生成されたかを知ることができます。 |