QueryDatabaseTable 2025.5.31.15¶
バンドル¶
org.apache.nifi | nifi-standard-nar
説明¶
SQL select クエリを生成するか、提供されたステートメントを使用し、それを実行して、指定された Maximum Value 列の値が以前に見た最大値よりも大きいすべての行を取得します。クエリ結果はAvro形式に変換されます。式言語はいくつかのプロパティでサポートされていますが、着信接続は許可されていません。Environment/System プロパティは、式言語を含むすべてのプロパティに値を提供するために使用できます。フローファイルの属性を活用してクエリを実行したい場合は、 GenerateTableFetch および/または ExecuteSQL プロセッサーを使用できます。ストリーミングを使用しているため、任意の大きさの結果セットがサポートされます。このプロセッサーは、標準的なスケジューリング方法を使用して、タイマー式またはcron式で実行するようにスケジュールすることができます。このプロセッサーはプライマリ・ノードでのみ実行されます。FlowFile 属性 'querydbtable.row.count' は、選択された行の数を示します。
入力要件¶
FORBIDDEN
機密動的プロパティをサポート¶
false
プロパティ¶
プロパティ |
説明 |
---|---|
返す列 |
クエリで使用する列名のカンマ区切りリスト。データベースで名前に特別な処理(引用など)が必要な場合は、それぞれの名前にその処理を含める必要があります。列名を指定しなかった場合は、指定したテーブルのすべての列が返されます。NOTE: 増分フェッチが正しく動作するためには、指定したテーブルに対して一貫性のある列名を使用することが重要です。 |
データベース接続プーリングサービス |
データベースへの接続を取得するために使用するController Service。 |
データベース方言サービス |
特定のサービスやベンダーに特化したステートメントを生成するためのデータベース方言サービス。 |
フェッチサイズ |
結果セットから一度に取得する結果行の数。これはデータベースドライバーへのヒントであり、正確でない場合があります。指定された値が0の場合、ヒントは無視されます。PostgreSQL を使用する場合、 'Fetch Size' を有効にするには 'Set Auto Commit' を 'false' にする必要があります。 |
最大待機時間 |
実行中の SQL セレクト・クエリに許容される最大時間。1秒未満の最大時間はゼロに等しくなります。 |
Maximum-value Columns |
カンマで区切られた列名のリスト。プロセッサーは、プロセッサーが実行を開始してから返された各列の最大値を追跡します。複数の列を使用することは、列リストに順序を意味し、各列の値は前の列の値よりもゆっくりと増加することが期待されます。したがって、複数の列を使用することは、列の階層構造を意味し、これは通常テーブルのパーティショニングに使用されます。このプロセッサーを使用すると、前回の検索以降に追加/更新された行のみを検索することができます。ビット/ブールなどの JDBC タイプは最大値を維持するのに適していないため、これらの型の列はこのプロパティにリストされるべきではなく、処理中にエラーになることに注意してください。列が提供されない場合、テーブルのすべての行が考慮され、パフォーマンスに影響を与える可能性があります。NOTE: 増分フェッチが正しく動作するためには、指定されたテーブルで一貫した最大値列名を使用することが重要です。 |
自動コミットのセット |
DB 接続の自動コミット機能を有効または無効にします。デフォルト値は「No value set」。「値をセットしない」は、DB接続の自動コミットモードを変更しません。PostgreSQL ドライバーのようないくつかの JDBC ドライバーでは、「Fetch Size」設定を有効にするために、自動コミット機能を無効にする必要があります。自動コミットが有効な場合、 PostgreSQL ドライバーは 'Fetch Size' 設定を無視し、結果セットのすべての行を一度にメモリにロードします。このため、大規模なデータセットをフェッチするクエリを実行すると、大量のメモリが使用される可能性があります。PostgreSQL ドライバーにおけるこの動作の詳細は、https://jdbc.postgresql.org//documentation/head/query.html にあります。 |
テーブル名 |
クエリ対象のデータベース・テーブル名。カスタムクエリが使用される場合、このプロパティはクエリのエイリアスとして使用され、 FlowFile の属性として表示されます。 |
db-fetch-db-type |
特定のサービスやベンダーに特化したステートメントを生成するためのデータベースタイプ。汎用タイプはほとんどのケースをサポートしますが、特定のタイプを選択することで、最適な処理や追加機能が可能になります。 |
db-fetch-sql-query |
データを取得するために使用されるカスタム SQL クエリ。他のプロパティから SQL クエリを構築する代わりに、このクエリはサブクエリとしてラップされます。クエリには、 ORDER BY ステートメントがあってはなりません。 |
db-fetch-where-clause |
SQL クエリを構築する際に WHERE 条件に追加するカスタム句を追加します。 |
dbf-default-precision |
DECIMAL/NUMBER の値が'10進数'Avro論理タイプとして記述される場合、利用可能な桁数を示す特定の'精度'が要求されます。一般的に、精度は列のデータ型の定義やデータベースエンジンのデフォルトによって定義されます。しかし、データベースエンジンによっては未定義の精度(0)が返されることがあります。デフォルトの10進数」は、未定義の精度の数値を書き込むときに使用されます。 |
dbf-default-scale |
DECIMAL/NUMBER の値が'10進数'Avro論理タイプとして記述される場合、利用可能な10進数の桁数を示す特定の'スケール'が必要となります。一般的に、スケールは列のデータ型定義やデータベースエンジンのデフォルトで定義されます。しかし、未定義の精度(0)が返された場合、データベースエンジンによってはスケールが不確定になることもあります。「デフォルトの10進数」は、未定義の数値を書くときに使われます。もし数値が指定のスケールよりも小数点を持つなら、値は切り上げられます。例えば、1.53はスケール0では2になり、スケール1では1.5になります。 |
dbf-normalize |
列名の非Avro互換文字をAvro互換文字に変更するかどうか。例えば、有効なAvro記録を作成するために、コロンや期間はアンダースコアに変更されます。 |
dbf-user-logical-types |
DECIMAL/NUMBER, DATE, TIME と TIMESTAMP 列にAvro論理タイプを使用するかどうか。無効の場合は文字列で記述。有効にすると、論理タイプが使用され、その基になるタイプとして記述されます。具体的には、 DECIMAL/NUMBER は論理 'decimal' として使用されます。: 追加の精度とスケールメタデータを持つバイトとして記述され、 DATE は論理 'date-millis' として: Unixのエポック(1970-01-01)からの日数を示すintとして記述され、 TIME は論理 'time-millis' として: Unixのエポックからのミリ秒を示すintとして記述され、 TIMESTAMP は論理 'timestamp-millis' として: Unixのエポックからのミリ秒を示すlongとして記述されます。書き込まれたAvro記録のリーダーもこれらの論理タイプを知っている場合、リーダーの実装によっては、これらの値をより多くのコンテキストでデシリアライズすることができます。 |
initial-load-strategy |
プロセッサーの初回起動時(またはその状態がクリアされた時)のデータベーステーブルの既存の行の処理方法。このプロパティは、 'initial.maxvalue.*' 動的プロパティも構成されている場合、無視されます。 |
qdbt-max-frags |
フラグメントの最大数。指定した値がゼロの場合は、すべてのフラグメントが返されます。これにより、このプロセッサーが巨大なテーブルをインジェストする際の OutOfMemoryError を防ぎます。NOTE: このプロパティを設定すると、入力される結果は順序付けされず、結果セットに行が含まれない任意の境界でフラグメントが終了する可能性があるため、データが失われる可能性があります。 |
qdbt-max-rows |
1つの FlowFile に含まれる結果行の最大数。これにより、非常に大きな結果セットを複数の FlowFiles に分割することができます。指定された値がゼロの場合、すべての行が単一の FlowFile で返されます。 |
qdbt-output-batch-size |
プロセスセッションをコミットする前にキューに入れる出力 FlowFiles の数。ゼロに設定すると、すべての結果セット行が処理され、出力 FlowFiles が下流のリレーションシップに転送できる状態になったときにセッションがコミットされます。大容量の結果セットの場合、プロセッサーの実行終了時に転送されるべき FlowFiles の大きなバーストを引き起こす場合があります。このプロパティがセットされている場合、指定された数の FlowFiles が転送可能な状態になると、セッションがコミットされ、 FlowFiles がダウンストリームリレーションシップにリリースされます。NOTE: このプロパティがセットされている場合、 maxvalue.* とfragment.count属性は FlowFiles に設定されません。 |
transaction-isolation-level |
この設定は、この設定をサポートするドライバーのデータベース接続のトランザクション分離レベルをセットします。 |
状態管理¶
スコープ |
説明 |
---|---|
CLUSTER |
指定したテーブルに対してクエリを実行した後、指定した列の最大値は、次回以降のクエリ実行時に使用できるように保持されます。これにより、プロセッサーは最大値が保持値より大きい記録のみをフェッチすることができます。これは、増分フェッチや新しく追加された行のフェッチなどに使用できます。最大値をクリアするには、ステート管理のドキュメントに従ってプロセッサーのステートをクリアします。 |
リレーションシップ¶
名前 |
説明 |
---|---|
success |
SQL クエリ結果セットから FlowFile の作成に成功しました。 |
属性の書き込み¶
名前 |
説明 |
---|---|
tablename |
クエリ対象のテーブル名 |
querydbtable.row.count |
クエリで選択された行数 |
フラグメント識別子 |
フローファイルあたりの最大行数」が設定されている場合、同じクエリ結果セットのすべての FlowFiles には、fragment.identifier属性に同じ値が設定されます。そして、この結果を相関させるために使用することができます。 |
フラグメント.数 |
Max Rows Per Flow File(フローファイルあたりの最大行数)」がセットされている場合、これは1つの ResultSet によって生成される FlowFiles の総数となります。この属性は、fragment.identifier属性と併用することで、同じ受信 ResultSet に属する FlowFiles の数を知ることができます。出力バッチ・サイズがセットされている場合、この属性は入力されません。 |
フラグメント.インデックス |
「Max Rows Per Flow File(フローファイルあたりの最大行数)」がセットされている場合、同じ結果セット FlowFile から派生したすべての発信 FlowFiles のリストにおける、この FlowFile の位置です。fragment.identifier属性と併用することで、同じクエリ結果セットからどの FlowFiles 、どの順番で FlowFiles が生成されたのかになり得ます。 |
maxvalue.* |
各属性は、指定された「最大値列」の観測された最大値を含みます。属性の接尾辞は列の名前です。出力バッチ・サイズがセットされている場合、この属性は入力されません。 |