Skip to content

Conflict Resolution

When multiple data sources contribute to the same consumption entity, conflicts arise. Use these screens when a mapping run reports conflicts — for example, if both your CRM and billing system have a customer_email field, Nexa needs to know which source takes precedence. Conflicts are detected automatically during the AI mapping run and are categorized into two types.

Multi-source conflicts (attribute precedence)

Section titled “Multi-source conflicts (attribute precedence)”

When the same attribute exists in multiple source tables, you define which source wins.

Example: both crm.customers and billing.accounts provide a phone_number field for the customer_360 entity. Which one should the consumption layer use?

When tables that need to combine into a single entity don’t share a direct join key, you define how they connect.

Example: crm.customers and shipping.addresses both feed into customer_360, but they don’t share a column. You need a join path — perhaps through orders.order_id.

Navigate to the Conflicts screen from Data Flow (after a mapping run detects conflicts) or from the AI process screen’s completion alert.

The screen has two tabs, each with a badge count showing the total conflicts of that type:

  • Multi-Source Conflicts — attribute-level precedence rules
  • Disjoint Conflicts — table join definitions

Each tab shows unresolved and resolved conflicts separately, with pagination controls.

Select a multi-source conflict to open the Attribute Precedence editor. You’ll see:

  • The gold entity name at the top with a green checkmark
  • A table listing every attribute that needs a precedence decision

For each attribute, there are two dropdowns:

Column What You Select
Entity Which source entity provides this attribute
Attribute Which specific column from that entity maps to the gold attribute
  1. Select the source entity

    Choose which source table should provide the value for this gold attribute. The attribute dropdown populates with columns from your selection.

  2. Select the source attribute

    Pick the specific column that maps to the gold attribute.

  3. Repeat for each attribute

    Work through all attributes in the list. The system tracks which ones you’ve changed from the initial state.

  4. Save

    Select Save to persist your precedence rules. Only changed mappings are submitted. Select Cancel to discard and return to the conflicts list.

Select a disjoint conflict to open the Join Graph Builder — a visual, interactive diagram for defining how tables connect. The screen has three sections.

  • A progress indicator showing how many of the total tables are connected
  • Instructions explaining join support (triangle and bridge joins)
  • Table chips showing all tables involved in the conflict
  • A visual graph showing tables as draggable nodes
  • Each node displays the table name and a scrollable list of columns with their data types
  • Connected tables link with edges; disconnected tables are outlined in red and offset from the main graph
  • Drag nodes to rearrange the layout

A structured form for defining join conditions. Select + Add Join Step to add a new join. Each join step has:

Field What You Select
Left Table First table in the join
Left Column(s) One or more columns from the left table (multi-select)
Right Table Second table in the join
Right Column(s) One or more columns from the right table (multi-select)

A Remove button deletes a join step. The diagram updates its edges automatically as you define joins.

  • You cannot join a table to itself.
  • The system warns if not all tables are connected after your join definitions.
  • The progress counter updates as tables become connected through your join paths.

Once all conflicts are resolved:

  • Precedence rules feed into the consumption layer code generation.
  • Join definitions become part of the pipeline SQL/PySpark transformations.
  • Return to the Curated Layer or Consumption Layer to continue refining your mappings.