Releases: Workday/dj
v1.3.7
What's Changed
Naming alignment
- Renamed framework to DJ (Data JSON) Framework to better reflect its JSON-first, schema-driven approach
- Updated repository URL from
Workday/vscode-dbt-jsontoWorkday/dj
Full Changelog: v1.3.6...v1.3.7
v1.3.6
What's Changed
- CTE exclude/include flags now mirror their main-model counterparts and inherit from the model — a CTE accepts
exclude_date_filter,exclude_daily_filter,exclude_portal_partition_columns,exclude_portal_source_count, andinclude_full_monthwith the same semantics as the corresponding main-model flags. Resolution is uniform: CTE override > model value > false. Setexclude_portal_partition_columns: trueon the model to skip partition auto-injection in every CTE without per-CTE repetition; set it on a single CTE to override only that CTE. - New
dj_iceberg_partition_overwriteincremental strategy — drops and rewrites only the partitions present in the new slice on Iceberg tables. Shipped by DJ (no consumer macro required) and selectable from the Model Wizard. Requires Iceberg format on the target table; DJ flags non-Iceberg use directly in the Problems tab and points you todelete+insertinstead.
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.5...v1.3.6
v1.3.5
What's Changed
unique_keyno longer emitted foroverwrite_existing_partitions— this strategy requires a custom dbt macro in your project (typicallyget_incremental_overwrite_existing_partitions_sql); the DJ extension does not ship it and dbt-trino does not provide it natively. If your project does not define the macro, switch to{ "type": "delete+insert" }— it auto-derivesunique_keyfrom partition columns.dj.lightdash.defaultPartitionColumnCaseSensitive(default:false) — whentrue, partition columns in generated YAML getmeta.dimension.case_sensitive: true. This stops Lightdash from wrapping them inUPPER()in queries, preserving Trino predicate pushdown on partitioned tables. Per-model and per-columnlightdash.case_sensitiveoverrides in.model.jsoncontinue to apply.- Aggregation Validator Enhancements — Validation issues are now flagged as Warnings rather than errors, allowing you to generate SQL and iterate even if columns are un-aggregated. The validator now ignores constant values (e.g., 0, null, 'foo') and Jinja/dbt macros that it cannot introspect. Specific messages added to guide on partition-column alignment for window functions, replacing generic aggregation errors.
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.4...v1.3.5
v1.3.4
What's Changed
- Partition columns automatically emit
case_sensitive: truein YAML meta so Lightdash does not wrap them inUPPER(), preserving predicate pushdown
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.3...v1.3.4
v1.3.3
What's Changed
Incremental strategies
- All four dbt-trino strategies are now settable per model —
append,delete+insert,merge, andoverwrite_existing_partitionsviamaterialization.strategy.typeand the Model Wizard. Previously onlydelete+insertandmergewere expressible per model. - Hover-time warnings on strategies with prerequisites —
mergeflags that it requires Iceberg format on the target table, andoverwrite_existing_partitionsflags that it requires a custom dbt macro in your project; both direct you todelete+insertwhen the prerequisite isn't met. unique_keyauto-derived from partition columns foroverwrite_existing_partitions— matches the existingdelete+insertbehavior, so partitioned incremental models no longer need to spell out their partition column asunique_keyby hand.dj.materialization.defaultIncrementalStrategynow acceptsappend— alongside the existing values. The factory default is stilloverwrite_existing_partitionsand is planned to move todelete+insertin a future release.
CTE fixes
- CTE aggregation fixes —
agg: hll/tdigest/countnow emit valid kernels (hll()was previously a nonexistent function),{name:"datetime", interval}actually truncates to the requested grain,group_by: "dims"groups by the derived expression instead of the alias, and downstream re-aggregations reference the CTE output alias (e.g.sum(thread_gb_hours_sum)) instead of leaking the originalexpr.aggover an already-suffixed column (like{ name: "portal_source_count", agg: "count" }or{ name: "x_hll", agg: "hll" }) keeps the bare name and uses the merge kernel; setoverride_suffix_agg: trueto force a fresh aggregation. - Correct CTE YAML and audit columns —
data_type,description,meta.dimension(includinghidden),exclude_from_group_by,override_suffix_agg, andlightdash.case_sensitivenow flow through CTEs into downstreamdims_from_cte/fcts_from_cteconsumers.datetime,portal_partition_*, andportal_source_countauto-inject in CTEs whosefromis a model, mirroring the main-model behavior (previously dropped by narrowdims_from_model.includelists). Columns are sorted alphabetically with partitions pushed to the bottom, matching main-model output.
Incremental materialization
unique_keyonly defaults to columns the model actually produces — monthly rollups correctly fall back toportal_partition_monthly; unpartitioned incremental models omitunique_keyentirely.
CTE authoring diagnostics
- Stricter validation in the Problems tab — rejects
lightdash.metrics/metrics_mergeon CTE selects (only main-model selects feed Lightdash), un-aggregatedfctcolumns with a main-modelgroup_by(would produce invalid Trino SQL), and warns on no-op outer layers. Errors now pin to the specificselect[]item instead of line 1, and a broad set of Trino aggregate kernels (sum,avg,any_value,arbitrary,merge(cast(... as hyperloglog|tdigest)),approx_*, and any*_aggUDAF) is recognized insideexpr. - New CTE Patterns guide documents inline CTEs, aggregation boundaries, and auto-injection rules.
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.2...v1.3.3
v1.3.2
What's Changed
Airflow ETL Improvements
- Automatic dbt retry for transient failures —
dbt_buildnow performs an immediatedbt retrywhen model failures are not known to be permanent (compilation errors, missing columns, permission denied, etc.), reducing flaky DAG failures from transient Trino errors - Multi-model test tracking — tests that reference multiple models (e.g. relationships tests) now record separate entries per dependent model in
dbt_test_dates, with the MERGE key expanded to(test_id, model_id, event_date)for accurate per-model test tracking - Robust test result parsing —
parse_dbt_resultsnow gracefully falls back todepends_on.nodeswhenattached_nodeis unavailable, and skips tests with no model association instead of writing null model IDs
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.1...v1.3.2
v1.3.1
What's Changed
CTE Partition Filters
- Automatic partition filters for CTEs — CTEs that reference upstream models via
from.modelnow automatically receive_ext_event_date_filterpartition predicates, and models that read from CTEs (from.cte) also get partition filters by resolving the CTE chain to its root model or source. This makes CTE-based models consistent with ephemeral model chains. - CTE-level
exclude_date_filter— individual CTEs can opt out of automatic partition filters by setting"exclude_date_filter": true, independent of the parent model's setting
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.0...v1.3.1
v1.3.0
What's Changed
Catalog-Agnostic Storage Support
- Iceberg and Glue/Polaris support — new
storage_type,etl_schema, andproject_catalogvariables indbt_project.ymlenable catalog-agnostic SQL generation across Delta Lake, Iceberg, Hive, and Glue/Polaris - Storage-type-aware partitioning — incremental models automatically use the correct format (
partitioned_byvspartition_by) based on storage type
Materialization Shorthand
- Simplified syntax for materialization, use
"materialization": "incremental" | "ephemeral"instead of the full object definition. - New
dj.materialization.defaultIncrementalStrategysetting to define global default for incremental materialization shorthand. Can be overridden per model viamaterialization.strategy. - Enabled strategy field in Model Wizard for incremental models.
CTE Bulk Select: Exclude/Include Filters and Type Inheritance
exclude/includesupport for CTE bulk selects —all_from_cte,dims_from_cte, andfcts_from_ctedirectives now acceptexcludeandincludearrays to filter which columns are selected from a CTE, matching the existing support for model-level bulk selects- Column type inheritance in CTEs — when a CTE selects columns as plain strings (e.g.
"select": ["col_a", "col_b"]), the dim/fct type is now inherited from the parent model or CTE instead of defaulting all columns todim. This ensuresdims_from_cteandfcts_from_ctecorrectly filter by column type in CTE-to-CTE chains - CTE column reference validation — invalid column names in
exclude/includearrays are now reported as errors in the VS Code Problems tab with the list of available columns, without blocking the sync workflow - Column lineage accuracy — lineage tracing now respects dims/fcts type filters when resolving CTE bulk directives, preventing
fctcolumns from appearing indims_from_ctelineage traces (and vice versa)
CTE group_by Validation for Computed Columns
- Reject string aliases for computed columns in CTE
group_by— using bare string aliases like["month"]whenmonthis defined with anexpr(e.g.DATE_TRUNC('MONTH', col)) now produces a validation error in the Problems tab instead of silently generating invalid SQL that fails at Trino runtime - Recommended pattern documented —
[{ "type": "dims" }]is now documented as the recommendedgroup_bypattern inside CTEs, automatically resolving computed expressions
Enhancements
- Support
"dims"as a top-level string value forgroup_by, equivalent to[{ "type": "dims" }]. - Support
"dims"as a string value for joinon, automatically joining on all shared dimension columns. - Update source and table freshness configuration:
- Source-level freshness now accepts a config object or null (disables checks for the entire source).
- Table-level optional freshness property (set to null to disable per-table).
- Table-level optional
loaded_at_fieldto allow overriding the timestamp field.
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.2.1...v1.3.0
v1.2.1
What's Changed
- AGENTS.md and skill files now written to
.agents/dj/and.agents/skills/respectively, instead of.dj/
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.2.0...v1.2.1
v1.2.0
What's Changed
Inline Subquery Support
- Nested subqueries in WHERE, HAVING, and JOIN ON conditions — define inline subqueries directly in model JSON with support for 10 operators:
IN,NOT IN,EXISTS,NOT EXISTS,=,!=,>,>=,<,<= - Subquery data sources — reference models, sources, or CTEs as the subquery's FROM clause, with optional inner WHERE filtering
- Visual SubqueryEditor — new reusable UI component with searchable dropdowns for model/source/CTE selection, operator picker, and collapsible layout
- JOIN ON subqueries — subquery conditions alongside column and expression conditions in join definitions
- Schema validation — new
model.subquery.schema.jsonwith$refintegration into WHERE, HAVING, and JOIN schemas
Enhancements
- Improved JOIN node headers with
override_aliassupport and cleaner layout - Added a
from.rollupproperty toint_select_modelandint_join_models, enabling time-grain re-aggregation alongside explicit column selection and joins. This provides the functionality ofint_rollup_modelwith greater control over dimensions and custom expressions. - Added selective model execution for deferred runs. Users can now choose which modified models to include when running with
--defer, instead of running all changed models. - Refactored AI agent integration to use agent-agnostic skill files (Agent Skills open standard) instead of agent-specific prompts
- AGENTS.md and skill files now written to the workspace root's
.dj/directory (typically in.gitignore) instead of per-project - Removed unnecessary activation events for faster extension startup
dj.codingAgentsetting now acceptsboolean(recommended) with legacy string values deprecated- Updated AGENTS.md template and skill files with documentation for inline CTEs, subqueries, and
from.rollup
Fixes
- Fixed crash in JOIN ON processing when
onis undefined (cross joins) - Fixed schema compliance by omitting
onproperty for cross joins inbuildJoinUpdate - Resolved an issue where column metadata (descriptions, tags, and partition configs) failed to propagate through CTEs
- Fix Data Explorer showing stale results when changing the selected model in Data Modeling; now auto-refreshes columns and clears previous query results on model change
Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.1.0...v1.2.0