ExecuteSQLRecord 2025.5.31.15¶
バンドル¶
org.apache.nifi | nifi-standard-nar
説明¶
プロバイダーの SQL select クエリを実行します。クエリ結果はRecord Writerで指定された形式に変換されます。ストリーミングを使用しているため、任意の大きさの結果セットがサポートされます。このプロセッサーは、標準的なスケジューリング方法を使用して、タイマーや 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' は選択された行の数を示します。
入力要件¶
ALLOWED
機密動的プロパティをサポート¶
true
プロパティ¶
プロパティ |
説明 |
---|---|
データベース接続プーリングサービス |
データベースへの接続を取得するために使用するController Service。 |
最大待機時間 |
実行中の SQL セレクト・クエリに許容される最大時間。0は無制限を意味します。1秒未満の最大時間はゼロに等しくなります。 |
SQL クエリ |
実行する SQL クエリ。クエリは空でも、定数値でも、式言語を使用して属性から構築することもできます。このプロパティが指定された場合、受信するフローファイルの内容に関係なく使用されます。このプロパティが空の場合、入力されるフローファイルのコンテンツには、プロセッサがデータベースに対して発行する、有効な SQL セレクトクエリが含まれることが期待されます。式言語は、フローファイルの内容については評価されないことに注意してください。 |
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-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 にセットされません。 |
esqlrecord-normalize |
列名の文字を変更するかどうか。例えば、コロンや期間はアンダースコアに変更されます。 |
esqlrecord-record-writer |
FlowFile への結果の書き込みに使用するController Serviceを指定します。Record Writerは推論スキーマの動作をエミュレートするためにInherit Schemaを使用する場合があります。すなわち、明示的なスキーマをライターで定義する必要はなく、列タイプからスキーマを推論するのと同じロジックによって供給されます。 |
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 にセットされます。接続がない場合、属性は追加されません。 |
mime.type |
mime.type属性をRecord Writerで指定された MIME Typeにセットします。 |
record.count |
Record Writerが出力した記録数。 |