気流とPython初心者の方は、私に正しい質問をしても、とにかく尋ねてもわかりません。 CentOSシステムでエアフローを設定しました。リモートMySqlインスタンスをバックエンドとして使用します。私のコードでは、変数の数を取得する必要があり、コードは以下のようになります。気流DBセッションが気になる環境を提供していない
import os
from airflow.models import Variable
print(os.environ['SHELL'])
local_env['SHELL'] = Variable.get('SHELL')
そして、私は次のエラーました:それはVariable.get()メソッドが例外をスローで
Traceback (most recent call last): File "test2.py", line 5, in local_env['SHELL'] = Variable.get('SHELL') File "/com/work/airflowenv/lib/python2.7/site-packages/airflow/utils/db.py", line 53, in wrapper result = func(*args, **kwargs) File "/com/work/airflowenv/lib/python2.7/site-packages/airflow/models.py", line 3134, in get raise ValueError('Variable {} does not exist'.format(key)) ValueError: Variable SHELL does not exist
をこのコードでは、次のようになります:
@classmethod
@provide_session
def get(cls, key, default_var=None, deserialize_json=False, session=None):
obj = session.query(cls).filter(cls.key == key).first()
if obj is None:
if default_var is not None:
return default_var
else:
raise ValueError('Variable {} does not exist'.format(key))
ここで、session.queryはすでにNoneを返します。ここでセッションがどのように注入されているのかは分かりません。これらのセッション変数が設定されていない理由について説明します。リモートのMySQLインスタンスに何かを設定する必要がありますか?
私たちはローカルのmysqlインスタンスを持つ別のマシン上に別の同一のエアフローインスタンスを持っています。私が単独で提供したスクリプトを実行することは問題ありません。
[2016-09-27 01:54:48,341] {init.py:36} INFO - Using executor
LocalExecutor
/bin/bash /bin/bash
気流を設定するときに私が忘れたものは何ですか? ありがとう、
ちょっと、私は間違っていることを理解しました。気流バックエンドデータベースには、変数というテーブルが手動で入力する必要があります。私はこのテーブルをブートストラップステップとして前もって満たしていないので、それらを照会すると私に空のデータセットが得られます。 また、dbを再度初期化せずに変数を手動で入力できるAPIがあると便利です。 "可変"テーブルはエアフローバックエンドデータベースのデフォルトテーブルの1つで、データベースの初期化時に変数を割り当てることができるはずです。しかし、どの文書でもそれを見つけることはできませんでした。誰かが私にそれを見つける場所を指摘することができますか? –