Skip to content

Release History¤

[0.13.1] - Unreleased¤

Added¤

  • Added pipeline parameters, referenced as ${params.X} in pipeline nodes and resolved at run time from job parameters (LAKEFLOW_JOB), Airflow DAG run conf, pl.execute(params=...) or laktory run --param, to reuse a single deployed pipeline across clients. Sink checkpoints are derived from the resolved sinks, so each client gets its own. [#694]
  • Added ServicePrincipalSecret (service principal OAuth secret, whose generated secret can be referenced as ${resources.<key>.secret}), GroupRole, Credential (Unity Catalog service credential), SecretUc, PermissionAssignment, CustomAppIntegration and SystemSchema resources. [#695]
  • Added nested ServicePrincipal.secrets, Group.roles and Credential.grant/grants (with the new CredentialGrant model) to declare service principal secrets, group roles and service credential grants with their parent resource. [#695]
  • Added TagPolicy, EntityTagAssignment, WorkspaceEntityTagAssignment, PolicyInfo (ABAC), ArtifactAllowlist, ShareProvider (Delta Sharing), File (Unity Catalog volume file) and ExternalMetadata resources, with nested tags on Catalog, Schema, Volume, Table, table columns, App, Dashboard and Notebook, nested ABAC policies on Catalog, Schema and Table, and nested files on Volume. [#702]
  • Added DataClassificationCatalogConfig, AccessRequestDestinations, AlertV2, AiSearchEndpoint, AiSearchIndex, AiGatewayModelService, AiGatewayModelProviderService and AiGatewayMcpService resources, with nested data_classification on Catalog, access_request_destinations on Catalog, Schema, Table and Volume, and indexes on AiSearchEndpoint. [#704]
  • Added Lakebase Autoscaling resources PostgresProject, PostgresBranch, PostgresEndpoint, PostgresDatabase, PostgresRole, PostgresCatalog, PostgresSyncedTable, PostgresCdfConfig, PostgresDataApi and PostgresSnapshotSchedule, with nested branches on projects, endpoints, roles, databases, catalogs, synced_tables and snapshot_schedule on branches, and data_api and cdf_configs on databases. PostgresCatalog also declares its Unity Catalog grant/grants and tags. [#707]
  • Added workspace and account configuration resources: WorkspaceSettingV2, AccountSettingV2, DefaultNamespaceSetting, RestrictWorkspaceAdminsSetting, ComplianceSecurityProfileWorkspaceSetting, EnhancedSecurityMonitoringWorkspaceSetting, DisableLegacyFeaturesSetting, WorkspaceConf, SqlGlobalConfig, AccountNetworkPolicy, WorkspaceNetworkOption (also nested as AccountNetworkPolicy.workspace_ids), WorkspaceBaseEnvironment and DefaultWorkspaceBaseEnvironment. [#703]

Fixed¤

  • Fixed resources nested in a schema or catalog (e.g. volume grants) being listed twice in the parent's core_resources. [#702]
  • Fixed Metastore failing to build when grants are set without grants_provider: grants now use the default provider.
  • Fixed ModelServing telemetry_config.inference_table_config.sampling_fraction typed as an integer, rejecting fractions between 0 and 1 (e.g. 0.1).
  • Fixed TableDataSinkMetadata.get_current() failing when a table property value contains a comma or = (e.g. delta.workloadBasedColumns.optimizerStatistics added by Predictive Optimization), by reading properties with SHOW TBLPROPERTIES. [#699]

Updated¤

  • Updated Databricks resources to Terraform provider 1.137.0: new fields on Job, Pipeline, App, Grant, Grants, Cluster, Connection, ModelServing, Secret and MwsNccPrivateEndpointRule, and some fields no longer required (e.g. Secret.string_value, now optional with string_value_wo). [#695]

Breaking changes¤

  • The default Databricks Terraform provider version constraint is now >=1.137.0 (was >=1.49), the version the resource models are generated from. Stacks with a .terraform.lock.hcl locking an older provider must upgrade it once with laktory init --options -upgrade.

[0.13.0] - 2026-09-28¤

Added¤

  • Added shared sinks, written by multiple nodes of a pipeline and/or by multiple pipelines. Each writer owns its rows and a full refresh of a writer only deletes and reprocesses its own rows, so writers run and refresh independently, from any selection of job tasks. Every sink writing to a shared table declares shared (shared: true for the default options). Rows are identified by a {pipeline}.{node} writer column or, without adding a column, by a SQL predicate (shared.where, e.g. client_id = 23). A node reading a writer (node_name) gets the writer rows only, whether read from memory or from the table. Delta commits of concurrent writers conflicting with each other are retried. With Lakeflow / Spark Declarative Pipelines, nodes writing to the same table use append flows. [#675], [#676], [#677]
  • Added a refresh run parameter (INCREMENTAL, FULL, RESET) - RESET resets tables without reprocessing data, e.g. from a job run without table grants - and reset_mode (DROP, TRUNCATE - table sinks and DELTA file sinks) to control how sinks are reset. reset_mode is set per sink and can be overridden for a run (pl.execute(refresh=..., reset_mode=...), node.execute(...), refresh / reset_mode job parameters), an override falling back to DROP on sinks that can't be truncated. [#669]
  • Added --refresh, --reset-mode and --tasks options to laktory run, to run jobs with a full refresh or a reset, and on a selection of tasks.

Fixed¤

  • Fixed intermittent The parent folder ... does not exist errors on the first deploy of workspace files and notebooks (including WorkspaceTree files) into new workspace folders: files of a new folder now wait for a first file to create it, and new folders are created one after the other. [#686]
  • Fixed full_refresh silently skipping the deletion of sink and expectations checkpoints stored in Unity Catalog Volumes when they are not visible on the local file system (e.g. serverless compute), leaving stale streaming state: Auto Loader ingesting zero rows or DIFFERENT_DELTA_TABLE_READ_BY_STREAMING_SOURCE failures. Volumes paths now fall back to the Files API. [#684]
  • Fixed the AIRFLOW orchestrator running a full refresh when the full_refresh DAG param was passed as the string "false" (replaced by the validated refresh / reset_mode params).
  • Fixed DataSinkMergeCDCOptions._parent going stale after Pipeline.inject_vars(inplace=False)'s deep copy (same root cause as #653, different mechanism: it was wired up via a one-off manual assignment instead of the standard children_names recursion), corrupting merge_cdc_options.target_name/.target_path/.sink for any sink using mode: MERGE. [#656]

Updated¤

  • DataFrame namespaces to support multi-level names (accessor chains deeper than one dot e.g. namespace.sub.method). [#672]
  • Local Spark Declarative Pipeline runs (execute()) now load Delta from the Laktory Spark session, so sinks default to Delta as on Databricks (previously written as Parquet locally). [#679]

Breaking changes¤

  • Replaced full_refresh by refresh in Pipeline.execute(), PipelineNode.execute(), LAKEFLOW_JOB job parameters, AIRFLOW DAG params and laktory run (--refresh FULL instead of --full-refresh): use refresh="FULL" instead of full_refresh=True. Runs still passing full_refresh=true fail: redeploy jobs deployed before 0.13.0 and update their triggers. See Refresh and Reset.
  • Nodes of a pipeline writing to the same table must declare shared on every sink writing to it (e.g. shared: true), otherwise the pipeline fails validation (except with Lakeflow / Spark Declarative Pipelines). Each node then owns its rows (_laktory_writer column): a full refresh of a node only deletes its own rows instead of the whole table. These sinks must be DELTA sinks in APPEND mode, and existing tables must be dropped once after upgrading (refresh=RESET, reset_mode=DROP). See Shared Sinks. [#675]
  • Pipelines of a Stack or of a Databricks Asset Bundle (laktory.dab.build_resources) writing to the same table are validated together: a table written by a declarative pipeline can't be written by other pipelines, and sinks declaring shared must identify their rows consistently (validation errors). Sinks writing to such a table without declaring shared log a warning: each pipeline should declare shared (e.g. shared: true) to own its rows. See Shared Sinks. [#675]

[0.12.7] - 2026-09-11¤

Added¤

  • Added ServicePrincipalFederationPolicy model / databricks_serviceprincipalfederationpolicies stack resource, wrapping databricks_service_principal_federation_policy to declaratively manage OIDC workload-identity federation policies for service principals. Also addable inline via ServicePrincipal.federation_policies, mirroring the existing roles/group_ids/workspace_permission_assignments pattern. [#664]
  • Added AccountFederationPolicy, GitCredential, GlobalInitScript, InstanceProfile, MwsCredentials, MwsStorageConfigurations, MwsNetworks, MwsCustomerManagedKeys, MwsPrivateAccessSettings, MwsVpcEndpoint, MwsLogDelivery, MwsNccPrivateEndpointRule and MwsWorkspaces models / stack resources, closing the remaining gaps in everyday workspace-admin and AWS account-provisioning (mws_*) coverage. Also addable inline via MwsNetworkConnectivityConfig.private_endpoint_rules, mirroring the existing workspace_bindings pattern. [#665]

[0.12.6] - 2026-09-07¤

Added¤

  • Added laktory_settings_<field> bundle-variable convention to set Laktory settings (build_root, dataframe_api, dataframe_backend, runtime_root, cli_raise_external_exceptions, register_nw_extensions, log_level) directly from databricks.yml [#654]

Fixed¤

  • Fixed laktory.dab.build_resources computing workspace_root with OS-native (backslash) separators on Windows, breaking the deployed job's file path on remote Unix compute. [#639]
  • Fixed DataFrameExpr (SQL expr: pipeline nodes) splitting on a bare ;, causing a ; inside a -- comment to silently truncate/corrupt the query - expr: must now be a single SQL statement, enforced with a clear validation error instead of a confusing backend parse error. [#640]
  • Fixed laktory/AGENTS.md incorrectly claiming a Pipeline YAML doesn't need orchestrator.type when deploying via DABs; a pipeline with no orchestrator is actually skipped entirely (no resource created, in both DABs and Terraform/Pulumi), now logged as a warning instead of an easy-to-miss INFO log. [#643]
  • Fixed Pipeline.inject_vars(inplace=False) (the default, used by laktory.dab.build_resources) leaving grandchildren (e.g. a sink two levels deep) with a stale _parent pointing at the pre-copy tree, causing DataSink.checkpoint_path to silently use unresolved ${var.x}/${vars.x} values instead of the injected ones. [#653]
  • Fixed PipelineNode.execute() always writing the output DataFrame to every sink, including is_quarantine sinks, which silently duplicated the output data into quarantine tables instead of writing the failing rows. [#658]
  • Fixed a DataQualityExpectation inheriting a NATIVE dataframe_api from a parent node/global setting, which crashed with [NOT_ITERABLE] Column is not iterable since expectations are always checked against a narwhals-wrapped batch - the nested expression now always resolves to NARWHALS. [#659]
  • Fixed laktory.SQLParser raising "expression ... is not currently supported" for IS NULL, IS NOT NULL, IS TRUE, IS FALSE, and NOT expressions used in type: SQL expectations. [#660]
  • Fixed a streaming is_quarantine: true sink with no explicit mode: crashing with Mode 'None' is not supported for Spark Streaming DataFrame - it now defaults to APPEND, the only mode that is both valid (COMPLETE/UPDATE don't work for a non-aggregated streaming write to Delta) and correct (MERGE would key off columns quarantined rows typically violate) there. A static is_quarantine sink still requires an explicit mode, since OVERWRITE vs APPEND depends on the node's own recompute/ingestion pattern. [#661]

Updated¤

  • Documented the ${var.x} / ${vars.x} alias in laktory/AGENTS.md (previously only on the docs site), and recommended ${var.x} for pipeline YAML in DAB-integrated projects to match DAB's own native bundle-variable syntax. [#642]
  • Documented that DAB does not expose a computed reference for an artifacts: block's deployed wheel path, and how to reference it via a bundle variable using ${dab_workspace_root}, in laktory/AGENTS.md and docs/concepts/dab.md. [#641]
  • Documented the DAB-context equivalent of settings.runtime_root (root_path on a pipeline, or the LAKTORY_RUNTIME_ROOT environment variable) for workspaces with public DBFS root access disabled, in laktory/AGENTS.md and docs/concepts/dab.md. [#644]
  • Documented the local-debugging pattern (Databricks Connect + pl.execute(write_sinks=False, selects=[...])) - including the write_sinks write-safety caveat, the as_stream inspection limitation, and the shared-checkpoint-with-production footgun - in docs/concepts/pipeline.md and laktory/AGENTS.md. [#645]
  • Documented that dataframe_api is ignored for expectations (always checked via Narwhals) in docs/concepts/dataquality.md and laktory/AGENTS.md. [#659]
  • Documented mode's implicit-default rules for is_quarantine sinks (defaults to APPEND when streaming, still required when static) in docs/concepts/dataquality.md and laktory/AGENTS.md, and fixed docs/concepts/dataquality.md's own example, which omitted mode: on its (non-streaming) sinks entirely. [#661]

Breaking changes¤

  • n/a

[0.12.5] - 2026-08-31¤

Added¤

  • ${current_user.X} variable namespace (currently user_name) exposing the live Databricks identity resolved via the SDK, mirroring ${settings.X}. See Variables
  • settings.runtime_root guidance for DBFS-disabled Databricks workspaces (serverless compute, or workspaces with legacy DBFS features disabled): recommends a Unity Catalog Volume path (/Volumes/{catalog}/{schema}/{volume}/{path}) instead.

Fixed¤

  • inject_vars() no longer crashes with a Pydantic frozen_field error when a frozen field (e.g. a data source's type: literal, such as type: CUSTOM on CustomDataSource) is explicitly set in YAML/code [#628]
  • depends_on on a LAKEFLOW_JOB pipeline's auto-generated config-file Permissions resource pointing at a nonexistent resource when settings.workspace_root: "user_root" is used, causing terraform plan to fail [#629]
  • A LAKEFLOW_JOB or LAKEFLOW_DECLARATIVE_PIPELINE pipeline's own job/config definition (task filepath, dependency/library paths, config_filepath) baked in the raw, unresolved settings.workspace_root instead of the "user_root"-resolved value, causing the deployed job to fail with FileNotFoundError / library-install errors [#630]
  • Checkpoint purge (DataSink and PipelineNode expectations) no longer falls through to a DBFS API probe after already deleting the checkpoint via the plain filesystem - previously this happened unconditionally, which could error out on a DBFS-disabled workspace even though the checkpoint was already correctly removed (e.g. via a Unity Catalog Volume runtime_root)
  • custom_writer.parent is now correctly assigned on table-based sinks (UnityCatalogDataSink, HiveMetastoreDataSink) - TableDataSink.children_names previously omitted "custom_writer", so laktory_context.sink was always None inside custom writer functions targeting those sinks [#636]

[0.12.4] - 2026-08-28¤

Added¤

  • ${settings.x} / ${setting.x} variable syntax to reuse a laktory.settings value (e.g. settings.workspace_root) anywhere else in a stack, in both plain substitution and ${{ expr }} contexts - avoids duplicating the same literal in the settings: block and again elsewhere [#618]
  • settings.workspace_root: "user_root" sentinel value to auto-compute a Databricks user/stack/environment-scoped deployment root (/Users/{you}/.laktory/{stack}/{env}/). Independent of, but designed to nest cleanly with, terraform.backend.databricks_workspace: true - using both resolves the username via a single shared Databricks SDK lookup. See the new Workspace Root docs page [#618]

Fixed¤

  • ${{ <expression> }} evaluation now recursively resolves variables that are themselves ${vars.x} indirections, matching the resolution already applied to plain ${vars.x} substitutions - previously the expression evaluator silently saw the raw, unresolved template string instead of its final value [#615]
  • WorkspaceTree with an explicit path no longer silently drops that path prefix on Windows for files nested in a subdirectory of source. The dirpath used to build each file's target path is now computed via relative_to(...).as_posix() instead of stringifying filepath.parent (which used the OS-native separator and was then wrongly treated as an absolute anchor when joined with path). Notebook.dirpath / WorkspaceFile.dirpath also now normalize a backslash-prefixed value defensively [#616]
  • settings: block values (workspace_root, build_root, etc.) using ${vars.x} now resolve correctly and deterministically once Stack.inject_vars() runs (build/preview/deploy/destroy/validate), including per-environment variable overrides - previously this relied on an incidental Pydantic side effect that wasn't guaranteed to fire in the right order relative to other fields. A settings: field containing an unresolved ${resources...} reference (which can never resolve here - it's Terraform-native syntax) now raises a clear error instead of silently deploying a broken literal [#617]
  • The Terraform state path auto-configured by backend.databricks_workspace: true now uses the resolved stack name (after variable injection) instead of the raw, potentially ${vars.x}-templated Stack.name - a stack combining a templated name: with this backend previously had all its environments collide on one unresolved, broken state path. Note: for that narrow combination only, this changes the computed state file location on upgrade; existing state may need a one-time move in the Databricks workspace

Updated¤

  • TableDataSinkMetadata.set_tags() now uses ALTER TABLE ... SET TAGS (...) / UNSET TAGS (...) (supported since DBR 13.3 LTS) instead of SET TAG ON ... / UNSET TAG ON ... (only recognized on DBR 16.1+), fixing INVALID_PROPERTY_KEY / INVALID_SET_SYNTAX errors when setting table/column tags on Unity Catalog sinks on older Databricks Runtime versions, where the latter DDL form isn't parsed as tag syntax and instead falls through to Spark's generic SET configuration-statement grammar [#621]
  • CurrentUser (databricks_current_user) now always deploys as a Terraform data block - it only exists as a data source in the databricks provider, so lookup_existing no longer needs to be set explicitly; omitting it previously generated an invalid resource block that only failed later at terraform plan [#619]

[0.12.3] - 2026-08-18¤

Added¤

  • Budget, BudgetPolicy, InstancePool, IpAccessList, Library, ModelServing, RegisteredModel, and Token Databricks resources
  • Opt-in variable (${vars.x} / ${{ expr }}) rendering of local file content, for environment-specific deployments (e.g. Databricks Apps, Lakeview dashboards): render_vars flag on Dashboard, WorkspaceFile, Notebook, and DbfsFile; render_paths (glob patterns) on WorkspaceTree for bulk opt-in. Resolved content is staged under settings.build_root, original files are never modified
  • exclude_paths (gitignore-syntax patterns, supports negation) and use_gitignore (auto-honor a source/.gitignore file) on WorkspaceTree, to exclude files/directories from deployment.

Fixed¤

  • PipelineNodeDataSource batch->batch chains now read the upstream dataset (spark.read.table) inside the Lakeflow (LDP) runtime so Lakeflow can infer the dependency edge
  • Virtual resources (WorkspaceTree, Pipeline) now participate in depends_on in both directions: their own depends_on propagates to the child resources they generate, and a depends_on reference to them expands to all those children
  • WorkspaceTree now excludes files inside a dot-directory (e.g. .venv/lib/site.py), not just files whose own name starts with . - a negated pattern in exclude_paths (e.g. !.streamlit/) can re-include one when needed

Updated¤

  • mcp extra now requires mcp>=2 (updated MCP server to the MCPServer API)
  • File reads/writes now specify an explicit encoding instead of relying on the platform default, fixing UnicodeDecodeError on non-UTF-8 locales (e.g. cp1252 on Windows) when config/source files contain UTF-8 characters. Reads use utf-8-sig to tolerate a BOM; writes use utf-8

[0.12.2] - 2026-06-30¤

Added¤

  • setup-agent CLI command to configure AI coding-agent support (Claude Code, GitHub Copilot, or other AGENTS.md-compatible agents)
  • Laktory MCP server (python -m laktory.mcp.server) with five tools: get_model_docs, validate_yaml, list_models, get_laktory_docs, get_version
  • laktory/AGENTS.md — AI agent instruction file bundled with the installed package

Fixed¤

  • Documentation of resources base classes

[0.12.1] - 2026-06-05¤

Fixed¤

  • register_spark_session() when pyspark connect is installed
  • pipeline.data_sources to include all data sources

[0.12.0] - 2026-06-05¤

Added¤

  • Spark Declarative Pipeline Orchestrator
  • PipelineNode.sources - a named dict of data sources replacing the single source field. All existing source: YAML is automatically migrated to sources: {df: ...}.
  • null_equals_null option for cdc_merge_options [#586]

Updated¤

  • All laktory-injected Spark conf / pipeline configuration keys now use laktory. namespace prefix (laktory.executor, laktory.requirements, laktory.config_filepath, laktory.pipeline_name)
  • PipelineNode.execute() now reads all sources entries before invoking the transformer. Upstream nodes referenced via {nodes.X} SQL placeholders are pre-loaded here rather than inside DataFrameExpr
  • Dtype class now supports time_unit and time_zone properties.
  • Databricks Terraform provider updated to 1.117.0

Fixed¤

  • Table creation when cdc_merge_options with SCD_TYPE 2 is used
  • TableDataSink supports "ORC" and "AVRO" formats

Breaking changes¤

  • Renamed Databricks Pipelines orchestrator to Lakehouse Declarative Pipeline
  • Refactored Lakehouse Declarative Pipeline script to use latest API (apply_changes -> create_auto_cdc_flow)
  • CLI --dbks-job / --dbks-pipeline flags replaced by --databricks-job / --databricks-pipeline
  • PipelineNode.source field removed - use PipelineNode.sources (dict) instead. YAML using source: is automatically migrated; Python code accessing .source directly must be updated.
  • Renamed data sink databricks_quality_monitor to databricks_data_profiling_config
  • Removed pipeline databricks_quality_monitors_enabled flag (now auto-detected)
  • Pipeline Lakeflow Job orchestrator data profiling configuration task is no longer active by default. Needs to set data_profiling_config_task to True
  • QualityMonitor resource renamed to DataQualityMonitor to be aligned with Databricks latest naming convention
  • Lakeflow Job data profiling task key renamed from post-execute to data-profiling-configs

[0.11.10] - 2026-05-20¤

Added¤

  • Added support for EXCEL read with FileDataSource
  • Variables injection for CLI init command
  • Support for Spark >= 4 testing

Updated¤

  • Changed LITERAL data type for FileDataSource/Sink to string to support future and custom formats.

Fixed¤

  • Regression in performance for stack with high number of resources
  • Issue with getting existing spark session on serverless workflows

[0.11.9] - 2026-05-17¤

Fixed¤

  • DAB quickstart
  • Parsing of DataSource inside DataFrame method argument

[0.11.8] - 2026-05-16¤

Fixed¤

  • DataFrame Method Argument parsing

[0.11.7] - 2026-05-16¤

Fixed¤

  • Added missing permissions to Databricks grants

[0.11.6] - 2026-05-16¤

Fixed¤

  • Added missing permissions to Databricks grants

[0.11.5] - 2026-05-15¤

Added¤

  • Resources cross-reference validation. When a depends_on entry references a ${resources.X} name that does not exist in the stack, a warning is issued.
  • lookup_existing field for all applicable resources
  • Registration of Spark DataFrame / Column namespaces
  • Support for storing Terraform state file to Databricks workspace
  • Support for inject variables and/or variable files with CLI

Updated¤

  • TerraformStack.model_dump(): resource reference substitution (${resources.xxx}) now uses structured dict traversal with str.replace for simple refs and re.escape + lambda for property refs, fixing incorrect matches when resource names contain regex metacharacters (e.g. a dot)
  • Improved documentation review as per 2026/05/08 audit.
  • Documentation website
  • Improved exceptions reporting during validation of data sources and sinks
  • VariableType to only accept specific format instead of generic string.

[0.11.4] - 2026-05-07¤

Fixed¤

  • Definition of grants on Databricks Connection resources
  • Dependency between secret scope and its ACL
  • CLI run command not parsing stack variables

Updated¤

  • Better error messages on recursive loader and identification of circular dependencies
  • Optimized variables injection

[0.11.3] - 2026-05-04¤

Fixed¤

  • workspace_bindings for NetworkConnectivityConfig resource to accept

Updated¤

  • Introduced __optional_fields__ in BaseModel

[0.11.2] - 2026-05-01¤

Added¤

  • Databricks Entitlements resource.

Fixed¤

  • Replaced non-ASCII em-dashes with standard hyphens in generated resource models to prevent UnicodeDecodeError on non-UTF-8 systems.
  • Missing databricks_connect pytest marker registration in pyproject.toml.

[0.11.1] - 2026-05-01¤

Added¤

  • Databrbicks connection resource.

Fixed¤

  • Support for 2.0<=pydantic<2.9

Updated¤

  • Renamed resource field options to resource_options. options is still supported.

Breaking changes¤

  • Renamed resource field resource_name to resource_options.name

[0.11.0] - 2026-04-29¤

Added¤

  • Build tooling (scripts/build_resources/) to auto-generate Databricks resource models from the Terraform provider schema

Updated¤

  • All Databricks resource models are now derived from auto-generated files built directly from the Terraform provider schema, ensuring fields stay in sync with the provider and reducing manual maintenance

Breaking changes¤

  • Dropped support for Pulumi IaC backend
  • Renamed stack backend property to iac_backend
  • Removed data_accesses attribute to Metastore resource
  • Several Databricks resource fields renamed to align with Terraform and Databricks API conventions
  • secret value attribute renamed to string_value
  • warehouse channel_name replaced channel model
  • group.workspace_permission_assignments permissions is now mandatory

[0.10.0] - 2026-04-16¤

Added¤

  • Integration with Databricks Declarative Deployment Bundles (DAB)

Fixed¤

  • Running Databricks Declarative Pipelines on more recent version of Spark

Updated¤

  • Variable interpolation now supports {var.[]} in addition to {vars.[]}
  • T. support in PySpark dataframe expression evaluation

Breaking changes¤

  • Renamed settings laktory_root to runtime_root and changed default value
  • Renamed settings workspace_laktory_root to workspace_root

[0.9.5] - 2026-04-09¤

Added¤

  • Support for PipelineIngestion attribute to DatabricksPipeline

[0.9.4] - 2026-03-31¤

Added¤

  • reader_kwargs attribute to PipelineNodeDataSource

Fixed¤

  • TableDataSink.exists() method.
  • Removed logs deduplication in Databricks notebooks
  • Serialization roundtrip when schema_definition of BaseDataSink is used
  • Roundtrip when creating a DataFrameSchema instance from a native dataframe schema.
  • Provisioning laktory_context value when used inside a custom write used in a streaming query

Updated¤

  • Clarified documentation by removing some base class attributes from child classes [#443]
  • Clarified documentation of VariableType [#444]

[0.9.3] - 2026-03-27¤

Fixed¤

  • Roundtrip when creating a DataFrameSchema instance from a native dataframe schema.

[0.9.2] - 2026-03-27¤

Added¤

  • Support for TableDataSource reader_kwargs attribute [#513]
  • CustomWriter class and custom_writer field on BaseDataSink - fully replaces Laktory's built-in write logic with a user-supplied function; Laktory manages the streaming query lifecycle (foreachBatch, trigger, checkpoint) [#514]
  • CustomDataSource source type and CustomReader class - fully user-supplied read function as a first-class source alongside FileDataSource, UnityCatalogDataSource, etc.
  • LaktoryContext dataclass - runtime context object (node, pipeline, sink, source) optionally injected into user-supplied functions in CustomWriter, CustomReader, and DataFrameMethod by declaring laktory_context=None in the function signature [#515]

Fixed¤

  • cluster.init_scripts.volumes property for Terraform (plural form instead of singular) [#516]
  • Table properties not set before first write [#507]

Updated¤

  • Pipeline node execution to include a creation step that facilitates injection of metadata before write data
  • Improved tracking of Laktory-managed table properties
  • DType and DataFrameSchema classes can be instantiated from Narwhals equivalent

Breaking changes¤

  • n/a

[0.9.1] - 2026-03-18¤

Added¤

  • DatabricksApp resource

Fixed¤

  • WorkspaceTree resource when using multilevel directory path

Updated¤

  • Auto-detection of SQL notebooks in WorkspaceTree

[0.9.0] - 2026-03-08¤

Added¤

  • Support for Airflow orchestrator
  • Support to reference directories as lists in YAML injection
  • Pipeline Execution Plan for finer control over nodes execution
  • Pipeline node execution_task_name attribute for more granular control over pipeline orchestration
  • Pipeline node tag attribute to facilitate nodes selection at execution
  • Pipeline execution allows for selects argument

Breaking changes¤

  • Removed obsolete cloud attribute from Metastore resource
  • Refactored View Table Data Sinks structure (removed view_definition attribute)

Updated¤

  • Added environment_version to JobEnvironmentSpec of Databricks Job resource to allow specification of serverless environment version [#508]

[0.8.17] - 2025-12-17¤

Fixed¤

  • Secret scope with Keyvault backend

[0.8.16] - 2025-12-12¤

Fixed¤

  • More robust detection of file existence on DBFS and prevention of "com.databricks.sql.io.CloudFileNotFoundException" exception when purging checkpoints.

[0.8.15] - 2025-12-09¤

Added¤

  • pipeline and pipeline_node objects available for expressions evaluation

[0.8.14] - 2025-12-03¤

Added¤

  • Databricks CurrentUser lookup resource.

Fixed¤

  • Invalid parsing of table name when variable is used

Updated¤

  • Databricks Cluster resource to support the latest features

[0.8.13] - 2025-11-17¤

Added¤

  • Databricks Recipient resource for Delta Sharing [#487]
  • Databricks Share resource for Delta Sharing [#487]

Updated¤

  • Databricks Catalog resource to support the latest features

[0.8.12] - 2025-11-10¤

Added¤

  • Support for ${vars.env} when using yaml injection in Stack

[0.8.11] - 2025-11-03¤

Added¤

  • Databricks catalog resource directly support workspace binding
  • import_ resources option support for Terraform to import existing cloud resources.

[0.8.10] - 2025-10-17¤

Added¤

  • Support for tables metadata (comment, properties, tags, column comment, column tags, etc.)
  • Databricks QualityMonitor resource

Fixed¤

  • Quickstart workflows

Updated¤

  • Automatic view creation with DLT when CDC apply changes is used
  • Pipeline config files path in Databricks workspace
  • Databricks Cluster attributes support

[0.8.9] - 2025-08-27¤

Fixed¤

  • Issue with SQL expressions with curly braces {} used in DataFrameExpr

[0.8.8] - 2025-08-26¤

Added¤

  • Databricks WorkspaceTree
  • CLI build command

Updated¤

  • Python packages are built just-in-time

[0.8.7] - 2025-08-15¤

Fixed¤

  • Resource names which incorrectly included resources and {property_name}.

[0.8.6] - 2025-08-09¤

Added¤

  • Support for tags in Databricks pipelines

Fixed¤

  • Detection of wheel file type in pipeline dependencies when variable is used

Updated¤

  • WorkspaceConfigFile to use source file in user cache instead of base64 content

Breaking changes¤

  • Deprecated root_path attribute in workspace and dbfs files.

[0.8.5] - 2025-08-04¤

Added¤

  • Support for Databricks Access Control Rule Set [#359]
  • Support for Databricks Notification Destination resources [#406]
  • Support for Databricks Obo Token [#360]

Updated¤

  • Improved environments extraction from stack
  • Additional validation for merge CDC options when using DLT [#458]

[0.8.4] - 2025-07-16¤

Fixed¤

  • User inputs for computed fields not injected properly when selecting environment.

[0.8.3] - 2025-07-14¤

Updated¤

  • Refactored dataframe_api, dataframe_backend and root_path attributes to include settings values when model is dumped.

[0.8.2] - 2025-07-11¤

Fixed¤

  • DLT notebook for CDC merge operations
  • target_id and target_name for CDC merge options
  • Parsing of data sources in DataFrameMethod when NATIVE dataframe API is used
  • Executing parent pipeline node when reading a data source

Updated¤

  • raise RuntimeError when wheel file can't be built.
  • removed required to have a sink defined with Databricks orchestrator

Breaking changes¤

  • Data type fields definition

[0.8.0] - 2025-06-29¤

Added¤

  • Narwhals as the core engine for DataFrame manipulations
  • reader_methods option for data sources
  • writer_methods support for data sinks
  • DataFrameColumn: defines a serializable column in a dataframe schema
  • DataFrameSchema: defines a complete serializable dataframe schema
  • DataFrameExpr: represents a DataFrame as a SQL expression
  • DataFrameMethod: represents a DataFrame as a method call with support for both Narwhals and Native API
  • DataFrameTransformer: represents a DataFrame as a series of chained transformations
  • DatabricksPipeline: configuration options
  • PipelineViewDataSink: View inside a Declarative Pipeline
  • DTypes: defines a serializable column data type
  • UnityCatalogDataSource: reads DataFrame from Unity Catalog
  • HiveMetastoreDataSource: reads DataFrame from Hive Metastore
  • laktory namespace: Narwhals extension with custom DataFrame methods and expressions
  • register_anyframe_namespace: defines a custom narwhals DataFrame method for transformations
  • register_expr_namespace: defines a custom narwhals Expression for transformations

Updated¤

  • Polars reader to support new formats (avro, ipc, iceberg, pyarrow)
  • Support for 2- and 3-level namespace in source/sink table_name in addition to explicit catalog_name and schema_name definition
  • Pipeline Databricks Job and Pipeline orchestrators no longer deploy a requirements.txt file (passed as parameters)
  • Pipeline Databricks Job and Pipeline orchestrators no longer generate a temporary local config file
  • Pipeline Databricks Job uses python wheel task instead of notebooks

Breaking changes¤

  • Dropped support for python 3.9
  • Data sources:
    • Output a Narwhals DataFrame (as opposed to Spark/Polars DataFrame)
    • No longer infer column types by default when reading streams
    • Renamed reader_options to reader_kwargs
    • Renamed MemoryDataSource to DataFrameDataSource
    • TableDataSource acts as a parent abstract class for UnityCatalogDataSource and HiveMetastoreDataSource
  • Data sinks:
    • Accept a Narwhals DataFrame (as opposed to Spark/Polars DataFrame)
    • Renamed checkpoint_location to checkpoint_path
    • Renamed writer_options to writer_kwargs
    • Deprecated cluster_by option (now supported with writer_methods)
  • DataFrameTransformer (previously Spark/PolarsChain):
    • Accept and return Narwhals DataFrame
    • Can no longer be used for VIEW creation
    • Replaced PolarsChainNode and SparkChainNode with DataFrameMethod and DataFrameExpr classes
  • DataFrame Extensions
    • Deprecated polars extension
    • Deprecated spark extension
  • Job Databricks Resource
    • Renamed clusters to job_clusters
  • PipelineNode:
    • Removed "Layers" concept in pipeline node
    • Removed custom functions such as with_columns, drop_duplicates, etc.
  • Pipeline:
    • Orchestrator declaration refactored
  • Renamed DataFrameColumnExpression to DataFrameColumnExpr
  • SparkSession must now be registered at the module level (not passed to function calls)
  • Deprecated classes:
    • DataProducer
    • DataEvent

[0.7.3] - 2025-04-16¤

Added¤

  • Support for sinkless Pipeline nodes in Databricks Job Orchestrator

Updated¤

  • BaseModel.model_validate_yaml and BaseModel.model_validate_json_file now return correct type for intellisense. [#411]

[0.7.2] - 2025-04-03¤

Added¤

  • Lookup warehouses by name for Terraform backend
  • Databricks Permissions declaration from the stack root.
  • Databricks Permissions support for authorization. [#405]

[0.7.1] - 2025-03-20¤

Fixed¤

  • Terraform resource type for Databricks Storage Credential

[0.7.0] - 2025-03-18¤

Added¤

  • Ability to specify members in Group resource
  • Lookup users by user_name for Terraform backend

Breaking changes¤

  • Updated Data Sink merge to directly use primary keys instead of a hash key

[0.6.10] - 2025-03-14¤

Added¤

  • New StorageCredential and can be declared from the stack root.

Fixed¤

  • Grant and Grants object specified correctly depending on resource type

[0.6.9] - 2025-03-14¤

Added¤

  • WorkspaceBinding Databricks resource
  • Grant Databricks resource

Updated¤

  • MetastoreAssignment can be declared from the stack root.
  • Resources with Grants definition can also define Grant to target a specific principal

[0.6.8] - 2025-03-11¤

Added¤

  • Liquid cluster option for data sinks

[0.6.7] - 2025-03-10¤

Fixed¤

  • Disabled data sinks write mode auto selection full refresh for streaming dataframes (buggy)

[0.6.6] - 2025-03-10¤

Added¤

  • Data sources drop_duplicates option
  • Schema storage_root attribute
  • User and ServicePrincipal workspace_permission_assignments attribute

Fixed¤

  • Usage of lookup_existing preventing propagation of resource options [#372]
  • Typo in unity catalog quick start documentation
  • Missing documentation for data_accesses metastore attribute
  • Variable resolution in lookup_existing attribute
  • Metastore look up issues

Updated¤

  • Databricks group resource properties
  • Databricks user resource properties

[0.6.5] - 2025-02-19¤

Added¤

  • dbt job task [#363]
  • git_source option for Databricks Job
  • environments options for Databricks Job
  • Optional node_max_retries option for pipeline nodes with Databricks Job orchestrator

Fixed¤

  • SCD Type 2 Sink without delete condition caused exception [#361]

Updated¤

  • Validation for self referencing variables [#362]
  • Data sinks write mode auto selection full refresh

[0.6.4] - 2025-01-24¤

Fixed¤

  • Infinite recursion loop when name_prefix is used on some resources.

[0.6.3] - 2025-01-22¤

Fixed¤

  • Parsing of SQL files from YAML files

[0.6.2] - 2025-01-22¤

Added¤

  • Support for Terraform moved option (resource rename)

Fixed¤

  • Model variables not carried overs to all environments

[0.6.1] - 2025-01-20¤

Updated¤

  • Reduced import time
  • Optimized tests to load spark only when required
  • Optimized performance during stack export in IaC backend native format

[0.6.0] - 2025-01-18¤

Added¤

  • MemoryDataSource support for reading dict or list of data [#337]
  • Support for !use tag in YAML files to directly inject content of other file
  • Support for !update tag in YAML files to use another file to update the content of a dictionary
  • Support for !extend tag in YAML files to use another file to extend (append) more items to a list

Updated¤

  • Laktory variables to support python expressions [#334]
  • Laktory variables to support complex types such as dictionaries and lists
  • All Laktory model fields to allow str type for receiving a variable or expression
  • Reference to external YAML file path can use variables injection[#335]

Breaking Change¤

  • Removed support for ${include.*} variables in YAML files.
  • Reference to external YAML files is now relative to the calling file instead of being relative to the stack entry point.

[0.5.13] - 2025-01-07¤

Added¤

  • Support for Python 3.12
  • Support for Python 3.13
  • Contribution guidelines
  • Support for external PR

Updated¤

  • uv as the recommended package manager
  • Formatting and linting with ruff (instead of black)
  • Added ruff formatting and linting as a pre-commit
  • Added pytest fixtures to run tests only when required environment variables are available

[0.5.12] - 2024-12-30¤

Fixed¤

  • Injection of variables into pipeline requirements

[0.5.11] - 2024-12-30¤

Fixed¤

  • Serverless pipeline job raises a validation error

[0.5.10] - 2024-12-29¤

Added¤

  • Support for view creation from pipeline node
  • --version and version CLI commands
  • Support for for_each_task in Databricks job resource
  • Support for external libraries in pipelines

Fixed¤

  • Variables supports referencing environment variables and other variables

Updated¤

  • Replaced dataframe_backend propagation with dynamic parent lookup
  • Introduced PipelineChild internal class to manage child/parent relationship
  • Added laktory package as a task cluster dependency when Databricks Job is used as a pipeline orchestrator

Breaking changes¤

  • Renamed dataframe_type to dataframe_backend
  • Renamed pipeline orchestrator from "DLT" to "DATABRICKS_DLT"
  • Renamed pipeline databricks job and dlt resource names. May cause a re-deployment.
  • Moved pipeline notebook_path under databricks_job attribute.

[0.5.9] - 2024-12-20¤

Fixed¤

  • CDC Merge when records flagged for delete don't exist in target

[0.5.8] - 2024-12-18¤

Added¤

  • is_enabled option to resources for disabling specific resources for specific environments or configurations.
  • name_prefix and name_suffix options for DLT pipeline
  • Support for "AVRO", "ORC", "TEXT" and "XML" format for file data source with spark dataframe backend.

[0.5.7] - 2024-12-09¤

Added¤

  • inject_vars_into_dump method for BaseModel class to inject variables into a dictionary
  • MlfflowExperiment Databricks resource
  • MlfflowModel Databricks resource
  • MlfflowWebhook Databricks resource
  • Alert Databricks resource
  • Query Databricks resource
  • name_prefix and name_suffix options for Alert, Dashboard and Query resources.

Fixed¤

  • Removed dependency on pytz

Breaking changes¤

  • Refactored BaseModel inject_vars method to inject variables directly into the model, instead of into a dump.
  • Deprecated SQLQuery Databricks resource

[0.5.6] - 2024-12-03¤

Added¤

  • Databricks job name prefix and suffix attributes
  • Propagation of stack variables to all resources

Updated¤

  • Removed unsafe characters from pipeline default root

[0.5.5] - 2024-12-02¤

Added¤

  • Support for setting Laktory Databricks Workspace root from the stack file
  • Support for Databricks Job Queuing [#307]

Fixed¤

  • Injection of variables into pipeline names

Updated¤

  • Given priority to stack variables over environment variables
  • Automatic assignation of pipeline name to Databricks Job name when selected as orchestrator
  • workflows quickstart pipeline notebook to support custom laktory root

Breaking Changes¤

  • Renamed PipelineNode attribute primiary_key to primary_keys to support multiple keys

[0.5.4] - 2024-11-26¤

Fixed¤

  • DataSink merge for out-of-order records with streaming DataFrame

[0.5.3] - 2024-11-22¤

Added¤

  • DataSinks merge write mode for Change Data Capture, supporting type 1 and type 2 SCD

Fixed¤

  • Source format in stock prices quickstart pipeline
  • Removed warning due to usage of FileDataSource private attribute schema

[0.5.2] - 2024-11-12¤

Added¤

  • Support for JSONL and NDJSON formats in FileDataSource

Fixed¤

  • Missing stream query termination in TableDataSink model
  • Raise Exception when resource names are not unique [#294]

Updated¤

  • Logs to include timestamp
  • FileDataSource to support spark read_options
  • FileDataSource to support schema specification for weakly-typed formats

[0.5.1] - 2024-11-08¤

Added¤

  • Support for ClusterPolicy Databricks resource
  • Support for Repo Databricks resource

Fixed¤

  • ReadMe file code

[0.5.0] - 2024-11-05¤

Added¤

  • DataFrameColumnExpression model
  • Data Quality Expectations
  • Data Quality Checks
  • Support for multiple sinks per pipeline node
  • Support for quarantine sink
  • Root path for laktory, pipelines and pipeline nodes

Fixed¤

  • Stream writer FileDataSink
  • Support for null value in JobTaskSQLTask queries
  • Singularized attribute names in JobEmailNotifications for Terraform [#276]
  • Added missing source attribute in JobTaskSqlTaskFile [#275]

Updated¤

  • Job to automatically alphabetically sort tasks [#286]
  • Job now supports description [#277]
  • JobTaskNotebookTask now allows warehouse_id for compute [#265]
  • JobTaskSQLTask updated to support null for queries [#274]

Breaking changes¤

  • Renamed sql_expr to expr to enable both SQL and DataFrame expressions with auto-detection
  • Updated DLT Expectation action "ALLOW" to "WARN"
  • Prefixed dlt_ to warning_expectations properties in pipeline nodes
  • Refactored default paths for WorkspaceFile and DBFSFile models for improved target location control [#263]
  • Refactored Polars reader to read as LazyFrame
  • Renamed PipelineNode attribute sink to sinks

[0.4.14] - 2024-10-08¤

Updated¤

  • Workflows quickstart to include debug script
  • Workflows quickstart to better align DLT and job pipeline.

[0.4.13] - 2024-10-01¤

Added¤

  • Grants resources to Stack
  • no_wait option for Cluster resources
  • Polars quickstart

Fixed¤

  • Missing dependencies when deploying grants and data access with Metastore

Updated¤

  • Added SQL expression to logs when processing Polars DataFrame

Breaking changes¤

  • Renamed workspace provider to grants provider in Metastore resource

[0.4.12] - 2024-09-18¤

Added¤

  • Support for multi-segments (semi-column ; separated) SQL statements
  • Support for Databricks Lakeview Dashboard resource
  • CLI destroy command
  • unity-catalog, workspace and workflows template choices for CLI quickstart

Updated¤

  • Better feedback when terraform is not installed
  • Added SQL query to pipeline node transformer logs

Breaking changes¤

  • Removed backend and organization arguments for CLI
  • Combined CLI pulumi-options and terraform-options into options

[0.4.11] - 2024-08-16¤

Added¤

  • VectorSearchIndex Databricks resource
  • VectorSearchEndpoint Databricks resource
  • purge method for data sink
  • full_refresh option for pipeline and pipeline node

Fixed¤

  • Checkpoint location of TableDataSink

[0.4.10] - 2024-07-20¤

Fixed¤

  • mergeSchema and overwriteSchema default options in DataSink writers

[0.4.9] - 2024-07-20¤

Added¤

  • Support for models yaml merge
  • MwsNccBinding databricks resource
  • MwsNetworkConnectivityConfig databricks resource
  • Support for Databricks Table storage_credential_name and storage_location properties
  • Support for BINARYFILE (PDF) format in FileDataSource with Spark

Fixed¤

  • DLT Debug mode when source is streaming and node is not
  • DataFrame type propagation when models are used as inputs to other models
  • Terraform auto-approve when other options are used
  • show_version_info() method to display correct packages version

[0.4.8] - 2024-07-03¤

Added¤

  • Support for referencing nodes in SQL queries
  • Support for looking up existing resources
  • Support for terraform alias providers
  • laktory namespace to spark.sql.connect

Fixed¤

  • Parametrized SQL expressions used in the context of DLT

Updated¤

  • Support for Polars 1.0

[0.4.7] - 2024-06-27¤

Fixed¤

  • Support for parametrized queries when DLT module is loaded

[0.4.6] - 2024-06-27¤

Added¤

  • Support for parametrized queries when DLT module is loaded

Fixed¤

  • Issue with getting environment stack on null properties

[0.4.5] - 2024-06-25¤

Updated¤

  • with_column transformer node method to allow for None type

[0.4.4] - 2024-06-25¤

Added¤

  • WorkspaceFile attribute to Pipeline class to customize access controls

Fixed¤

  • Spark dependencies
  • Fixed encoding when reading from yaml files

Updated¤

  • Changed pipeline JSON file permission from account users to users
  • Smart join to support coalesce of columns outside of the join

[0.4.3] - 2024-06-12¤

Updated¤

  • Dataframe type propagation through all pipeline children

Fixed¤

  • Reading pipeline node data source is isolation mode

[0.4.2] - 2024-06-11¤

Fixed¤

  • Creation of the same column multiple times in a transformer node

[0.4.1] - 2024-06-11¤

Fixed¤

  • Accessing custom DataFrame functions in custom namespace in SparkChainNode execution

[0.4.0] - 2024-06-11¤

Added¤

  • Support for Polars with FileDataSource
  • Support for Polars with FileDataSink
  • Support for PolarsChain transformer
  • Polars DataFrame extension
  • Polars Expressions extension

Breaking changes¤

  • Refactored column creation inside a transformer node
  • Moved laktory Spark dataframe custom functions under a laktory namespace.

[0.3.3] - 2024-05-30¤

Added¤

  • Support for SQL expression in SparkChain node
  • Limit option to Data Sources
  • Sample option to Data Sources
  • Display method for Spark DataFrames

Updated¤

  • Stack model environments to support overwrite of individual list element

Fixed¤

  • Pipeline Node data source read with DLT in debug mode

[0.3.2] - 2024-05-28¤

Updated¤

  • Install instructions

Breaking changes¤

  • Re-organized optional dependencies
  • Remove support for Pulumi python

[0.3.1] - 2024-05-28¤

Fixed¤

  • Updated ReadMe
  • Stack Validator unit test

[0.3.0] - 2024-05-28¤

Added¤

  • Pipeline model, the new central component for building ETL pipelines
  • PipelineNode model, the Pipeline sub-component defining each dataframe in a pipeline
  • FileDataSink and TableDataSink sinks models
  • PipelineNodeDataSource and MemoryDataSource sources model
  • Future support for Polars and other types of dataframe

Updated¤

  • Enabled CDC support for both FileDataSource and TableDataSource

Breaking changes¤

  • Merged DataEventHeader into DataEvent model
  • Renamed EventDataSource model to FileDataSource
  • Renamed name attribute to table_name in TableDataSource model
  • Removed SparkChain support in DataSources
  • Renamed Pipeline model to DLTPipeline model
  • Cloud resources moved under models.resources.{provider}.{resource_class} to avoid collisions with future classes.
  • Removed TableBuilder. PipelineNode should be used instead

[0.2.1] - 2024-05-07¤

Added¤

  • Support for spark chain for a data source
  • Support for broadcasting in a data source
  • YAML model dump for all base models

Fixed¤

  • Function selection for pyspark connect dataframes

[0.2.0] - 2024-05-02¤

Added¤

  • SparkChain a high level class allowing to declare and execute spark operations on a dataframe
  • SparkColumnNode the node of a SparkChain that builds a new column
  • SparkTableNode the node of a SparkChain that returns a new dataframe
  • Moved filter, selects and watermarks properties to models.BaseDataSource so that it can be used for all source types
  • models.BaseDataSource renames attribute for renaming columns of the source table
  • models.BaseDataSource drops attribute for dropping columns of the source table
  • spark DataFrame watermark returns the watermark column and threshold if any
  • spark DataFrame smart_join joins, cleans duplicated columns and supports watermarking
  • spark DataFrame groupby_and_agg groupby and aggregates in a single function
  • spark DataFrame window_filter takes the first n rows over a window

Updated¤

  • n/a

Breaking changes¤

  • Refactored table builder to use SparkChain instead of direct definitions of joins, unions, columns building, etc.

[0.1.10] - 2024-04-23¤

Added¤

  • CLI run command to execute remote jobs and pipelines and monitor errors until completion
  • Dispatcher class to manage and run remote jobs
  • JobRunner class to run remote jobs
  • PipelineRunner class to run remote pipelines
  • datetime utilities

Updated¤

  • Environment variables DATABRICKS_SDK_UPSTREAM and DATABRICKS_SDK_UPSTREAM_VERSION to track laktory metrics as a Databricks partner

Fixed¤

  • Permissions resource dependencies on DbfsFile and WorkspaceFile.

[0.1.9] - 2024-04-17¤

Added¤

  • Support for table unions in table builder
  • New column property raise_missing_arg_exception to allow for some spark function inputs to be missing
  • add, sub, mul and div spark functions

Breaking Change¤

  • Renamed power spark function to scaled_power to prevent conflict with native spark function

[0.1.8] - 2024-03-25¤

Added¤

  • quickstart CLI command to initialize a sample Laktory stack.
  • Databricks DBFS file model

[0.1.7] - 2024-03-15¤

Added¤

  • show_version_info() method for bugs reporting
  • Git issues templates

[0.1.6] - 2024-02-23¤

Updated¤

  • Website branding

[0.1.5] - 2024-02-14¤

Added¤

  • Support for DLT views
  • Support for providing table builder drop_duplicates with a list of columns to consider for the drop duplicates.

Fixed¤

  • Propagation of stack variables to resources

[0.1.4] - 2024-02-12¤

Added¤

  • Support for custom join sql expression in TableJoin model

[0.1.3] - 2024-02-10¤

Added¤

  • Support for explicit path in TableDataSource model

[0.1.2] - 2024-02-05¤

Added¤

  • Metastore, MetastoreAssignment, MetastoreDataAccess, MwsPermissionAssignment and ExternalLocation models
  • workspace_permission_assginments field to Group model
  • StackValidator class for testing deployment in both Pulumi and Terraform

Updated¤

  • Pipeline model supports null catalog (hive metastore)
  • Event Data Source supports custom event root path
  • Event Data Source supports custom schema location path
  • Refactored core_resources property to automatically propagate provider and dependencies to sub-resources.

Breaking Changes¤

  • Refactored default resource name to remove illegal characters, resolve variables and remove resource tags.

[0.1.1] - 2024-01-28¤

Added¤

  • General support for Terraform IaC backend
  • AWS Provider
  • Azure Provider
  • Azure Pulumi (Native) Provider

Updated¤

  • BaseModel inject_vars method regular expressions support

Breaking changes¤

  • Replaced CLI argument --stack with --org and --dev for a more consistent experience between pulumi and terraform backends

[0.1.0] - 2024-01-12¤

Added¤

  • Automatic creation of resources output variables that can be used in configuration files
  • Custom model serialization allowing conversion of keys to camel case
  • Laktory CLI
  • Stack model to define and deploy a complete collection of resources from yaml files only and manage environments
  • Support for cross-references in yaml files. A yaml configuration file can include another.
  • BaseResource and PulumiResource models with all methods required to deploy through pulumi
  • Grants model
  • GroupMember model
  • Permissions model
  • ServicePrincipalRole model
  • UserRole model
  • resources object to a BaseResource instance to define and deploy all the associated resources

Updated¤

  • events_root field of DataEventHeader and DataEvent models is now a property for the default value to dynamically account for settings
  • inject_vars method to support multiple targets (pulumi_yaml, pulumi_py, etc.)

Breaking changes¤

  • Modified groups field for Users and ServicePrincipal models to accept group id instead of group name
  • Modified resource_key for WorkspaceFile, Notebook and Directory
  • Removal of Laktory Resources Component (will trigger replacement of all resources unless aliases are used)
  • Removal of resources engines classes
  • Renamed permissions field to access_controls in multiple models to be consistent with Databricks API
  • Renamed vars object to variables
  • Resources deployment method deploy() and deploy_with_pulumi() renamed to to_pulumi()

[0.0.29] - 2023-12-20¤

Fixed¤

  • Forced newlines character to eliminate discrepancies between Windows and Linux environment when writing pipeline files.

[0.0.28] - 2023-12-17¤

Updated¤

  • job.continuous.pause_status to allow for arbitrary string (allow variable)
  • job.email_notifications.pause_status to allow for arbitrary string (allow variable)
  • job.task_condition.pause_status to allow for arbitrary string (allow variable)
  • warehouse.channel_name to allow for arbitrary string (allow variable)
  • warehouse.spot_instance_policy to allow for arbitrary string (allow variable)
  • warehouse.warehouse_type to allow for arbitrary string (allow variable)

[0.0.27] - 2023-12-16¤

Added¤

  • Support for DLT tables expectations

[0.0.26] - 2023-12-16¤

Added¤

  • GitHub releases
  • Units conversion spark function

[0.0.25] - 2023-12-12¤

Added¤

  • compare spark function
  • API Reference
  • doc tests

Updated¤

  • SparkFuncArgs model to allow constant value

Breaking changes¤

  • Renamed Producer model to DataProducer
  • Renamed Resource model to BaseResource
  • Renamed user and permissions resources
  • Renamed group and permissions resources
  • Renamed pipeline resources

[0.0.24] - 2023-12-05¤

Fixed¤

  • Null values in joining columns with outer join

Updated¤

  • Variable injection to support Pulumi Output as part of a string
  • Column builder requires all inputs available to build a column

[0.0.23] - 2023-12-01¤

Added¤

  • Databricks directory model
  • SQL Query model
  • Table resource

[0.0.22] - 2023-11-29¤

Added¤

  • Git tag for each release
  • Automatic version bump after each release
  • Automatic documentation publishing after each release

[0.0.21] - 2023-11-27¤

Breaking Changes¤

  • Renamed table.builder.zone to table.builder.layer to be consistent with industry standards.

[0.0.20] - 2023-11-27¤

Added¤

  • header option when reading CSV event data source
  • read_options option when reading event data source
  • aggregation feature for table builder
  • window_filter feature for table builder

[0.0.19] - 2023-11-23¤

Fixed¤

  • Gold zone columns in table builder

Added¤

  • drop_columns option in table builder
  • template property to table builder, allowing to select a template, independent of the zone.

Breaking Changes¤

  • Renamed models.sql.column.Column.to_column to models.sql.column.Column.is_column to clarify that the provided value is a column name.

[0.0.18] - 2023-11-14¤

Added¤

  • Support for externally managed users and groups

[0.0.17] - 2023-11-13¤

Fixed¤

  • Data Event model to support timestamp from string

Added¤

  • Option to exclude timestamp from data event filepath
  • Selects, filter, watermark options for TableDataSource
  • Support for joins in Table model
  • Silver Star builder

Breaking Changes¤

  • Refactored Table to move all building configuration into a TableBuilder model

[0.0.16] - 2023-11-08¤

Added¤

  • UDFs property to pipeline model

Breaking Changes¤

  • Refactored InitScript model into the more general WorkspaceFile

[0.0.15] - 2023-11-07¤

Added¤

  • Support for CDC table data source
  • Support for SCD table

Updated¤

  • Automatic catalog and schema assignation to source table from table and pipeline

[0.0.14] - 2023-11-06¤

Fixed¤

  • Pyspark imports when pyspark not installed

[0.0.13] - 2023-11-06¤

Fixed¤

  • Column spark_func_args parsing
  • Column spark_func_kwargs parsing
  • Support for _any column type

Added¤

  • schema_flat and has_column DataFrame extensions for spark connect

Updated¤

  • Table Data Source to support tables external to the DLT pipeline

[0.0.12] - 2023-11-06¤

Fixed¤

  • Pyspark imports when pyspark not installed

[0.0.11] - 2023-11-05¤

Fixed¤

  • Deployment of pipeline configuration file

Added¤

  • Spark optional dependencies
  • Spark unit tests
  • Functions library
  • Support for custom functions in silver processing

Breaking Changes¤

  • Changed API for table columns definition
  • Removed databricks-sdk as dependency

[0.0.10] - 2023-10-31¤

Fixed¤

  • df_has_column handling of arrays when column name contains a digit

[0.0.9] - 2023-10-27¤

Updated¤

  • df_has_column support for column names with backticks (`)

[0.0.8] - 2023-10-24¤

Added¤

  • Model pulumi dump method
  • Support for variables in yaml files

Breaking Changes¤

  • Deprecated metadata SQL methods

[0.0.7] - 2023-10-20¤

Updated¤

  • Bronze template notebook to leverage configuration file
  • Silver template notebook to leverage configuration file

Added¤

  • compute.Cluster model
  • compute.InitScript model
  • compute.Job model
  • compute.Notebook model
  • compute.Pipeline model
  • compute.Warehouse model
  • secrets.Secret model
  • secrets.SecretScope model
  • Pipeline configuration file management

Breaking Changes¤

  • Refactored landing mount to landing root and changed default configuration to volumes

[0.0.6] - 2023-10-10¤

Added¤

  • User, service principal and users group models
  • Grants models
  • Pulumi resources engine for user, group, catalog, schema, volume and associated grants

Breaking Changes¤

  • Renamed database objects to schema to be aligned with Databricks recommendations

[0.0.5] - 2023-09-28¤

Added¤

  • Processing method for silver tables
  • Silver DLT pipeline template notebook
  • df_schema_flat function
  • _any as as supported type for Spark functions

Updated¤

  • Excluded fields for DataEvent model_dump
  • df_hascolumn function to support Spark 3.5

Fixed¤

  • Table Metadata included derived properties for the columns

[0.0.4] - 2023-09-27¤

Updated¤

  • Refactored dlt module to support DBR < 13 and clusters in shared access mode

Fixed¤

  • model_validate_yaml() for Pipeline model
  • table data insert when no data is available

Breaking Changes¤

  • Removed spark from required dependencies

[0.0.3] - 2023-09-25¤

Added¤

  • Data Event cloud storage writers (Azure, AWS and Databricks mount)

[0.0.2] - 2023-09-24¤

Added¤

  • Data Event class
  • Data Source classes
  • Pipeline class
  • Support for BRONZE transformations

[0.0.1] - 2023-07-13¤

Added¤

  • Initial pypi release