Created
August 11, 2025 10:15
-
-
Save adinsmoor/71740216dda651d60a05acbccaba051b to your computer and use it in GitHub Desktop.
Synapse "test" fix
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {%- materialization test, adapter='fabric' -%} | |
| {% set relations = [] %} | |
| {% set limit = config.get('limit') %} | |
| {% set fail_calc = config.get('fail_calc') %} | |
| {% set warn_if = config.get('warn_if') %} | |
| {% set error_if = config.get('error_if') %} | |
| {% set number_of_errors = 0 %} | |
| {% if should_store_failures() %} | |
| {% set identifier = model['alias'] %} | |
| {% set store_failures_as = config.get('store_failures_as') %} | |
| {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %} | |
| {% if store_failures_as not in ['table', 'view'] %} | |
| {{ exceptions.raise_compiler_error( | |
| "'" ~ store_failures_as ~ "' is not a valid value for `store_failures_as`. " | |
| "Accepted values are: ['ephemeral', 'table', 'view']" | |
| ) }} | |
| {% endif %} | |
| -- create an error count view because data tests can be CTE's | |
| {% set error_vw_relation = api.Relation.create(identifier=identifier ~ '__dbt_err_count_vw', schema=schema, database=database, type='view') -%} | |
| {% do adapter.drop_relation(error_vw_relation) %} | |
| {% call statement(auto_begin=True) %} | |
| {{ get_create_sql(error_vw_relation, sql) }} | |
| {% endcall %} | |
| -- Get errors for the data test | |
| {% call statement('find_if_errors_exists', fetch_result=true) %} | |
| {{ get_use_database_sql(database) }} | |
| select count(*) as num_of_errors from {{ error_vw_relation }} | |
| {{ apply_label() }} | |
| {% endcall %} | |
| -- Count errors & drop error view relation | |
| {% set number_of_errors = load_result('find_if_errors_exists')['data'][0][0] %} | |
| {% do adapter.drop_relation(error_vw_relation) %} | |
| {% set target_relation = api.Relation.create( | |
| identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} | |
| {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %} | |
| {% if old_relation %} | |
| {% do adapter.drop_relation(old_relation) %} | |
| {% endif %} | |
| {% call statement(auto_begin=True) %} | |
| {{ get_create_sql(target_relation, sql) }} | |
| {% endcall %} | |
| -- Dropping temp view created during table creation to persist store failures | |
| {% if target_relation.type == 'table' %} | |
| {% set tmp_vw_relation = target_relation.incorporate(path={"identifier": target_relation.identifier ~ '__dbt_tmp_vw'}, type='view')-%} | |
| {% do adapter.drop_relation(tmp_vw_relation) %} | |
| {% endif %} | |
| {% do relations.append(target_relation) %} | |
| {% set main_sql %} | |
| select * from {{ target_relation }} | |
| {% endset %} | |
| {{ adapter.commit() }} | |
| {% else %} | |
| {% set main_sql = sql %} | |
| {% endif %} | |
| {% call statement('main', fetch_result=True) -%} | |
| {{ get_fabric_test_sql(database, schema, main_sql, fail_calc, warn_if, error_if, limit)}} | |
| {%- endcall %} | |
| {% if number_of_errors == 0 and should_store_failures() %} | |
| -- Dropping target relation if no errors found in data test. | |
| {% set identifier = model['alias'] %} | |
| {% set target_relation = api.Relation.create( | |
| identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} | |
| {% do adapter.drop_relation(target_relation) %} | |
| {% endif %} | |
| {{ return({'relations': relations}) }} | |
| {%- endmaterialization -%} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment