Mike,

That's not currently possible with PutDatabaseRecord per se, I've been
meaning to add the upsert capability but haven't gotten around to it.
Some folks have tried setting the statement.type attribute to "insert"
at first, then if the flow file is routed to failure/retry the
attribute is updated to be "update". Keep in mind though that PDR
performs the operation on the entire flow file so that the transaction
can be rolled back at the DB on error. This means if some of the
records in the flow file exist in the DB and others don't, both
"insert" and "update will fail. This was a design decision meant to
support batch operations as a single transaction, rather than an
attempt to run the operation on each record and send the failed
records to failure and the successful records to success. For that
pattern, you can split the records into single-record flowfiles,
convert the record to JSON, then ConvertJsonToSQL -> PutSQL. In fact,
for Phoenix specifically I have heard of folks putting a ReplaceText
in between, changing INSERT to UPSERT before sending to PutSQL. The
irony is that once each flow file has had its SQL updated to UPSERT,
they could have been executed as a single transaction instead of
having to go through individually. That's why the UPSERT capability
for PDR would be so handy, and now that you've reminded me, I should
probably get back to it :)

Regards,
Matt

On Thu, Jan 31, 2019 at 2:40 PM Mike Thomsen <[email protected]> wrote:
>
> The syntax for Phoenix that I see all over the place is an upsert. How do I 
> specify that with PutDatabaseRecord?
>
> Thanks,
>
> Mike

Reply via email to