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.
Conflict types
Section titled “Conflict 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?
Disjoint conflicts (join definitions)
Section titled “Disjoint conflicts (join definitions)”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.
The Conflicts screen
Section titled “The Conflicts screen”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.
Resolving attribute precedence
Section titled “Resolving attribute precedence”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 |
-
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.
-
Select the source attribute
Pick the specific column that maps to the gold attribute.
-
Repeat for each attribute
Work through all attributes in the list. The system tracks which ones you’ve changed from the initial state.
-
Save
Select Save to persist your precedence rules. Only changed mappings are submitted. Select Cancel to discard and return to the conflicts list.
Resolving disjoint conflicts
Section titled “Resolving disjoint conflicts”Select a disjoint conflict to open the Join Graph Builder — a visual, interactive diagram for defining how tables connect. The screen has three sections.
Info panel
Section titled “Info panel”- 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
Join diagram
Section titled “Join diagram”- 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
Join definitions panel
Section titled “Join definitions panel”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.
Validation
Section titled “Validation”- 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.
After resolution
Section titled “After resolution”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.