Sql 使用dbt从雪花信息模式中检索表名
我创建了一个宏来从Snowflake中的信息模式返回表名 我有雪花桌子如下Sql 使用dbt从雪花信息模式中检索表名,sql,snowflake-cloud-data-platform,dbt,Sql,Snowflake Cloud Data Platform,Dbt,我创建了一个宏来从Snowflake中的信息模式返回表名 我有雪花桌子如下 ------------ | TABLES | ------------ | ~one | | ~two | | ~three | ------------ 我想将表类型,即one传递到宏中,并获取实际的表名,即~one 这是我在DBT中的宏(get_table.sql),它接受参数并返回表名 {%- macro get_table(table_type) -%} {%- se
------------
| TABLES |
------------
| ~one |
| ~two |
| ~three |
------------
我想将表类型,即one
传递到宏中,并获取实际的表名,即~one
这是我在DBT中的宏(get_table.sql
),它接受参数并返回表名
{%- macro get_table(table_type) -%}
{%- set table_result -%}
select distinct TABLE_NAME from "DEMO_DB"."INFORMATION_SCHEMA"."TABLES" where TABLE_NAME like '\~%{{table_type}}%'
{%- endset -%}
{%- set table_name = run_query(table_result).columns[0].values() -%}
{{ return(table_name) }}
{%- endmacro -%}
下面是我的DBT模型,它调用上述宏
{{ config(materialized='table',full_refresh=true) }}
select * from {{get_table("one")}}
但我得到了一个错误:
模型中的编译错误
“无”没有属性“表”
>在宏get\u table(macros\get\u table.sql)中
我不明白错误在哪里您需要使用execute上下文变量来防止此错误,如下所述: 您还需要注意查询,表名是大写的。所以你最好用“ilike”而不是“like” 另一个要点是,“run\u query(table\u result).columns[0].values()”返回一个数组,因此我在末尾添加了索引 下面是您模块的修改版本,我在测试环境中成功运行了它:
{% macro get_table(table_name) %}
{% set table_query %}
select distinct TABLE_NAME from "DEMO_DB"."INFORMATION_SCHEMA"."TABLES" where TABLE_NAME ilike '%{{ table_name }}%'
{% endset %}
{% if execute %}
{%- set result = run_query(table_query).columns[0].values()[0] -%}
{{return( result )}}
{% else %}
{{return( false ) }}
{% endif %}
{% endmacro %}