When a Jinja mapping produces a blank value, Quickbase treats it differently depending on the step you're using. In Update Record and Create Record steps, a blank value is left out of the request, so the existing field value stays as is. In bulk upsert steps, that same blank value overwrites the field and clears it.
This article explains why the two behave differently and how to keep a bulk upsert from clearing data you meant to keep.
How each step handles a blank value
Pipelines has a built-in safeguard for single-record writes: if a mapping evaluates to blank, Pipelines doesn't send that field to Quickbase at all, and Quickbase leaves the field exactly as it was. This protects you from accidentally erasing data when an expression happens to return nothing.
Bulk upsert steps can't use that safeguard. A bulk upsert sends all your records together as a CSV to Quickbase's bulk-import API. In a CSV, every field you choose to import is present for every row—there's no way to skip a single field for a single record. A blank mapping becomes an empty cell, and the bulk import reads an empty cell as "set this field to blank." So the value is cleared.
Step type | A blank mapping means… | Effect on the existing value |
|---|---|---|
Update Record or Create Record (one record at a time) | the field is left out of the request | Preserved—left untouched |
Bulk upsert (CSV import of many records) | the field becomes an empty cell in the CSV | Cleared—overwritten with a blank |
In a bulk upsert, a mapping that can return blank will clear that field for every record where it comes out blank. Because the CSV includes the field for every row, there's no way to skip it for individual records.
Example
Say you map a field so it's set to CPQ under a condition and left blank otherwise:
{% if not a.myfield %}
{% else %}
CPQ
{% endif %}In an Update Record step, the blank branch leaves the destination field untouched. In a bulk upsert step, the same blank branch clears the destination field for every record that hits it.
Keep a bulk upsert from clearing fields
Write each mapping so it always returns a value—then no cell is ever blank, and nothing gets cleared.
Review the field mappings in your Add a Bulk Upsert Row or Import with CSV step and find any that can produce a blank value.
Rewrite each one so it always outputs something. For example, use the
defaultfilter to fall back to the source value, or to a set value when the source is empty:{{ a.somefield | default('CPQ', true) }}Save and test your pipeline with a small set of records first to confirm the field keeps its value as expected.
Because the mapping above always outputs a value—the source value, or CPQ when the source is blank—no cell is ever empty, so the existing data is preserved. Any approach that guarantees a non-blank value works the same way.
If you want a field to keep its current value in a bulk upsert, make sure its mapping always returns that value rather than a blank.