Airflow の Metastore をずっとデフォルトの SQLite のままにしてたけど MS SQL Server 2019 に変更したのでメモ。
まずは SQL Server の設定。
公式ドキュメントに書いてある手順を参考にする。
Set up a Database Backend — Airflow Documentation
CREATE DATABASE airflow; ALTER DATABASE airflow SET READ_COMMITTED_SNAPSHOT ON; CREATE LOGIN airflow_user WITH PASSWORD='airflow_pass123%'; USE airflow; CREATE USER airflow_user FROM LOGIN airflow_user; exec sp_addrolemember 'db_owner', 'airflow_user';
パスワードは適当に変える事。
あと公式だと最後の行は GRANT ALL PRIVILEGES を使ってるけど SSMS に「そんな構文ネーヨ」って怒られたので exec sp_addrolemember を使った。
続いて 関連ライブラリを入れる。
unixodbc-dev と msodbcsql17 などが必要なので、前に書いた記事のとおりにそれらをインストールする。
Ubuntu 20.04: Azure SQL Server コマンドラインツールをインストール
あと他にも build-esseintial も必要なので入れておく。
$ sudo apt install build-esseintial
それから pyodbc を入れる。
$ pip install pyodbc
続いて airflow.cfg を修正。
sql_alchemy_conn の値を変える。
# airflow.cfg # sql_alchemy_conn = sqlite:////home/orenomemo/airflow/airflow.db sql_alchemy_conn = mssql+pyodbc://airflow_user:airflow_pass123%%@localhost:1433/airflow?driver=ODBC+Driver+17+for+SQL+Server
上記のパスワードのところで「 % 」が 2 つ並んでるのはエスケープで、1 個だけだと configparser.InterpolationSyntaxError: ‘%’ must be followed by ‘%’ or ‘(‘, というエラーが出る。
ついでに、デフォルトの SequentialExecutor だと並列処理が出来ない云々のメッセージが管理 UI に表示されるので LocalExecutor に変える。
# airflow.cfg #executor = SequentialExecutor executor = LocalExecutor
ここまで設定したら airflow を初期化。
Admin ユーザーも作る。
airflow db init airflow users create \ --username admin \ --firstname hoge \ --lastname fuga \ --role Admin \ --email hoge@example.com
そして Airflow を起動すれば OK.
おまけ)
PostgreSQL でやろうとしたら、公式ドキュメントには psycopg2 を使えと書いてあるんだがインストールでコケる。
しかし psycopg2 を使わなくても動く。
つまりこうすればOK.
CREATE DATABASE airflow_db; CREATE USER airflow_user WITH PASSWORD 'airflow_123%'; GRANT ALL PRIVILEGES ON DATABASE airflow_db TO airflow_user;
設定はこうなる。
# airflow.cfg sql_alchemy_conn = postgresql://airflow_user:airflow_123%%@localhost/airflow_db