Skip to content

Releases: Workday/dj

v1.3.7

04 May 16:28
4bddf60

Choose a tag to compare

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-json to Workday/dj

Full Changelog: v1.3.6...v1.3.7

v1.3.6

04 May 15:14
529f36f

Choose a tag to compare

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, and include_full_month with the same semantics as the corresponding main-model flags. Resolution is uniform: CTE override > model value > false. Set exclude_portal_partition_columns: true on 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_overwrite incremental 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 to delete+insert instead.

Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.5...v1.3.6

v1.3.5

04 May 13:15
360e3b9

Choose a tag to compare

What's Changed

  • unique_key no longer emitted for overwrite_existing_partitions — this strategy requires a custom dbt macro in your project (typically get_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-derives unique_key from partition columns.
  • dj.lightdash.defaultPartitionColumnCaseSensitive (default: false) — when true, partition columns in generated YAML get meta.dimension.case_sensitive: true. This stops Lightdash from wrapping them in UPPER() in queries, preserving Trino predicate pushdown on partitioned tables. Per-model and per-column lightdash.case_sensitive overrides in .model.json continue 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

04 May 11:44
c4a211c

Choose a tag to compare

What's Changed

  • Partition columns automatically emit case_sensitive: true in YAML meta so Lightdash does not wrap them in UPPER(), preserving predicate pushdown

Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.3.3...v1.3.4

v1.3.3

04 May 10:13
ae2cbd1

Choose a tag to compare

What's Changed

Incremental strategies

  • All four dbt-trino strategies are now settable per modelappend, delete+insert, merge, and overwrite_existing_partitions via materialization.strategy.type and the Model Wizard. Previously only delete+insert and merge were expressible per model.
  • Hover-time warnings on strategies with prerequisitesmerge flags that it requires Iceberg format on the target table, and overwrite_existing_partitions flags that it requires a custom dbt macro in your project; both direct you to delete+insert when the prerequisite isn't met.
  • unique_key auto-derived from partition columns for overwrite_existing_partitions — matches the existing delete+insert behavior, so partitioned incremental models no longer need to spell out their partition column as unique_key by hand.
  • dj.materialization.defaultIncrementalStrategy now accepts append — alongside the existing values. The factory default is still overwrite_existing_partitions and is planned to move to delete+insert in a future release.

CTE fixes

  • CTE aggregation fixesagg: hll / tdigest / count now 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 original expr. agg over 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; set override_suffix_agg: true to force a fresh aggregation.
  • Correct CTE YAML and audit columnsdata_type, description, meta.dimension (including hidden), exclude_from_group_by, override_suffix_agg, and lightdash.case_sensitive now flow through CTEs into downstream dims_from_cte / fcts_from_cte consumers. datetime, portal_partition_*, and portal_source_count auto-inject in CTEs whose from is a model, mirroring the main-model behavior (previously dropped by narrow dims_from_model.include lists). Columns are sorted alphabetically with partitions pushed to the bottom, matching main-model output.

Incremental materialization

  • unique_key only defaults to columns the model actually produces — monthly rollups correctly fall back to portal_partition_monthly; unpartitioned incremental models omit unique_key entirely.

CTE authoring diagnostics

  • Stricter validation in the Problems tab — rejects lightdash.metrics / metrics_merge on CTE selects (only main-model selects feed Lightdash), un-aggregated fct columns with a main-model group_by (would produce invalid Trino SQL), and warns on no-op outer layers. Errors now pin to the specific select[] 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 *_agg UDAF) is recognized inside expr.
  • 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

24 Apr 08:08
37d4fcb

Choose a tag to compare

What's Changed

Airflow ETL Improvements

  • Automatic dbt retry for transient failuresdbt_build now performs an immediate dbt retry when 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 parsingparse_dbt_results now gracefully falls back to depends_on.nodes when attached_node is 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

22 Apr 11:31
d7b425a

Choose a tag to compare

What's Changed

CTE Partition Filters

  • Automatic partition filters for CTEs — CTEs that reference upstream models via from.model now automatically receive _ext_event_date_filter partition 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

20 Apr 13:48
95e8360

Choose a tag to compare

What's Changed

Catalog-Agnostic Storage Support

  • Iceberg and Glue/Polaris support — new storage_type, etl_schema, and project_catalog variables in dbt_project.yml enable catalog-agnostic SQL generation across Delta Lake, Iceberg, Hive, and Glue/Polaris
  • Storage-type-aware partitioning — incremental models automatically use the correct format (partitioned_by vs partition_by) based on storage type

Materialization Shorthand

  • Simplified syntax for materialization, use "materialization": "incremental" | "ephemeral" instead of the full object definition.
  • New dj.materialization.defaultIncrementalStrategy setting to define global default for incremental materialization shorthand. Can be overridden per model via materialization.strategy.
  • Enabled strategy field in Model Wizard for incremental models.

CTE Bulk Select: Exclude/Include Filters and Type Inheritance

  • exclude/include support for CTE bulk selectsall_from_cte, dims_from_cte, and fcts_from_cte directives now accept exclude and include arrays 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 to dim. This ensures dims_from_cte and fcts_from_cte correctly filter by column type in CTE-to-CTE chains
  • CTE column reference validation — invalid column names in exclude/include arrays 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 fct columns from appearing in dims_from_cte lineage 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"] when month is defined with an expr (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 recommended group_by pattern inside CTEs, automatically resolving computed expressions

Enhancements

  • Support "dims" as a top-level string value for group_by, equivalent to [{ "type": "dims" }].
  • Support "dims" as a string value for join on, 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_field to allow overriding the timestamp field.

Full Changelog: https://github.com/Workday/vscode-dbt-json/compare/v1.2.1...v1.3.0

v1.2.1

20 Apr 10:25
935d5e1

Choose a tag to compare

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

17 Apr 18:36
86eef06

Choose a tag to compare

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.json with $ref integration into WHERE, HAVING, and JOIN schemas

Enhancements

  • Improved JOIN node headers with override_alias support and cleaner layout
  • Added a from.rollup property to int_select_model and int_join_models, enabling time-grain re-aggregation alongside explicit column selection and joins. This provides the functionality of int_rollup_model with 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.codingAgent setting now accepts boolean (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 on is undefined (cross joins)
  • Fixed schema compliance by omitting on property for cross joins in buildJoinUpdate
  • 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