Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用dbt从雪花信息模式中检索表名_Sql_Snowflake Cloud Data Platform_Dbt - Fatal编程技术网

Sql 使用dbt从雪花信息模式中检索表名

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

我创建了一个宏来从Snowflake中的信息模式返回表名

我有雪花桌子如下

------------
|  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 %}