- Keep shares small and purposeful: one share per product, avoid “kitchen sink” shares
- Schema contracts: version breaking changes (e.g., dp_orders_v2)
- Select only columns you need; apply filters for predicate pushdown
- For Power BI, mind the row limit behavior in Power Query
- Incremental loads: prioritise CDF over re-reading entire tables
- Security: favor OIDC federation over long-lived bearer tokens where possible (better rotation, MFA)
- Auditing: one recipient per share simplifies revocation and tracking
Connecting to a share
Activation (open sharing):- Provider creates a recipient (open sharing) and gets the activation link
- The recipient opens the link to download the credentials file (.SHARE) or completes OIDC setup
- The recipient opens the .SHARE credentials file, a JSON with the structure below
- They use the credentials to connect from Spark, pandas, Power BI, or Tableau
Example: Apache Spark (PySpark)
Example: Apache Spark (PySpark)
Load a data feed
Example: pandas (Python)
Example: pandas (Python)
A pandas example
Example: Power BI / Power Query (Desktop)
Example: Power BI / Power Query (Desktop)
Import data using Power BI or Power Query:
- Get Data → Delta Sharing
- Paste in Delta Sharing Server URL and Bearer token from the credential file (or use OIDC if configured).
- Choose your table or tables and load (Import).
Example: Tableau
Example: Tableau
Import data using Tableau:
- Install “Delta Sharing by Databricks” from Tableau Exchange.
- In Tableau: Connect → Delta Sharing by Databricks → either upload the .share file or enter Endpoint URL and Bearer Token.
Example: Java
Example: Java
For the JVM pipelines you can use the Delta Sharing Java connector (community/labs) via Maven/SBT and point to the .share file. This is handy for embedding inside services.
Retention and history
Delta table history (metadata) typically is retained for 30 days. Older versions may be removed and time-travel reads might no longer be possible after retention/VACUUM. Plan to copy or snapshot locally if you need long-term historical access. Delta Sharing is read-only; recipients can always land extracts locally if they need to keep records beyond retention windows.Connector quick links
- Delta Sharing overview (Databricks docs)
- Open-source Delta Sharing repo (protocol, Python & Spark connectors, examples)
- Read shared data with Spark / pandas / Power BI using credential files
- Spark format(“deltasharing”) examples (read, CDF, streaming)
- Power BI / Power Query - Delta Sharing connector
- Tableau - “Delta Sharing by Databricks” connector (Tableau Exchange)
- Delta Sharing Java connector (labs/community)
Troubleshooting
- 401/403 unauthorized: credential expired/revoked, token missing, or OIDC not configured. Regenerate activation link or confirm OIDC.
- CDF is not enabled: request provider to enable history sharing or use full reads.
- Power BI shows limited rows: adjust Power Query row limits and apply filters.
- Historical versions unavailable: likely vacuumed or beyond retention; snapshot/copy locally for long-term needs.
Code snippets
Spark SQL
Spark SQL
Spark CDF window (PySpark)
Spark CDF window (PySpark)
Pandas quick peek
Pandas quick peek
New delete pattern
To clarify which data is stored and made available through Delta Share, a new delete pattern has been introduced (as of January 2026). Depending on how consumers of Delta Share have implemented their integrations, this change may require adjustments on their side. Delta Share allows customers to incrementally retrieve changes to their data and store those changes in their own data warehouse or similar storage solution. This is achieved by storing every batch of new or modified records with a commit version tag. Consumers can then download all data associated with a specific commit version. When new or updated data is added to Delta Share, the record receives the value “insert” in the_change_type column.
The column _commit_version indicates which version the record belongs to, and _commit_timestamp shows when the record was added.

_change_type value named “delete”. A delete record will be generated for any row where the import_date_time is older than 30 days.
This record does not modify the original data. All fields remain unchanged. Instead, it serves as a technical log entry indicating that the corresponding row will be removed from Delta Share.
Consumers of Delta Share may choose to ignore these delete records or treat them similarly.
FAQ
Here are some frequently asked questions about this integration.When using “query” to “fetch everything,” what does that mean?
When using “query” to “fetch everything,” what does that mean?
Using the “query” option returns all data currently available in the Delta Share. In other words, the latest full snapshot of that table. It does not include all historical data, only what’s active right now.Some Delta setups allow “time travel” to older versions of the data, but this only works if history sharing is enabled for that table.Old versions are automatically cleaned up according to the retention policy (for Voyado, that’s 30 days).
This means you only have access to what’s currently part of the share and not every piece of data stored in Engage.
This means you only have access to what’s currently part of the share and not every piece of data stored in Engage.
Is there a time window to consider for “query”?
Is there a time window to consider for “query”?
Yes. Delta Share tables follow a retention policy. In Voyado’s case, data older than 30 days is removed automatically. So, when you use a “query” you’re getting the most recent snapshot. Data outside of the retention window isn’t available.
In “changes” only certain versions are available. Why?
In “changes” only certain versions are available. Why?
The “changes” option provides incremental updates, meaning only the rows that were added, modified, or deleted between table versions.It works through Delta’s Change Data Feed (CDF), so the feature must be enabled for that table.Each update includes metadata like:
- _change_type
- _commit_version
- _commit_timestamp
What determines the versions available in the change feed?
What determines the versions available in the change feed?
Availability is based solely on time, not on how many versions or files exist. Once data versions pass the 30-day retention threshold, they’re cleaned up automatically. There’s no way to retrieve them afterward.
What does it mean when a table has no version history?
What does it mean when a table has no version history?
If a table shows no version history, it typically means:
- Change Data Feed (CDF) or version tracking is not enabled for that share, or
- All historical versions have been cleaned up by the retention policy.
Why am I getting 'Bad request — Cannot load table version 0…'?
Why am I getting 'Bad request — Cannot load table version 0…'?
This occurs when a full export or reset is performed in Engage. During this process, all previous table versions and transaction logs are removed as part of the retention and cleanup policy.After the reset, a new baseline (latest/max) version becomes the valid starting point for queries. If a customer or integration tries to access version 0 or any version older than the current baseline, the system returns this error because those versions have been deleted.The data version in the Delta Share protocol is not affected by the export itself — data continues to propagate to the latest version, ensuring ongoing updates are reflected from that new baseline.Versions in Delta Share are subject to the default retention period of 30 days. Older versions are automatically cleaned up and are no longer available after that window.In short, after a full export, historical versions are removed, and the data is accessible only from the latest (max) version onward. All queries must start from that version, as older ones are cleared by retention.

