gpt4 book ai didi

dbt 宏来提取列的 MAX len

转载 作者:行者123 更新时间:2023-12-04 13:24:15 24 4
gpt4 key购买 nike

我基本上想传入一列,然后进行自动计算我最终将作为 Decimal(x,x) 参数传递给我的 CAST 的数字的计算,因此我总是考虑最大的 Decimal,因此不会发生舍入。
我想在周期上传递一个目标列拆分,向左计算最大 len(),然后向右计算最大 len(),然后返回 (left+right, right) 所以它类似于 22 ,8.
到目前为止,这是我的宏:

{% macro cast_decimal(max_field, table_name) %}
{%- call statement('cast_decimal_max', fetch_result=True) -%}

WITH mq AS
(
SELECT MAX(len(split_part({{ max_field }},'.',1))) AS max_l,
MAX(len(split_part({{ max_field }},'.',2))) AS max_r
FROM {{ table_name }}
)
SELECT (max_l + max_r) || ',' || max_r AS max_total
FROM mq

{%- endcall %}
{%- set max_existing_total = load_result('cast_decimal_max').table.columns['max_total'].values()[0] -%}
{{ return(max_existing_total) }}
{%- endmacro %}
我不断收到此错误:“无”没有属性“表”,我不确定我做错了什么。
如果你能告诉我如何从我的 FROM 语句中自动传入当前表,那么我就不需要它作为我宏中的参数,而不是像这样做:
SELECT {{ cast_decimal(close_price, public.stable_prices) }}
FROM public.stable_prices

最佳答案

{% macro cast_decimal(max_field, table_name) %}
{%- call statement('cast_decimal_max', fetch_result=True) -%}

WITH mq AS
(
SELECT MAX(len(split_part({{ max_field }},'.',1))) AS max_l,
MAX(len(split_part({{ max_field }},'.',2))) AS max_r
FROM {{ table_name }}
)
SELECT (max_l + max_r) || ',' || max_r AS max_total
FROM mq

{%- endcall %}
{% if execute %}
{%- set max_existing_total = "'" ~ load_result('cast_decimal_max').table.columns['max_total'].values()[0] ~ "'"-%}
{{ return(max_existing_total) }}
{% else %}
{{ return(false) }}
{% endif %}
{%- endmacro %}
此解决方案有效 - 用 "'"~ 包装结果并添加 if execute 语句。

关于dbt 宏来提取列的 MAX len,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69533674/

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