gpt4 book ai didi

sql - 使用 dbt 从雪花 information_schema 检索表名称

转载 作者:行者123 更新时间:2023-12-03 08:23:45 25 4
gpt4 key购买 nike

我创建了一个宏来从 Snowflake 中的 INFORMATION_SCHEMA 返回表名称。

我的雪花表格如下

------------
| 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")}}

但是我收到错误:

模型编译错误

“None”没有属性“table”

> 在宏 get_table (macros\get_table.sql)

我不明白错误在哪里

最佳答案

您需要使用执行上下文变量来防止此错误,如下所述:

https://discourse.getdbt.com/t/help-with-call-statement-error-none-has-no-attribute-table/602

您还要注意查询,表名是大写的。所以你最好用“ilike”而不是“like”。

另一个重要的一点是,“run_query(table_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 %}

关于sql - 使用 dbt 从雪花 information_schema 检索表名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67118919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com