Vertica - Multi Execute
In this article
Snap type: | Write | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Description: | This Snap allows you to execute multiple SQL statements for each document. Each set of statements is executed as one transaction (per document).
Expected input: Document that conforms to variables needed for each statement. Expected output: Document which provides information about the status of the execution, each statement is represented as an execution_<index>, where <index> is the row number in the Executions table. For convenience, each execution_<index> will provide the statement that was executed and the input data that was used to execute the statement. | ||||||||||
Prerequisites: | N/A | ||||||||||
Support and limitations: | Works in Ultra Tasks. | ||||||||||
Account: | This Snap uses account references created on the Accounts page of SnapLogic Manager to handle access to this endpoint. See Configuring Vertica Accounts for information on setting up this type of account. | ||||||||||
Views: |
| ||||||||||
Settings | |||||||||||
Label | Required. The name for the Snap. You can modify this to be more specific, especially if you have more than one of the same Snap in your pipeline. | ||||||||||
Executions | Required. A list of statements that are executed as one transaction. | ||||||||||
Path | A JSONPath that returns a list or object from the input document. Example: jsonPath($, "$ADJUSTMENTS[*]") | ||||||||||
SQL Statement | A SQL statement that uses the result of the path as part of the statement substitution. Examples:
Caution Using expressions that join strings together to create SQL queries or conditions has a potential SQL injection risk and is hence unsafe. Ensure that you understand all implications and risks involved before using concatenation of strings with '=' Expression enabled. Single quotes in values must be escaped Any relational database (RDBMS) treats single quotes ( For example:
| ||||||||||
Number of retries | The maximum number of times that the process must be retried before displaying an error. Example: 2 Default value: 0 | ||||||||||
Retry interval (seconds) | The maximum resting time in seconds between subsequent retries. Example: 2 Default value: 1 | ||||||||||
Snap execution | Select one of the three modes in which the Snap executes. Available options are:
|
Examples
Example Input
[ { "ORDER_DETAIL": { "SO_LN_ITM_NR": "000010", "SO_DTL_CRT_DT": "2014-02-12", "SO_DTL_CLOSE_DT": "2014-02-12", "FXD_VALU_DT": "2014-02-12", "ORD_LN_CNCL_DT": "" }, "ADJUSTMENTS": [ { "SO_ADJ_CD": "ZNAJ", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" }, { "SO_ADJ_CD": "ZNAK", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" } ] } ] In row one we select the adjustments; given the input, it returns a list of objects. The insert statement will then create a batch for every object in the list and execute it. In row two we select the order detail; given the input, it returns one object. The insert statement will then execute one statement using the order detail object. The statement can use variables that are the result of the path execution. As an example, the below is the result of jsonPath($, "$ADJUSTMENTS[*]): { "SO_ADJ_CD": "ZNAJ", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" }, { "SO_ADJ_CD": "ZNAK", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" }
The statement then refers to the variables of the result using, for example, $BUS_AREA_CD, not as one would assume the whole path to the variable in the context of the input document. jsonPath($, "$ADJUSTMENTS[*].BUS_AREA_CD), instead the context is the result of the path evaluation.
A successful execution of all statements will issue a commit of the transaction. Any failure of any of the statements will cause the rollback of all issues operations for the given input document.
A successful output:
[ { "execution_1": { "status": "success", "sqlStatement": "Insert into ORDER_DETAIL VALUES (?, ?, ?, ?, ?)", "successfulDocuments": [ { "message": "success", "status": 1, "original": { "SO_LN_ITM_NR": "000010", "SO_DTL_CRT_DT": "2014-02-12", "SO_DTL_CLOSE_DT": "2014-02-12", "FXD_VALU_DT": "2014-02-12", "ORD_LN_CNCL_DT": "" } } ] }, "execution_0": { "status": "success", "sqlStatement": "Insert into ADJUSTMENTS VALUES (?, ?, ?, ?, ?, ?, ?, ?)", "successfulDocuments": [ { "message": "success", "status": 2, "original": { "SO_ADJ_CD": "ZNAJ", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" } }, { "message": "success", "status": 2, "original": { "SO_ADJ_CD": "ZNAK", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" } } ] } } ]
One output document is written per input document. The output document provides executions, each reflecting the execution of one row. The index of the execution_<index> represents the index of the statement in the Executions table.
Each execution provides information about the statement execution. In the above case, all statements were successful. Original shows the data that was used as part of the statement execution (not the input document, but the data of the path evaluation).
The SQL statement shows the statement that was executed.
In an unsuccessful case, one can enable the error view to gain a better understanding of what went wrong:
[ { "execution_1": { "status": "failed", "sqlStatement": "Insert into wrongname VALUES (?, ?, ?, ?, ?)", "errorDocuments": [ { "error": "Failed to flush batch.", "reason": "Table 'integration.wrongname' doesn't exist", "original": { "SO_LN_ITM_NR": "000010", "SO_DTL_CRT_DT": "2014-02-12", "SO_DTL_CLOSE_DT": "2014-02-12", "FXD_VALU_DT": "2014-02-12", "ORD_LN_CNCL_DT": "" }, "resolution": "Please address the issue reported by the database.", "stacktrace": "org.jooq.exception.DataAccessException: SQL [Insert into wrongname VALUES (?, ?, ?, ?, ?)]; Table 'integration.wrongname' doesn't exist\n...." } ] }, "execution_0": { "status": "success", "sqlStatement": "Insert into ADJUSTMENTS VALUES (?, ?, ?, ?, ?, ?, ?, ?)", "successfulDocuments": [ { "message": "success", "status": 2, "original": { "SO_ADJ_CD": "ZNAJ", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" } }, { "message": "success", "status": 2, "original": { "SO_ADJ_CD": "ZNAK", "SO_ADJ_AM": "0.00", "LGCL_DEL_FG": "N", "CR_FG": "N", "MAIN_MCC_FG": "", "BUS_AREA_CD": "9600", "FUNC_AREA_CD": "A051", "PR_EFF_DT": "" } } ] } } ]
Here we see that execution_1 of the current input document failed. The reason and resolution are provided, as well as the stack trace for debugging purpose.
Snap Pack History
Have feedback? Email documentation@snaplogic.com | Ask a question in the SnapLogic Community
© 2017-2024 SnapLogic, Inc.