I am trying to read run_id for DAG in SnowflakeOperator to set a session parameter, query_tag. But it seems like the session parameter is not templated.
snowflake_operator = SnowflakeOperator(
    task_id='snowflake_task',
    snowflake_conn_id='snowflake_conn',
    sql='resources/some.sql',
    warehouse='my_warehouse',
    database='my_database',
    role='my_role',
    session_parameters={
        'QUERY_TAG': 'dagrun_{{run_id}}'
    }
)
How can I reference run_id and use it as an input here?
Advertisement
Answer
You need to make the non-templated field templated.
class MySnowflakeOperator(SnowflakeOperator):
    template_fields = (
        "session_parameters",
    ) + SnowflakeOperator.template_fields
Then you can use it as:
snowflake_operator = MySnowflakeOperator(
    task_id='snowflake_task',
    snowflake_conn_id='snowflake_conn',
    sql='resources/some.sql',
    warehouse='my_warehouse',
    database='my_database',
    role='my_role',
    session_parameters={
        'QUERY_TAG': 'dagrun_{{run_id}}'
    }
)
