Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In this article

Table of Contents
maxLevel2
excludeOlder Versions|Additional Resources|Related Links|Related Information

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).
The Snap will substitute values from an incoming document into the SQL statement if it finds a JSONPath substring in the statement. If a substitution value is missing in the incoming document then the document will be written to an error view.

Note
  • Multiple documents cannot be executed as part of one transaction; the relationship is one transaction per document.
  • The account being used must have auto commit set to false, otherwise the Snap will fail with a configuration exception. You can drop your database with it, so be careful.


Expected downstream Snaps
: The Snap will output one document for every document retrieved, hence any document processing Snap can be used downstream. Each output document will provide information about the statements that were executed. Expected upstream Snaps: A Mapper Snap, which transforms the input data into the exact structure that is needed by each statement of the Snap.

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 Task Pipelines.

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:


InputThis Snap has exactly one input view.
OutputThis Snap has at most one output view.
Error

This Snap has at most one error view and produces zero or more documents in the view.

Note
Database Write Snaps output all records of a batch (as configured in your account settings) to the error view if the write fails during batch processing.



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: 

  • Insert into ADJUSTMENTS VALUES ($BUS_AREA_CD, $CR_FG, $FUNC_AREA_CD, $LGCL_DEL_FG, $MAIN_MCC_FG, $PR_EFF_DT, $SO_ADJ_AM, $SO_ADJ_CD)

Multiexcerpt include macro
nameME_DB_Snaps_Query_Examples
pageOracle - Update

Warning
titleSingle quotes in values must be escaped

Any relational database (RDBMS) treats single quotes (') as special symbols. So, single quotes in the data or values passed through a DML query may cause the Snap to fail when the query is executed. Ensure that you pass two consecutive single quotes in place of one single quote within the values to escape the single quote.

For example:

If String To pass this valueUse
Has no single quotes
Schaum Series
'Schaum Series'
Contains single quotes
O'Reilly's Publication
'O''Reilly''s Publication'



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

Multiexcerpt include macro
nameSnap Execution
pageSOAP Execute

Multiexcerpt include macro
nameExecution_Detail_Write
pageSOAP Execute


Examples


Example Input

Code Block
[
  {
    "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:

Code Block
[
  {
    "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:

Code Block
[
  {
    "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.

Download the sample pipeline.

Note
 It depends on tables that need to be created by the user manually. The template by itself can not be executed successfully.


Insert excerpt
Vertica Snap Pack
Vertica Snap Pack
nopaneltrue