ExecuteSQLRecord 2025.5.31.15¶
Bundle¶
org.apache.nifi | nifi-standard-nar
Beschreibung¶
Führt die bereitgestellte SQL-Select-Abfrage aus. Das Ergebnis der Abfrage wird in das von einem Record Writer angegebene Format konvertiert. Streaming wird verwendet, sodass beliebig große Resultsets unterstützt werden. Dieser Prozessor kann über einen Timer oder einen Cron-Ausdruck mit den Standardmethoden für die Zeitplanung gesteuert oder durch ein eingehendes FlowFile ausgelöst werden. Wenn er durch ein eingehendes FlowFile ausgelöst wird, stehen die Attribute dieses FlowFile bei der Auswertung der Select-Abfrage zur Verfügung, und die Abfrage kann das „?“ verwenden, um Parameter zu umgehen. In diesem Fall müssen die zu verwendenden Parameter als FlowFile-Attribute mit der Namenskonvention „sql.args.N.type“ und „sql.args.N.value“ existieren, wobei N eine positive Ganzzahl ist. Es wird erwartet, dass „sql.args.N.type“ eine Zahl ist, die den JDBC-Typ angibt. Es wird erwartet, dass der Inhalt des FlowFile im UTF-8-Format vorliegt. Das FlowFile-Attribut „executesql.row.count“ gibt an, wie viele Zeilen ausgewählt wurden.
Eingabeanforderung¶
ALLOWED
Unterstützt sensible dynamische Eigenschaften¶
true
Eigenschaften¶
Eigenschaft |
Beschreibung |
---|---|
Database Connection Pooling Service |
Der Controller Service, der verwendet wird, um eine Verbindung zur Datenbank herzustellen |
Max Wait Time |
Die maximal zulässige Dauer für eine laufende SQL-Abfrage. Null bedeutet, dass es keine Begrenzung gibt. Eine maximale Zeit von weniger als 1 Sekunde entspricht Null. |
SQL-Abfrage |
Die SQL-Abfrage, die ausgeführt werden soll. Die Abfrage kann leer sein, einen konstanten Wert enthalten oder aus Attributen mithilfe der Ausdruckssprache erstellt werden. Wenn diese Eigenschaft angegeben ist, wird sie unabhängig vom Inhalt der eingehenden FlowFiles verwendet. Wenn diese Eigenschaft leer ist, wird erwartet, dass der Inhalt des eingehenden FlowFile eine gültige SQL-Select-Abfrage enthält, die vom Prozessor an die Datenbank ausgegeben werden soll. Beachten Sie, dass die Ausdruckssprache nicht für FlowFile-Inhalte ausgewertet wird. |
dbf-default-precision |
Wenn ein DECIMAL-/NUMBER- Wert als Avro-Logik-Typ „decimal“ geschrieben wird, ist eine bestimmte „precision“ (Genauigkeit) erforderlich, die die Anzahl der verfügbaren Ziffern angibt. Im Allgemeinen wird die Genauigkeit durch die Datentypdefinition der Spalte oder die Standardeinstellung der Datenbank-Engine festgelegt. Allerdings kann von einigen Datenbank-Engines eine undefinierte Genauigkeit (0) zurückgegeben werden. „Default Decimal Precision“ wird beim Schreiben dieser Zahlen mit undefinierter Genauigkeit verwendet. |
dbf-default-scale |
Wenn ein DECIMAL-/NUMBER-Wert als Avro-Logik-Typ „decimal“ geschrieben wird, ist eine bestimmte „scale“ (Skalierung) erforderlich, die die Anzahl der verfügbaren Dezimalstellen angibt. Im Allgemeinen wird die Skalierung durch die Datentypdefinition der Spalte oder die Standardeinstellung der Datenbank-Engine festgelegt. Wenn jedoch eine undefinierte Genauigkeit (0) zurückgegeben wird, kann die Skalierung bei einigen Datenbank-Engines ebenfalls ungewiss sein. „Default Decimal Scale“ wird beim Schreiben dieser undefinierten Zahlen verwendet. Wenn ein Wert mehr Dezimalstellen hat als in der angegebenen Skalierung, wird der Wert gerundet, z. B. wird 1,53 bei einer Skalierung von 0 zu 2 und bei einer Skalierung von 1 zu 1,5. |
dbf-user-logical-types |
Ob Avro Logical Types für die Spalten DECIMAL/NUMBER, DATE, TIME und TIMESTAMP verwendet werden sollen. Wenn deaktiviert, als Zeichenfolge geschrieben. Wenn aktiviert, werden logische Typen verwendet und als ihr zugrunde liegender Typ geschrieben, insbesondere DECIMAL/NUMBER als logisches „Dezimal“: geschrieben als Bytes mit zusätzlichen Metadaten zu Genauigkeit und und Skalierung, DATE Als logisches „date-millis“: geschrieben als Integer, der die Anzahl der Tage seit der Unix-Epoche (1970-01-01) angibt, TIME als logisches „time-millis“: geschrieben als Integer, der die Millisekunden seit der Unix-Epoche angibt, und TIMESTAMP als logischer Typ „timestamp-millis“: gespeichert als Long-Wert, der Millisekunden seit der Unix-Epoche angibt. Wenn ein Reader von geschriebenen Avro-Datensätzen diese logischen Typen ebenfalls kennt, können diese Werte je nach Implementierung des Readers mit mehr Kontext deserialisiert werden. |
esql-auto-commit |
Aktiviert oder deaktiviert die Auto-Commit-Funktion der DB-Verbindung. Der Standardwert ist „true“. Der Standardwert kann mit den meisten JDBC-Treibern verwendet werden und diese Funktionalität hat in den meisten Fällen keine Auswirkungen, da dieser Prozessor zum Lesen von Daten verwendet wird. Bei einigen JDBC-Treibern, wie z. B. dem PostgreSQL-Treiber, ist es jedoch erforderlich, die Auto-Commit-Funktion zu deaktivieren, um die Zahl der gleichzeitig abgerufenen Ergebniszeilen zu begrenzen. Wenn Auto-Commit aktiviert ist, lädt der postgreSQLTreiber das gesamte Resultset auf einmal in den Speicher. Dies kann zu einem hohen Speicherverbrauch bei der Ausführung von Abfragen führen, die große Datenmengen abrufen. Weitere Informationen zu diesem Verhalten im PostgreSQL-Treiber finden Sie unter https://jdbc.postgresql.org//documentation/head/query.html. |
esql-fetch-size |
Die Anzahl der Ergebniszeilen, die auf einmal aus dem Resultset abgerufen werden sollen. Dies ist ein Hinweis für den Datenbanktreiber und wird möglicherweise nicht beachtet und/oder ist nicht exakt. Wenn der angegebene Wert Null ist, wird der Hinweis ignoriert. |
esql-max-rows |
Die maximale Anzahl von Ergebniszeilen, die in einem einzigen FlowFile enthalten sind. Damit können Sie sehr große Resultsets in mehrere FlowFiles aufteilen. Wenn der angegebene Wert Null ist, werden alle Zeilen in einem einzigen FlowFile zurückgegeben. |
esql-ausgabe-batch-size |
Die Anzahl der Ausgabe-FlowFiles, die in die Warteschlange gestellt werden, bevor die Prozesssitzung beendet wird. Wenn dieser Wert auf Null gesetzt ist, wird die Sitzung abgeschlossen, wenn alle Resultset-Zeilen verarbeitet wurden und die Ausgabe-FlowFiles zur Übertragung an die nachgelagerte Beziehung bereit sind. Bei großen Resultsets kann dies dazu führen, dass am Ende der Prozessorausführung eine große Menge an FlowFiles übertragen werden muss. Wenn diese Eigenschaft gesetzt ist, wird die Sitzung übertragen, wenn die angegebene Anzahl von FlowFiles zur Übertragung bereit ist. Damit werden die FlowFiles für die nachgelagerte Beziehung freigegeben. NOTE: Das Attribut „fragment.count“ wird nicht für FlowFiles festgelegt, wenn diese Eigenschaft festgelegt ist. |
esqlrecord-normalize |
Ob Zeichen in Spaltennamen geändert werden sollen. Zum Beispiel werden Doppelpunkte und Punkte in Unterstriche umgewandelt. |
esql-record-record-writer |
Gibt den Controller Service an, der für das Schreiben von Ergebnissen in ein FlowFile verwendet werden soll. Der Record Writer kann das „Inherit Schema“ verwenden, um die Verhaltensweise des abgeleiteten Schemas zu emulieren, d. h. ein explizites Schema muss nicht im Writer definiert sein, sondern wird von der gleichen Logik geliefert, die für die Ableitung des Schemas aus den Spaltentypen verwendet wird. |
sql-post-query |
Eine durch Semikolon getrennte Liste von Abfragen, die nach der Haupt-SQL-Abfrage ausgeführt werden. Beispiel für das Festlegen von Sitzungseigenschaften nach der Hauptabfrage. Es ist möglich, Semikolons in den Anweisungen selbst zu verwenden, indem sie mit einem Backslash („;“) maskiert werden. Ergebnisse/Ausgaben aus diesen Abfragen werden unterdrückt, wenn keine Fehler vorliegen. |
sql-pre-query |
Eine durch Semikolons getrennte Liste von Abfragen, die vor der Ausführung der SQL-Hauptabfrage ausgeführt werden. Legen Sie beispielsweise die Sitzungseigenschaften vor der Hauptabfrage fest. Es ist möglich, Semikolons in den Anweisungen selbst zu verwenden, indem sie mit einem Backslash („;“) maskiert werden. Ergebnisse/Ausgaben aus diesen Abfragen werden unterdrückt, wenn keine Fehler vorliegen. |
Beziehungen¶
Name |
Beschreibung |
---|---|
failure |
Ausführung der SQL-Abrage fehlgeschlagen. Das eingehende FlowFile wird zurückgestellt und an diese Beziehung weitergeleitet. |
success |
FlowFile aus dem SQL-Abfrage Resultset erfolgreich erstellt. |
Schreibt Attribute¶
Name |
Beschreibung |
---|---|
executesql.row.count |
Enthält die Anzahl der in der Select-Abfrage zurückgegebenen Zeilen |
executesql.query.duration |
Kombinierte Dauer der Abfrageausführungszeit und Abrufzeit in Millisekunden |
executesql.query.executiontime |
Dauer der Ausführungszeit der Abfrage in Millisekunden |
executesql.query.fetchtime |
Dauer der Resultset-Abrufzeit in Millisekunden |
executesql.resultset.index |
Angenommen, es werden mehrere Resultsets zurückgegeben, dann ist dies der nullbasierte Index dieses Resultsets. |
executesql.error.message |
Wenn die Verarbeitung eines eingehenden FlowFiles eine Ausnahme verursacht, wird das FlowFile an die Beziehung „failure“ weitergeleitet und dieses Attribut wird auf die Ausnahmemeldung gesetzt. |
fragment.identifier |
Wenn „Max Rows Per Flow File“ eingestellt ist, haben alle FlowFiles aus dem gleichen Resultset der Abfrage den gleichen Wert für das Attribut „fragment.identifier“. Das kann dann verwendet werden, um die Ergebnisse zu korrelieren. |
fragment.count |
Wenn „Max Rows Per Flow File“ eingestellt ist, ist dies die Gesamtzahl der FlowFiles, die von einem einzigen ResultSet erzeugt werden. Dies kann in Verbindung mit dem Attribut „fragment.identifier“ verwendet werden, um zu erfahren, wie viele FlowFiles zum selben eingehenden ResultSet gehören. Wenn „Output Batch Size“ festgelegt ist, wird dieses Attribut nicht gefüllt. |
fragment.index |
Wenn „Max Rows Per Flow File“ eingestellt ist, dann ist die Position dieses FlowFile in der Liste der ausgehenden FlowFiles, die alle aus demselben Resultset-FlowFile stammen. Dies kann in Verbindung mit dem „Attribut fragment.identifier“ verwendet werden, um zu erfahren, welche FlowFiles aus demselben Resultset stammen und in welcher Reihenfolge FlowFiles erstellt wurden |
input.flowfile.uuid |
Wenn der Prozessor eine eingehende Verbindung hat, wird dieses Attribut bei ausgehenden FlowFiles auf den Wert der UUID des Eingabe-FlowFile gesetzt. Wenn es keine eingehende Verbindung gibt, wird das Attribut nicht hinzugefügt. |
mime.type |
Setzt das Attribut „mime.type“ auf den vom Record Writer angegebenen MIME-Typ. |
record.count |
Die Anzahl der vom Record Writer ausgegebenen Datensätze. |