Version:

Update Records

Runs multiple predicate-based updates in a single call. With the list of given expressions, any matching record's column values will be updated as provided in input parameter new_values_maps. There is also an optional 'upsert' capability where if a particular predicate doesn't match any existing record, then a new record can be inserted.

Note that this operation can only be run on an original table and not on a collection or a result view.

This operation can update primary key values. By default only 'pure primary key' predicates are allowed when updating primary key values. If the primary key for a table is the column 'attr1', then the operation will only accept predicates of the form: "attr1 == 'foo'" if the attr1 column is being updated. For a composite primary key (e.g. columns 'attr1' and 'attr2') then this operation will only accept predicates of the form: "(attr1 == 'foo') and (attr2 == 'bar')". Meaning, all primary key columns must appear in an equality predicate in the expressions. Furthermore each 'pure primary key' predicate must be unique within a given request. These restrictions can be removed by utilizing some available options through input parameter options.Note that this operation can only be run on an original table and not on a collection or a result view.

The update_on_existing_pk option specifies the record collision policy for tables with a primary key, and is ignored on tables with no primary key.

Input Parameter Description

Name Type Description
table_name string Table to be updated. Must be a currently existing table and not a collection or view.
expressions array of strings A list of the actual predicates, one for each update; format should follow the guidelines here.
new_values_maps array of maps of string to strings and/or nulls List of new values for the matching records. Each element is a map with (key, value) pairs where the keys are the names of the columns whose values are to be updated; the values are the new values. The number of elements in the list should match the length of input parameter expressions.
records_to_insert array of bytes An optional list of new binary-avro encoded records to insert, one for each update. If one of input parameter expressions does not yield a matching record to be updated, then the corresponding element from this list will be added to the table. The default value is an empty array ( [] ).
records_to_insert_str array of strings An optional list of new json-avro encoded objects to insert, one for each update, to be added to the set if the particular update did not affect any objects. The default value is an empty array ( [] ).
record_encoding string

Identifies which of input parameter records_to_insert and input parameter records_to_insert_str should be used. The default value is binary. The supported values are:

  • binary
  • json
options map of string to strings

Optional parameters. The default value is an empty map ( {} ).

Supported Parameters (keys) Parameter Description
global_expression An optional global expression to reduce the search space of the predicates listed in input parameter expressions. The default value is ''.
bypass_safety_checks

When set to true, all predicates are available for primary key updates. Keep in mind that it is possible to destroy data in this case, since a single predicate may match multiple objects (potentially all of records of a table), and then updating all of those records to have the same primary key will, due to the primary key uniqueness constraints, effectively delete all but one of those updated records. The default value is false. The supported values are:

  • true
  • false
update_on_existing_pk

Specifies the record collision policy for tables with a primary key when updating columns of the primary key or inserting new records. If true, existing records with primary key values that match those of a record being updated or inserted will be replaced by the updated and new records. If false, existing records with matching primary key values will remain unchanged, and the updated or new records with primary key values that match those of existing records will be discarded. If the specified table does not have a primary key, then this option has no effect. The default value is false.

Supported Values Description
true Overwrite existing records when updated and inserted records have the same primary keys
false Discard updated and inserted records when the same primary keys already exist
update_partition

Force qualifying records to be deleted and reinserted so their partition membership will be reevaluated. The default value is false. The supported values are:

  • true
  • false
truncate_strings

If set to true, any strings which are too long for their charN string fields will be truncated to fit. The default value is false. The supported values are:

  • true
  • false
use_expressions_in_new_values_maps

When set to true, all new values in input parameter new_values_maps are considered as expression values. When set to false, all new values in input parameter new_values_maps are considered as constants. NOTE: When true, string constants will need to be quoted to avoid being evaluated as expressions. The default value is false. The supported values are:

  • true
  • false
record_id ID of a single record to be updated (returned in the call to Insert Records Request or Get Records from Collection).

Output Parameter Description

Name Type Description
count_updated long Total number of records updated.
counts_updated array of longs Total number of records updated per predicate in input parameter expressions.
count_inserted long Total number of records inserted (due to expressions not matching any existing records).
counts_inserted array of longs Total number of records inserted per predicate in input parameter expressions (will be either 0 or 1 for each expression).
info map of string to strings Additional information.