GenerateTableFetch 2025.5.31.15

バンドル

org.apache.nifi | nifi-standard-nar

説明

テーブルから行の「ページ」をフェッチする SQL セレクトクエリを生成します。パーティション・サイズ・プロパティは、テーブルの行数とともに、ページのサイズと数、生成される FlowFiles の数を定めます。さらに、Maximum-Value Columns(最大値列)をセットすることで、列の最大値を追跡し、列の値が観測された最大値を超える行のみをフェッチすることで、増分フェッチを実現することができます。このプロセッサーは、プライマリ・ノードのみで実行することを想定しています。このプロセッサーは、着信接続を受け付けることができます。着信接続が提供されているかどうかで、プロセッサーの動作は異なります: - 着信接続が指定されない場合、プロセッサーは指定されたプロセッサースケジュールで SQL クエリを生成します。式言語は多くのフィールドでサポートされていますが、 FlowFile 属性はありません。ただし、プロパティは Environment/System プロパティを使用して評価されます。 - 着信接続が指定され、 FlowFile がプロセッサータスクで使用できない場合、作業は実行されません。 - 着信接続が指定され、 FlowFile がプロセッサータスクで使用可能な場合、 FlowFile の属性をテーブル名などのフィールドの式言語で使用できます。ただし、Max-Value ColumnsとColumns to Returnフィールドは空であるか、指定された各テーブルで可用性のある列を参照している必要があります。

タグ

データベース、フェッチ、生成、jdbc、クエリ、選択、SQL

入力要件

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 がどのような順序で生成されたかを知ることができます。

こちらもご覧ください