DBT / Redshift-如何使用dbt_utils.get_query_results_as_dict的结果

问题描述

我正在尝试编写列定义(concat列名称和数据类型) 到redshift表,以便在重播存档文件时可以重用这些列定义 s3文件重播到数据仓库中。我的第一步是获取列defs 在以下模型中:

with cte_redshift_column_deFinitions as
(
select
col_nam || '-' || col_datatype as colnameandtype
from {{ ref('redshift_columns') }}
where schemaname = 'schema1'
and tablename = 'plans'
order by
col_index
)

select * from cte_redshift_column_deFinitions

然后我使用宏将colnameandtypt放入字典:

{% macro macro_concatcolumns() %}
  {% set column_defs = dbt_utils.get_query_results_as_dict("select * from " ~ ref('redshift_column_deFinitions') ~ "") %}
    {% set sql %}
      select {{ column_defs }}
    {% endset %}
{% do run_query(sql) %}
{% endmacro %}

所以我可以设置column_defs,但是由于字典结构,当我运行时 选择{{column_defs}},我在日志中得到以下内容

select {'colnameandtype': ('[id][VARCHAR(512)]','[received_at][TIMESTAMP WITHOUT TIME ZONE]','[uuid][BIGINT]','[amount][BIGINT]','[created][TIMESTAMP WITHOUT TIME ZONE]','[currency][VARCHAR(512)]','[interval][VARCHAR(512)]','[interval_count][BIGINT]','[name][VARCHAR(512)]','[statement_descriptor][VARCHAR(512)]','[trial_period_days][BIGINT]','[uuid_ts][TIMESTAMP WITHOUT TIME ZONE]','[Metadata_netsuite_service_sale_item_tag][VARCHAR(512)]','[Metadata_netsuite_service_sale_item_id][VARCHAR(512)]','[is_deleted][BOOLEAN]','[Metadata_netsuite_service_sale_item_cf_id][VARCHAR(512)]','[Metadata_netsuite_service_sale_item_cf_tag][VARCHAR(512)]')}

2020-11-03 16:20:41.407959Z: Postgres error: Syntax error at or near "'colnameandtype'"
LINE 5:       select {'colnameandtype': ('[id][VARCHAR(512)]','[rec...

我只想使用列,但是我不确定如何处理dict结构以删除“ {'colnameandtype':(”。

jinja和dbt相当新,因此任何帮助将不胜感激。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)