From 12cd45230d910336345e626f683b4025863edc1b Mon Sep 17 00:00:00 2001 From: Full Name <14962728+dumkydewilde@users.noreply.github.com> Date: Thu, 11 Dec 2025 12:12:09 +0100 Subject: [PATCH] add duckdb support; exclude microbatch models from duckdb tests as there is not support for this in dbt-duckdb yet --- .gitignore | 1 + .../models/microbatch.sql | 3 +- .../models/microbatch_transaction.sql | 3 +- .../models/microbatch_transaction_base.sql | 1 + integration_test_project/profiles.yml | 4 ++ .../upload_exposures.sql | 5 ++ .../upload_invocations.sql | 4 ++ .../upload_model_executions.sql | 4 ++ .../upload_models.sql | 3 + .../upload_seed_executions.sql | 4 ++ .../upload_seeds.sql | 4 ++ .../upload_snapshot_executions.sql | 4 ++ .../upload_snapshots.sql | 3 + .../upload_sources.sql | 3 + .../upload_test_executions.sql | 5 ++ .../upload_tests.sql | 3 + .../insert_into_metadata_table.sql | 12 ++++ tox.ini | 70 +++++++++++++++++++ 18 files changed, 134 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0f2d1c86..468964c1 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ env.sh pyproject.toml .DS_Store +*.duckdb \ No newline at end of file diff --git a/integration_test_project/models/microbatch.sql b/integration_test_project/models/microbatch.sql index c2b1b543..41abdb7c 100644 --- a/integration_test_project/models/microbatch.sql +++ b/integration_test_project/models/microbatch.sql @@ -10,7 +10,8 @@ partition_by = { 'field': 'store_name', 'data_type': 'text', - } + }, + tags = ['microbatch'] ) }} diff --git a/integration_test_project/models/microbatch_transaction.sql b/integration_test_project/models/microbatch_transaction.sql index 26f1c190..219b2b48 100644 --- a/integration_test_project/models/microbatch_transaction.sql +++ b/integration_test_project/models/microbatch_transaction.sql @@ -1,7 +1,8 @@ {{ config( materialized = 'table', - event_time = 'transaction_ts__hourly' + event_time = 'transaction_ts__hourly', + tags = ['microbatch'] ) }} diff --git a/integration_test_project/models/microbatch_transaction_base.sql b/integration_test_project/models/microbatch_transaction_base.sql index d4cdc055..b6b3adcd 100644 --- a/integration_test_project/models/microbatch_transaction_base.sql +++ b/integration_test_project/models/microbatch_transaction_base.sql @@ -1,6 +1,7 @@ {{ config( materialized = 'view', + tags = ['microbatch'] ) }} diff --git a/integration_test_project/profiles.yml b/integration_test_project/profiles.yml index 84d85ddc..7e916efe 100644 --- a/integration_test_project/profiles.yml +++ b/integration_test_project/profiles.yml @@ -52,6 +52,10 @@ dbt_artifacts: dbname: postgres schema: public threads: 8 + duckdb: + type: duckdb + path: "test.duckdb" + threads: 1 sqlserver: type: sqlserver driver: 'ODBC Driver 18 for SQL Server' diff --git a/macros/upload_individual_datasets/upload_exposures.sql b/macros/upload_individual_datasets/upload_exposures.sql index 6c12237f..fde2bc7d 100644 --- a/macros/upload_individual_datasets/upload_exposures.sql +++ b/macros/upload_individual_datasets/upload_exposures.sql @@ -116,6 +116,11 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_exposures_dml_sql(exposures) -%} + {{ dbt_artifacts.postgres__get_exposures_dml_sql(exposures) }} +{%- endmacro %} + + {% macro sqlserver__get_exposures_dml_sql(exposures) -%} {% if exposures != [] %} diff --git a/macros/upload_individual_datasets/upload_invocations.sql b/macros/upload_individual_datasets/upload_invocations.sql index 1991aeb1..ba976966 100644 --- a/macros/upload_individual_datasets/upload_invocations.sql +++ b/macros/upload_individual_datasets/upload_invocations.sql @@ -236,6 +236,10 @@ {% endmacro -%} +{% macro duckdb__get_invocations_dml_sql() -%} + {{ dbt_artifacts.postgres__get_invocations_dml_sql() }} +{%- endmacro %} + {% macro trino__get_invocations_dml_sql() -%} {% set invocation_values %} ( diff --git a/macros/upload_individual_datasets/upload_model_executions.sql b/macros/upload_individual_datasets/upload_model_executions.sql index 231f036e..5b1c546d 100644 --- a/macros/upload_individual_datasets/upload_model_executions.sql +++ b/macros/upload_individual_datasets/upload_model_executions.sql @@ -200,6 +200,10 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_model_executions_dml_sql(models) -%} + {{ dbt_artifacts.postgres__get_model_executions_dml_sql(models) }} +{%- endmacro %} + {% macro sqlserver__get_model_executions_dml_sql(models) -%} {% if models != [] %} diff --git a/macros/upload_individual_datasets/upload_models.sql b/macros/upload_individual_datasets/upload_models.sql index 6e9466d3..b2ea1a68 100644 --- a/macros/upload_individual_datasets/upload_models.sql +++ b/macros/upload_individual_datasets/upload_models.sql @@ -122,6 +122,9 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_models_dml_sql(models) -%} + {{ dbt_artifacts.postgres__get_models_dml_sql(models) }} +{% endmacro %} {% macro sqlserver__get_models_dml_sql(models) -%} diff --git a/macros/upload_individual_datasets/upload_seed_executions.sql b/macros/upload_individual_datasets/upload_seed_executions.sql index 7e8ce441..e9c57b02 100644 --- a/macros/upload_individual_datasets/upload_seed_executions.sql +++ b/macros/upload_individual_datasets/upload_seed_executions.sql @@ -214,6 +214,10 @@ {% endif %} {% endmacro -%} +{% macro duckdb__get_seed_executions_dml_sql(seeds) -%} + {{ dbt_artifacts.postgres__get_seed_executions_dml_sql(seeds) }} +{% endmacro %} + {% macro sqlserver__get_seed_executions_dml_sql(seeds) -%} {% if seeds != [] %} {% set seed_execution_values %} diff --git a/macros/upload_individual_datasets/upload_seeds.sql b/macros/upload_individual_datasets/upload_seeds.sql index 077e0516..a7e6af09 100644 --- a/macros/upload_individual_datasets/upload_seeds.sql +++ b/macros/upload_individual_datasets/upload_seeds.sql @@ -107,6 +107,10 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_seeds_dml_sql(seeds) -%} + {{ dbt_artifacts.postgres__get_seeds_dml_sql(seeds) }} +{% endmacro %} + {% macro sqlserver__get_seeds_dml_sql(seeds) -%} {% if seeds != [] %} diff --git a/macros/upload_individual_datasets/upload_snapshot_executions.sql b/macros/upload_individual_datasets/upload_snapshot_executions.sql index 110a2074..dfe8f9ca 100644 --- a/macros/upload_individual_datasets/upload_snapshot_executions.sql +++ b/macros/upload_individual_datasets/upload_snapshot_executions.sql @@ -214,6 +214,10 @@ {% endif %} {% endmacro -%} +{% macro duckdb__get_snapshot_executions_dml_sql(snapshots) -%} + {{ dbt_artifacts.postgres__get_snapshot_executions_dml_sql(snapshots) }} +{% endmacro -%} + {% macro sqlserver__get_snapshot_executions_dml_sql(snapshots) -%} {% if snapshots != [] %} {% set snapshot_execution_values %} diff --git a/macros/upload_individual_datasets/upload_snapshots.sql b/macros/upload_individual_datasets/upload_snapshots.sql index 2d20b44b..3105c0c1 100644 --- a/macros/upload_individual_datasets/upload_snapshots.sql +++ b/macros/upload_individual_datasets/upload_snapshots.sql @@ -117,6 +117,9 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_snapshots_dml_sql(snapshots) -%} + {{ dbt_artifacts.postgres__get_snapshots_dml_sql(snapshots) }} +{%- endmacro %} {% macro sqlserver__get_snapshots_dml_sql(snapshots) -%} diff --git a/macros/upload_individual_datasets/upload_sources.sql b/macros/upload_individual_datasets/upload_sources.sql index c856dd67..1b66121b 100644 --- a/macros/upload_individual_datasets/upload_sources.sql +++ b/macros/upload_individual_datasets/upload_sources.sql @@ -107,6 +107,9 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_sources_dml_sql(sources) -%} + {{ dbt_artifacts.postgres__get_sources_dml_sql(sources) }} +{%- endmacro %} {% macro sqlserver__get_sources_dml_sql(sources) -%} diff --git a/macros/upload_individual_datasets/upload_test_executions.sql b/macros/upload_individual_datasets/upload_test_executions.sql index 568c21b6..e5f19017 100644 --- a/macros/upload_individual_datasets/upload_test_executions.sql +++ b/macros/upload_individual_datasets/upload_test_executions.sql @@ -146,6 +146,11 @@ {% endif %} {% endmacro -%} +{% macro duckdb__get_test_executions_dml_sql(tests) -%} + {{ dbt_artifacts.postgres__get_test_executions_dml_sql(tests) }} +{% endmacro -%} + + {% macro snowflake__get_test_executions_dml_sql(tests) -%} {% if tests != [] %} {% set test_execution_values %} diff --git a/macros/upload_individual_datasets/upload_tests.sql b/macros/upload_individual_datasets/upload_tests.sql index 0c9bbca4..0dbdef67 100644 --- a/macros/upload_individual_datasets/upload_tests.sql +++ b/macros/upload_individual_datasets/upload_tests.sql @@ -95,6 +95,9 @@ {% endif %} {%- endmacro %} +{% macro duckdb__get_tests_dml_sql(tests) -%} + {{ dbt_artifacts.postgres__get_tests_dml_sql(tests) }} +{% endmacro %} {% macro sqlserver__get_tests_dml_sql(tests) -%} diff --git a/macros/upload_results/insert_into_metadata_table.sql b/macros/upload_results/insert_into_metadata_table.sql index 02b7d145..ad87a5b7 100644 --- a/macros/upload_results/insert_into_metadata_table.sql +++ b/macros/upload_results/insert_into_metadata_table.sql @@ -57,6 +57,18 @@ {%- endmacro %} +{% macro duckdb__insert_into_metadata_table(relation, fields, content) -%} + + {% set insert_into_table_query %} + insert into {{ relation }} {{ fields }} + values + {{ content }} + {% endset %} + + {% do run_query(insert_into_table_query) %} + +{%- endmacro %} + {% macro sqlserver__insert_into_metadata_table(relation, fields, content) -%} {% set insert_into_table_query %} diff --git a/tox.ini b/tox.ini index 92803151..3ea11b81 100644 --- a/tox.ini +++ b/tox.ini @@ -391,6 +391,76 @@ commands = dbt deps dbt build --target postgres +[testenv:integration_duckdb] +changedir = integration_test_project +deps = + dbt-core~=1.9.0 + dbt-duckdb~=1.9.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_3_0] +changedir = integration_test_project +deps = dbt-duckdb~=1.3.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_4_0] +changedir = integration_test_project +deps = dbt-duckdb~=1.4.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_5_0] +changedir = integration_test_project +deps = dbt-duckdb~=1.5.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_6_0] +changedir = integration_test_project +deps = dbt-duckdb~=1.6.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_7_0] +changedir = integration_test_project +deps = dbt-duckdb~=1.7.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_8_0] +changedir = integration_test_project +deps = + dbt-core~=1.8.0 + dbt-duckdb~=1.8.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + +[testenv:integration_duckdb_1_9_0] +changedir = integration_test_project +deps = + dbt-core~=1.9.0 + dbt-duckdb~=1.9.0 +commands = + dbt clean + dbt deps + dbt build --exclude tag:microbatch --target duckdb + [testenv:integration_sqlserver] changedir = integration_test_project deps = dbt-sqlserver~=1.8.0