■ はじめに
動的なdbt 実行時でのトラブルシュートを徐々に記録しておく
目次
【1】Airflow + dbt でエラー「Task exited with return code -9」 【2】エラー「'>' not supported between instances of 'Table' and 'int'」
【1】Airflow + dbt でエラー「Task exited with return code -9」
dbt を設定している Airflow からの以下のエラー内容が表示し SQLが実行されなかった
1)エラー内容
Task exited with return code -9 # dbt を設定している Airflow からのエラー # => エラーの意味は、後述「3)原因」を参照
2)エラーが発生するDBTコード
{% set table_count=run_query('SELECT * FROM demo_db.demo_schema.demo_table') %} {% if table_count!=None %} ...
3)原因
dbt で大量データを変数「table_count」に格納したため メモリ不足となり、Airflowから中断処理が走ったため
より抜粋 ~~~~~~ タスクによっては、Airflow ワーカーに割り当てられているメモリよりも 多くのメモリを使用する場合があります。 このような状況では、Negsignal.SIGKILL によって中断される可能性があります。 ... ------ {local_task_job.py:102} INFO - Task exited with return code Negsignal.SIGKIL ------ Negsignal.SIGKILL はコード -9 として表示される場合もあります。
4)解決案
* カウントなどを使ってメモリ消費しないようなコードに書き変えた
修正例
{% set table_count=run_query('SELECT COUNT(*) FROM demo_db.demo_schema.demo_table') %} {% if table_count.columns[0].values()[0]>0 %} ...
【2】エラー「'>' not supported between instances of 'Table' and 'int'」
カウントをdbtで実行した結果を変数に格納した際に 以下のエラーが発生する。
1)エラー内容
'>' not supported between instances of 'Table' and 'int'
2)エラーが発生するDBTコード
{% set table_count=run_query('SELECT COUNT(*) FROM demo_db.demo_schema.demo_table') %} {% if table_count>0 %} <!-- ★ここでエラー★ --> ...
3)原因
変数「table_count」は、件数(int)ではなく dbtのResponseオブジェクト(Table)として返却されているため
4)解決案
* 以下のサイトに解決例が提示されている
{% if table_count.columns[0].values()[0]>0 %} <!-- .columns[0].values()[0]を追加 -->
関連記事
dbt ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/12/16/152147
dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2024/09/11/003301
dbt 設定初期時でのトラブル
https://dk521123.hatenablog.com/entry/2023/06/19/000000
dbt を v1.8 に更新後エラー
https://dk521123.hatenablog.com/entry/2024/08/24/002455