본문 바로가기
Data/DBT

[dbt] 쿼리 결과를 변수에 저장하고 싶은 경우 | LIM

by forestlim 2023. 12. 6.
728x90
반응형

dbt 내부에서 쿼리 결과를 변수로 지정하고 싶을 때에는 run_query 를 사용하면 된다. 

 

다음과 같이 사용할 수 있다. 

 

각 쿼리는 6개월 동안의 달의 첫 번째 날짜와, 마지막 날짜를 가져오는 쿼리이다.

{% set get_start_date %}
    select format_date('%Y-%m-01', date_sub(current_date('Asia/Seoul'), interval seq month)) from unnest(generate_array(1, 6)) as seq
{% endset %}

{% set get_end_date %}
    select format_date('%Y-%m-%d', last_day(date_sub(current_date('Asia/Seoul'), interval seq month), month)) from unnest(generate_array(1, 6)) as seq
{% endset %}

 

 

쿼리를 작성한 다음 run_query 를 통해 start_dates 라는 변수에 결과를 저장한다. 

{% set start_dates = run_query(get_start_date) %}
{% set end_dates = run_query(get_end_date) %}

 

 

마지막으로 결과값을 리스트로 반환하는 과정이다. 

{% if execute %}
    {% set start_dates_list = start_dates.columns[0].values() %}
    {% set end_dates_list = end_dates.columns[0].values() %}
{% else %} 
    {% set start_dates_list = [] %} {% set end_dates_list = [] %}
{% endif %}

 

위 순서대로 작성 후 실행하면 2023-12-06 기준

start_dates_list = ['2023-06-01', '2023-07-01', '2023-08-01' , '2023-09-01', '2023-10-01', '2023-11-01']

end_dates_list = ['2023-06-30', '2023-07-31', '2023-08-31', '2023-09-30', '2023-10-31', '2023-11-30']

 

다음과 같이 결과가 나오게 된다. 

728x90
반응형

'Data > DBT' 카테고리의 다른 글

[dbt] dbt에서 for loop 작성하기(jinja macro) | LIM  (0) 2023.11.28
[dbt] dbt 도입 이유와 필요성 | LIM  (0) 2023.08.13

댓글