custom dbt adapter for Azure Synapse. Major credit due to @mikaelene and his sqlserver custom adapter.
- macros use only Azure Synapse
T-SQL. Relevant GitHub issue - use of Create Table as Select (CTAS) means you don't need post-hooks to create indices
- Azure Active Directory Authentication options
Passing all tests in dbt-integration-tests.
- test incremental materializations more thoroughly than is done with
dbt-integration-tests. - Add support for
ActiveDirectoryMsi - Publish as package to
pypi - Use CTAS to create seeds?
- staging external tables as sources (in progress)
- officially rename the adapter from
sqlservertosynapse
as of now, only support for dbt 0.15.3, support for forthcoming 0.18.0 in development
Easiest install is to use pip (not yet registered on PyPI).
First install ODBC Driver version 17.
pip install git+https://github.com/swanderz/dbt-synapse.gitOn Ubuntu make sure you have the ODBC header files before installing
sudo apt install unixodbc-dev
SqlPassword is the default connection method, but you can also use the following pyodbc-supported ActiveDirectory methods to authenticate:
- ActiveDirectory Password
- ActiveDirectory Interactive
- ActiveDirectory Integrated
- ActiveDirectory MSI (to be implemented)
this should be in every target definition
type: sqlserver
driver: 'ODBC Driver 17 for SQL Server' (The ODBC Driver installed on your system)
server: server-host-name or ip
port: 1433
schema: schemaname
user: username
password: password
Definitely not ideal, but available
authentication: ActiveDirectoryPassword
user: [email protected]
password: i<3opensource?
brings up the Azure AD prompt so you can MFA if need be.
authentication: ActiveDirectoryInteractive
user: [email protected]
uses your machine's credentials (might be disabled by your AAD admins)
authentication: ActiveDirectoryIntegrated
authentication: ActiveDirectoryMsi
CTAS allows you to materialize tables with indices and distributions at creation time, which obviates the need for post-hooks to set indices.
You can also configure index and dist in dbt_project.yml.
{{
config(
index='HEAP',
dist='ROUND_ROBIN'
)
}}
select *
from ...
is turned into the relative form (minus __dbt's _backup and _tmp tables)
CREATE TABLE ajs_stg.absence_hours
WITH(
DISTRIBUTION = ROUND_ROBIN,
HEAP
)
AS (SELECT * FROM ajs_stg.absence_hours__dbt_tmp_temp_view)CLUSTERED COLUMNSTORE INDEX(default)HEAPCLUSTERED INDEX ({COLUMN})
ROUND_ROBIN(default)HASH({COLUMN})REPLICATE
- Fix output of sql in the log files.
- Limited the version of dbt to 0.15, since later versions are unsupported.
Initial release