# dbt core - snowflake - Running pre hook to capture query table before running dbt test

**URL:** <https://discourse.getdbt.com/t/dbt-core-snowflake-running-pre-hook-to-capture-query-table-before-running-dbt-test/18751>\
**Category:** Help\
**Tags:** snowflake, hooks, macros, dbt-core\
**Created:** [March 22, 2025, 3:04am UTC](https://discourse.getdbt.com/t/dbt-core-snowflake-running-pre-hook-to-capture-query-table-before-running-dbt-test/18751 "2025-03-22T03:04:36Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![gnirs](https://sea2.discourse-cdn.com/flex020/user_avatar/discourse.getdbt.com/gnirs/32/5231_2.png) [@gnirs](https://discourse.getdbt.com/u/gnirs)\
**Post date:** [March 22, 2025, 3:04am UTC](https://discourse.getdbt.com/t/dbt-core-snowflake-running-pre-hook-to-capture-query-table-before-running-dbt-test/18751/1 "2025-03-22T03:04:36Z")

</div>

Running Snowflake models and tests in dbt-core

Have a pre-hook macro generate\_query\_tags to add query\_tags in Snowflake containing DAG ID and Run ID.

dbt\_projects.yml contents:

name: “financials”

version: “1.0.0”

config-version: 2

profile: “fin”  
models:  
financials:  
pre-hook:  
- “{{ generate\_query\_tags() }}”  
+materialized: table  
bronze:  
+schema: “bronze”  
upf:  
+tags: upf  
silver:  
+tags: silver  
+schema: “silver”  
upf:  
+tags: upf  
gold:  
+tags: gold  
+schema: “gold”  
upf:  
+tags: upf

tests:  
caspian\_financials:  
pre-hook:  
- “{{ generate\_query\_tags() }}”

macro definition:  
{% macro generate\_query\_tags() %}  
{% do log(‘Executing generate\_query\_tags macro’, info=True) %}  
{% set airflow\_dag\_id = var(“airflow\_dag\_id”, “unknown\_dag”) %}  
{% set airflow\_run\_id = var(“airflow\_run\_id”, “unknown\_run”) %}  
{% set airflow\_task\_execution\_date = var(“airflow\_task\_execution\_date”, “unknown\_execution\_date”) %}

{% set query\_tag = {  
“airflow\_dag\_id”: airflow\_dag\_id,  
“airflow\_run\_id”: airflow\_run\_id,  
“airflow\_task\_execution\_date”: airflow\_task\_execution\_date  
} | tojson %}

– Run the ALTER SESSION statement  
{% set sql %}  
ALTER SESSION SET QUERY\_TAG = ‘{{ query\_tag }}’;  
{% endset %}

{{ return(sql) }}  
{% endmacro %}

schema yml file where the tests are defined

version: 2

models:

- name: upf\_ref  
tests:
  - dbt\_expectations.expect\_table\_row\_count\_to\_be\_between:  
min\_value: 1

The pre-hook works fine when running the model but not getting triggered when the tests are getting executed.

the DAG uses DbtOperator and passes dbt\_verb=“test” with vars containing airflow context
