ExecuteSQL 2025.5.31.15

バンドル

org.apache.nifi | nifi-standard-nar

説明

プロバイダーの SQL select クエリを実行します。クエリ結果はAvro形式に変換されます。ストリーミングを使用しているため、任意の大きさの結果セットがサポートされます。このプロセッサーは、標準的なスケジューリング方法を使用して、タイマーや cron式で実行するようにスケジュールすることも、 FlowFile からの着信でトリガーすることもできます。もし、このトリガーが FlowFile から発生した場合、 FlowFile の属性は、セレクトクエリの評価時に利用可能となり、クエリはパラメーターをエスケープするために「?」を使用する場合があります。この場合、使用するパラメーターは命名規則sql.args.N.typeとsql.args.N.valueを持つ FlowFile 属性として存在しなければなりません。sql.args.N.typeには JDBC Typeを示す数値を指定します。FlowFile の内容は、 UTF-8 形式になる予定です。FlowFile 属性 'executesql.row.count' は選択された行の数を示します。

タグ

データベース、jdbc、クエリ、選択、SQL

入力要件

ALLOWED

機密動的プロパティをサポート

true

プロパティ

プロパティ

説明

コンテンツ出力戦略

入力 FlowFiles を処理する際に FlowFile コンテンツを書き込むためのストラテジーを指定します。このストラテジーは、結果を生成しないクエリを処理する際に適用されます。

データベース接続プーリングサービス

データベースへの接続を取得するために使用するController Service。

最大待機時間

実行中の SQL セレクト・クエリに許容される最大時間。0は無制限を意味します。1秒未満の最大時間はゼロに等しくなります。

SQL クエリ

実行する SQL クエリ。クエリは空でも、定数値でも、式言語を使用して属性から構築することもできます。このプロパティが指定された場合、受信するフローファイルの内容に関係なく使用されます。このプロパティが空の場合、入力されるフローファイルのコンテンツには、プロセッサがデータベースに対して発行する、有効な SQL セレクトクエリが含まれることが期待されます。式言語は、フローファイルの内容については評価されないことに注意してください。

compression-format

Avro ファイルの書き込みに使用する圧縮タイプ。デフォルトはNoneです。

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記録のリーダーもこれらの論理タイプを知っている場合、リーダーの実装によっては、これらの値をより多くのコンテキストでデシリアライズすることができます。

esql-auto-commit

DB 接続の自動コミット関数を有効または無効にします。デフォルト値は「true」。デフォルト値は、ほとんどの JDBC ドライバーで使用でき、このプロセッサーはデータの読み取りに使用されるため、この関数はほとんどの場合何の影響も及ぼしません。しかし、 PostgreSQL ドライバーのような JDBC ドライバーでは、一度にフェッチする結果行数を制限するために、自動コミット機能を無効にする必要があります。自動コミットを有効にすると、 postgreSQL ドライバーは結果セット全体を一度にメモリにロードします。このため、大規模なデータセットをフェッチするクエリを実行すると、大量のメモリが使用される可能性があります。PostgreSQL ドライバーにおけるこの動作の詳細は、https://jdbc.postgresql.org//documentation/head/query.html にあります。

esql-fetch-size

結果セットから一度に取得する結果行の数。これはデータベースドライバーへのヒントであり、正確でない場合があります。指定された値が0の場合、ヒントは無視されます。

esql-max-rows

1つの FlowFile に含まれる結果行の最大数。これにより、非常に大きな結果セットを複数の FlowFiles に分割することができます。指定された値がゼロの場合、すべての行が単一の FlowFile で返されます。

esql-output-batch-size

プロセスセッションをコミットする前にキューに入れる出力 FlowFiles の数。ゼロに設定すると、すべての結果セット行が処理され、出力 FlowFiles が下流のリレーションシップに転送できる状態になったときにセッションがコミットされます。大容量の結果セットの場合、プロセッサーの実行終了時に転送されるべき FlowFiles の大きなバーストを引き起こす場合があります。このプロパティがセットされている場合、指定された数の FlowFiles が転送可能な状態になると、セッションがコミットされ、 FlowFiles がダウンストリームリレーションシップにリリースされます。NOTE: fragment.count 属性は、このプロパティがセットされている場合、 FlowFiles にセットされません。

sql-post-query

メインの SQL クエリが実行された後に実行されるクエリのセミコロン区切りのリスト。メインクエリの後にセッションプロパティをセットするような例。セミコロンをバックスラッシュ (';') でエスケープすることで、ステートメント自体にセミコロンを含めることができます。これらのクエリの結果/出力は、エラーがなければ抑制されます。

sql-pre-query

メインの SQL クエリが実行される前に実行されるクエリのセミコロン区切りリスト。例えば、メインクエリの前にセッションプロパティをセットします。セミコロンをバックスラッシュ (';') でエスケープすることで、ステートメント自体にセミコロンを含めることができます。これらのクエリの結果/出力は、エラーがなければ抑制されます。

リレーションシップ

名前

説明

failure

SQL クエリの実行に失敗しました。着信 FlowFile はペナルティを受け、このリレーションシップにルーティングされます。

success

SQL クエリ結果セットから FlowFile の作成に成功しました。

属性の書き込み

名前

説明

executesql.row.count

クエリが返す行数をコンテナーで表します。「フローファイルごとの最大行数」がセットされている場合、この数値は結果セット全体ではなく、フローファイル内の行数を反映します。

executesql.query.duration

クエリの実行時間とフェッチ時間をミリ秒単位で組み合わせたもの。フローファイルごとの最大行数」がセットされている場合、この数値は結果セット全体ではなく、フローファイル内の行のフェッチ時間のみを反映します。

executesql.query.executiontime

ミリ秒単位のクエリ実行時間。この数値は、「フローファイルあたりの最大行数」の設定に関係なく、クエリの実行時間に反映されます。

executesql.query.fetchtime

結果セットのフェッチ時間(ミリ秒)。フローファイルごとの最大行数」がセットされている場合、この数値は結果セット全体ではなく、フローファイル内の行のフェッチ時間のみを反映します。

executesql.resultset.index

複数の結果セットが返された場合、この結果セットのゼロベースのインデックス。

executesql.error.message

受信フローファイルの処理で例外が発生した場合、フローファイルは失敗にルーティングされ、この属性が例外メッセージにセットされます。

フラグメント識別子

フローファイルあたりの最大行数」が設定されている場合、同じクエリ結果セットのすべての 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 が生成されたのかになり得ます。

input.flowfile.uuid

プロセッサーに着信接続がある場合、発信 FlowFiles には、この属性が入力 FlowFile の値 UUID にセットされます。接続がない場合、属性は追加されません。