This was an amazing team effort - huge thanks to @cody-scott and @prescode for the bulk of the work to get us up to speed.
This will be in pre-release for a week or so to give folks a chance to test the package in live projects.
Updated to use dbt-fabric as the upstream adapter (https://github.com/dbt-msft/dbt-sqlserver/issues/441#issuecomment-1815837171)[https://github.com/dbt-msft/dbt-sqlserver/issues/441#issuecomment-1815837171] and (https://github.com/microsoft/dbt-fabric/issues/105)[https://github.com/microsoft/dbt-fabric/issues/105]
As the fabric adapter implements the majority of auth and required t-sql, this adapter delegates primarily to SQL auth and SQL Server specific
adaptations (using SELECT INTO
vs CREATE TABLE AS
).
Additional major changes pulled from fabric adapter:
TIMESTAMP
changing fromDATETIMEOFFSET
toDATETIME2(6)
STRING
changing fromVARCHAR(MAX)
toVARCHAR(8000)
- Fabric specific items that need further over-rides (clone for example needed overriding)
- Azure Auth elements to be deferred to Fabric, but should be validated
- T-SQL Package to be updated and validated with these changes.
- Integration of newer dbt-core features.
Another minor release to follow up on the 1.4 releases.
Replacing the usage of the dm_sql_referencing_entities
stored procedure with a query to sys.sql_expression_dependencies
for better compatibility with child adapters.
Minor release to follow up on 1.4.1 and 1.4.0.
Adding nolock
to information_schema and sys tables/views can be overriden with the dispatched information_schema_hints
macro. This is required for adapters inheriting from this one.
This is a minor release following up on 1.4.0 with fixes for long outstanding issues. Contributors to this release are @cbini, @rlshuhart, @jacobm001, @baldwicc and @sdebruyn.
- Added support for a custom schema owner. You can now add
schema_authorization
(orschema_auth
) to your profile. If you do so, dbt will create schemas with theauthorization
option suffixed by this value. If you are authorizing dbt users or service principals on Azure SQL based on an Azure AD group, it's recommended to set this value to the name of the group. #153 #382 - Documentation: added more information about the permissions which you'll need to grant to run dbt.
- Support for
DATETIMEOFFSET
as type to be used in dbt source freshness tests. #254 #346 - Added 2 options related to timeouts to the profile:
login_timeout
andquery_timeout
. The default values are0
(no timeout). #162 #395
- Fixed issues with databases with a case-sensitive collation and added automated testing for it so that we won't break it again. #212 #391
- Index names are now MD5 hashed to avoid running into the maximum amount of characters in index names with index with lots of columns with long names. #317 #386
- Fixed the batch size calculation for seeds. Seeds will run more efficiently now. #396 #179 #210 #211
- Added
nolock
to queries for all information_schema/sys tables and views. dbt runs a lot of queries on these metadata schemas. This can often lead to deadlock issues if you are using a high number of threads or dbt processes. Addingnolock
to these queries avoids the deadlocks. #379 #381 - Fixed implementation of
{{ hash(...) }}
for null values. #392
- Fixed more concurrency issues with automated Azure integration testing.
- Removed extra
__init__.py
files. #171 #202 - Added commits to be ignored in git blame for easier blaming. #385
- @Elliot2718 made their first contribution in dbt-msft#204
- @i-j made their first contribution in dbt-msft#345
- Support for dbt-core 1.4
- Incremental predicates
- Add support for Python 3.11
- Replace deprecated exception functions
- Consolidate timestamp macros
- Add
nolock
query hint to several metadata queries to avoid deadlocks by @Elliot2718 in dbt-msft#204 - Rework column metadata retrieval to avoid duplicate results and deadlocks by @sdebruyn in dbt-msft#368
- Model removal will now cascade and also drop related views so that views are no longer in a broken state by @sdebruyn in dbt-msft#366
- Fixed handling of on_schema_change for incremental models by @sdebruyn in dbt-msft#376
- Fixed lots of testing concurrency issues
- Added all available tests as of dbt 1.4.6
Full Changelog: https://github.com/dbt-msft/dbt-sqlserver/compare/v1.3.1...v1.4.0
PR changelog
- Bump pre-commit from 2.20.0 to 3.2.0 by @dependabot in dbt-msft#344
- Bump docker/build-push-action from 3.2.0 to 4.0.0 by @dependabot in dbt-msft#331
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in dbt-msft#316
- Bump wheel from 0.38.4 to 0.40.0 by @dependabot in dbt-msft#343
- Copy for workflow schtuff by @dataders in dbt-msft#350
- avoid publishing docker from other branches than master by @sdebruyn in dbt-msft#351
- bump pre-commit by @sdebruyn in dbt-msft#353
- fix pre-commit for python 3.7 by @sdebruyn in dbt-msft#354
- use 127.0.0.1 to avoid issues with local testing by @sdebruyn in dbt-msft#358
- allow for more flexible local testing with azure auth by @sdebruyn in dbt-msft#359
- credit where due by @dataders in dbt-msft#355
- remove condition for azure testing by @sdebruyn in dbt-msft#360
- ignore owner when testing docs in azure by @sdebruyn in dbt-msft#365
- impl of information_schema name closer to default by @sdebruyn in dbt-msft#367
- Add nolock by @Elliot2718 in dbt-msft#204
- Fix concurrency issues and document create as by @sdebruyn in dbt-msft#368
- add debug tests by @sdebruyn in dbt-msft#363
- add concurrency test by @sdebruyn in dbt-msft#362
- add aliases tests by @sdebruyn in dbt-msft#361
- add ephemeral error handling test by @sdebruyn in dbt-msft#364
- mark db-wide tests as flaky by @sdebruyn in dbt-msft#369
- remove azure max parallel test runs by @sdebruyn in dbt-msft#370
- add nolock to more metadata calls to avoid deadlocks by @sdebruyn in dbt-msft#374
- add query comment tests by @sdebruyn in dbt-msft#375
- add seed tests and add cascade to drop relation by @sdebruyn in dbt-msft#366
- make testing faster by running multithreaded by @sdebruyn in dbt-msft#372
- add tests for changing relation type by @sdebruyn in dbt-msft#373
- [incremental models] add tests, various bugfixes and support for incremental predicates by @sdebruyn in dbt-msft#376
Minor release to loosen dependency on dbt-core and pyodbc
- Support for dbt-core 1.3
- Python models are currently not supported in this adapter
- The following cross-db macros are not supported in this adapter:
bool_or
,array_construct
,array_concat
,array_append
- The macro
type_boolean
now returns the correct data type (bit
)
- Update adapter testing framework
- Update dependencies and pre-commit hooks
For compatibility with MS ODBC Driver 18, the settings Encrypt
and TrustServerCertificate
are now always added to the connection string.
These are configured with the keys encrypt
and trust_cert
in your profile.
In previous versions, these settings were only added if they were set to True
.
The new version of the MS ODBC Driver sets Encrypt
to True
by default.
The adapter is following this change and also defaults to True
for Encrypt
.
The default value for TrustServerConnection
remains False
as it would be a security risk otherwise.
This means that connections made with this version of the adapter will now have Encrypt=Yes
and TrustServerCertificate=No
set if you are using the default settings.
You should change the settings encrypt
or trust_cert
to accommodate for your use case.
- Support for dbt-core 1.2
- Full support for the new grants config
- New configuration option:
auto_provision_aad_principals
- setting this totrue
will automatically create contained database users linked to Azure AD principals or groups if they don't exist yet when they're being used in grant configs
- Support for MS ODBC Driver 18
- Support automatic retries with new
retries
setting introduced in core - The correct owner of a table/view is now visible in generated documentation (and in catalog.json)
- A lot of features of dbt-utils & T-SQL utils are now available out-of-the-box in dbt-core and this adapter. A new release of T-SQL utils will follow.
- Support for all
type_*
macros - Support for all cross-database macros, except:
bool_or
listagg
will only work in SQL Server 2017 or newer or the cloud versions. Thelimit_num
option is unsupported.DISTINCT
cannot be used in the measure.
- Support for all
- In some cases the
TIMESTAMP
would be used as data type instead ofDATETIMEOFFSET
, fixed that
- Update adapter testing framework to 1.2.1
- Update pre-commit, tox, pytest and pre-commit hooks
- Type hinting in connection class
- Automated testing with SQL Server 2017, 2019 and 2022
- Automated testing with MS ODBC 17 and MS ODBC 18
See changes included in v1.1.0rc1 below as well
- #251 fix incremental models with arrays for unique keys (@sdebruyn & @johnnytang24)
- #214 fix for sources with spaces in the names (@Freia3)
- #238 fix snapshots breaking when new columns are added (@jakemcaferty)
- #249 & #250 add Python 3.10 to automated testing (@sdebruyn)
- #248 update all documentation, README and include on dbt docs (@sdebruyn)
- #252 add automated test for #214 (@sdebruyn)
- update to dbt 1.1
- #194 uppercased information_schema (@TrololoLi)
- #215 Escape schema names so they can contain strange characters (@johnf)
- Documentation on how to contribute to the adapter
- Automatic release process by adding a new tag
- Consistent code style with pre-commit
- #201 use new dbt 1.0 logger (@semcha)
- #216 use new dbt testing framework (@dataders & @sdebruyn)
Please see dbt-core v1.0.0 release notes for upstream changes
- fix index naming when columns contain spaces #175
- re-organize macros to match new structure #184
- Added support for more authentication methods: automatic, environment variables, managed identity. All of them are documented in the readme. #178 contributed by @sdebruyn
Please see dbt-core v0.21.0 release notes for upstream changes
- in dbt-sqlserver v0.20.0, users couldn't use some out of the box tests, such as accepted_values. users can now also use CTEs in their
bespokecustom data tests - fixes issue with changing column types in incremental table column type #152 #169
- workaround for Azure CLI token expires after one hour. Now we get new tokens for every transaction. #156 #158
- workaround for Azure CLI token expires after one hour. Now we get new tokens for every transaction. #156 #158
- dbt-sqlserver will now work with dbt
v0.20.0
. Please see dbt's upgrading tov0.20.0
docs for more info. - users can now declare a custom
max_batch_size
in the project configuration to set the batch size used by the seed file loader. #127 and #151 thanks @jacobm001
sqlserver__load_csv_rows
now has a safety provided bycalc_batch_size()
to ensure the insert statements won't exceed SQL Server's 2100 parameter limit. #127 and #151 thanks @jacobm001- switched to using a
MANIFEST.in
to declare which files should be included - updated
pyodbc
andazure-identity
dependencies to their latest versions
- fixing and issue with empty seed table that dbt-redshift already addressed with fishtown-analytics/dbt#2255 #147
- drop unneeded debugging code that only was run when "Active Directory integrated" was given as the auth method #149
- hotfix for regression introduced by #126 that wouldn't surface syntax errors from the SQL engine #140 thanks @jeroen-mostert!
- ensure that macros are not recreated for incremental models #116 thanks @infused-kim
- authentication now is case-insensitive and accepts both
CLI
andcli
as options. #100 thanks (@JCZuurmond)[https://github.com/JCZuurmond] - add unit tests for azure-identity related token fetching
- users can now delcare a model's database to be other than the one specified in the profile. This will only work for on-premise SQL Server and Azure SQL Managed Instance. #126 thanks @semcha!
- abandon four-part version names (
v0.19.0.2
) in favor of three-part version names because it isn't SemVer and it causes problems with the~=
pip operator used dbt-synapse, a pacakge that depends on dbt-sqlserver - allow CI to work with the lower-cost serverless Azure SQL #132
- we now use the correct connection string parameter so MSFT can montior dbt adoption in their telemetry. #98
- dbt-sqlserver's incremental materialization is now 100% aligneed logically to dbt's global_project behavior! this makes maintaining
dbt-sqlserver
easier by decreasing code footprint. #102 - clean up CI config and corresponding Docker image #122
- dbt-sqlserver's snapshotting now 100% aligneed logically to dbt's snapshotting behavior! Users can now snapshot 'hard-deleted' record as mentioned in the dbt v0.19.0 release notes. An added benefit is that it makes maintaining
dbt-sqlserver
by decreasing code footprint. #81 fishtown-analytics/dbt#3003
- small snapshot bug addressed via #81
- support for clustered columnstore index creation pre SQL Server 2016. #88 thanks @alangsbo
- support for scenarios where the target db's collation is different than the server's #87 @alangsbo
- This adapter has separate CI tests to ensure all the connection methods are working as they should #75
- This adapter has a CI job for running unit tests #103
- Update the tox setup #105
Adds support for:
- SQL Server down to version 2012
- authentication via:
- Azure CLI (see #71, thanks @JCZuurmond !), and
- MSFT ODBC Active Directory options (#53 #55 #58 thanks to @NandanHegde15 and @alieus)
- using a named instance (#51 thanks @alangsbo)
- Adds support down to SQL Server 2012
- The adapter is now automatically tested with Fishtowns official adapter-tests to increase stability when making changes and upgrades to the adapter.
- Fix for lack of precision in the snapshot check strategy. Previously when executing two check snapshots the same second, there was inconsistent data as a result. This was mostly noted when running the automatic adapter tests. NOTE: This fix will create a new snapshot version in the target table on first run after upgrade.
- Adds support for Azure Active Directory as authentication provider
- Fix for lack of precision in the snapshot check strategy. (#74 and #56 thanks @qed) Previously when executing two check snapshots the same second, there was inconsistent data as a result. This was mostly noted when running the automatic adapter tests. NOTE: This fix will create a new snapshot version in the target table on first run after upgrade.
- #52 Fix deprecation warning (Thanks @jnoynaert)
- The adapter is now automatically tested with Fishtowns official adapter-tests to increase stability when making changes and upgrades to the adapter. (#62 #64 #69 #74)
- We are also now testing specific target configs to make the devs more confident that everything is in working order (#75)
- Adds support for dbt v0.18.0
- Snapshots did not work on dbt v0.15.1 to v0.15.3
- Fix output of sql in the log files.
- Limited the version of dbt to 0.15, since later versions are unsupported.
- Fixes an issue with clustered columnstore index not beeing created.
- Ability to define an index in a poosthook
- Previously when a model run was interupted unfinished models prevented the next run and you had to manually delete them. This is now fixed so that unfinished models will be deleted on next run.
Fix release for v0.15.0
- Setting the port had no effect. Issue #9
- Unable to generate docs. Issue #12
Requires dbt v0.15.0 or greater
Requires dbt v0.14.x