Tim Luca Derksen
04/17/2026, 8:04 AM0.23.1 on dbt-fabric (Microsoft Fabric Warehouse). Our dbt-fabric adapter does not yet support the merge incremental strategy, so all Elementary artifact/run-results models currently fail on my setup.
We are planning to upgrade the dbt-fabric adapter soon to a newer version, right now we aren't able to do it safely.
The only supported non-append strategy on Fabric is delete+insert. As a workaround I'm overriding Elementary's dispatched macro in my own project:
{%- macro fabric__get_default_incremental_strategy() %}
{% do return("delete+insert") %}
{% endmacro %}
Before I roll this out, I wanted to sanity-check with you whether this is safe for Elementary's data model. A few concerns I'd appreciate your input on:
1. created_at semantics — insert_rows.sql auto-assigns created_at on insert. Under merge, matched rows keep their original created_at. Under delete+insert, the row is dropped and reinserted, so created_at is overwritten on every run. Is this used anywhere by the Elementary UI / Cloud as a "first seen" timestamp, or is generated_at the canonical one?
2. Atomicity / partial failures — delete+insert is two separate statements. If the INSERT fails after the DELETE, rows are missing until the next run. Are any Elementary models (especially dbt_run_results, elementary_test_results, data_monitoring_metrics) relied upon by other models within the same invocation in a way that this transient inconsistency could break?
3. merge_update_columns / merge_exclude_columns — are any Elementary models using these? They'd be silently ignored under delete+insert.
4. Cross-table consistency — dbt_columns.parent_unique_id etc. logically reference dbt_models.unique_id. During a run, when the parent table is mid delete+insert, child tables briefly reference non-existent parents. Is that handled downstream, or does the Cloud UI / report generation assume a consistent snapshot?kapa.ai
04/17/2026, 8:04 AMdelete+insert into separate statements: [Redshift macro override]
# dbt_project.yml
dispatch:
- macro_namespace: elementary
search_order: ['<YOUR_PROJECT_NAME>', 'elementary']
This pattern is considered safe as long as you don't alter schemas or constraints. On your specific concerns 1. created_at vs generated_at semantics
The knowledge sources confirm that these two fields have distinct meanings:
• generated_at = the dbt execution time
• created_at = the time the row was written to the database
Elementary support explicitly recommends created_at as the more reliable field for incremental load logic. [generated_at vs created_at]
However, whether created_at is used as a "first seen" timestamp in the Elementary UI/Cloud is not addressed in the knowledge sources. I cannot confirm or deny this.
2. Atomicity / partial failures
The knowledge sources do acknowledge that delete+insert is two separate statements and that a failure between them leaves the table in an inconsistent state until the next run. This is noted as a known risk in the BigQuery concurrent transactions issue: [BigQuery concurrent transactions]
However, whether Elementary's models within the same invocation have hard dependencies on dbt_run_results, elementary_test_results, or data_monitoring_metrics being fully consistent mid-run is not documented in the knowledge sources.
3. merge_update_columns / merge_exclude_columns
The knowledge sources do not mention these dbt incremental config options in the context of Elementary's models. I cannot confirm whether any Elementary models use them.
4. Cross-table consistency
The knowledge sources confirm that tables like dbt_columns.parent_unique_id logically reference dbt_models.unique_id, and that Elementary's artifact tables are updated via delete_and_insert logic in on-run-end. [dbt artifacts behavior] However, how the Elementary Cloud UI or report generation handles transient cross-table inconsistency is not covered in the knowledge sources. Recommendation Given the gaps in the available documentation, I'd strongly recommend raising this directly with the Elementary team (e.g., via their Slack community or a GitHub issue), as these are implementation-level questions that require access to Elementary's internal model dependency graph and UI rendering logic. The knowledge sources simply don't go deep enough to give you the safety guarantees you're looking for before rolling this out to production. 👍 0 button 👎 0 button ℹ️ Tip: Mention @elementary.ai in the thread for follow-ups or DM the app for 1-to-1 help.