Releases: Workday/dj
Releases · Workday/dj
v1.3.8
What's Changed
- Renamed VS Code Marketplace extension ID from
workday.dj-frameworktoworkday.dj. - Added Visual Studio Marketplace badges and Marketplace install instructions to the README; Marketplace is now the recommended install path with the GitHub Releases VSIX as a fallback.
Full Changelog: v1.3.7...v1.3.8
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