Redash + docker-composeでPythonデータソースを使うやり方と外部ライブラリを追加する方法
どうも、くずきです。
Redash
+ docker-compose
でPython
データソースを扱う場合に、Python
のライブラリを追加する機会があったのでメモときます。
今回はid:kakku22が提供している、Redash
のハンズオンをベースに構築している。
Pythonデータソースの追加の仕方
ハンズオンを終え「よっしゃPython
データソースもつかったろ!!」って意気込み、やろうとしたらまさかのデータソースにPython
がなかった。
ぐぐってみると公式に
Data Sources Options and Requirements · Redash Help Center
For security, the python query runner is disabled by default. To enable, add redash.query_runner.python to the REDASH_ADDITIONAL_QUERY_RUNNERS environmental variable. If you used the bootstrap script, or one of the provided images, add to /opt/redash/.env file the line: export REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.python
セキュリティ上デフォルトオフにしてるから、使いたかったら.env
に追加してねとのことだった。
REDASH_ADDITIONAL_QUERY_RUNNERS: "redash.query_runner.python"
をdocker-compose.yml
に追加する。全部のせるとみづらいため一部だけのせとく。
server: image: redash/redash:2.0.1.b3080 command: server depends_on: - postgres - redis ports: - "5000:5000" environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_COOKIE_SECRET: veryverysecret REDASH_WEB_WORKERS: 4 # 追加 REDASH_ADDITIONAL_QUERY_RUNNERS: "redash.query_runner.python" worker: image: redash/redash:2.0.1.b3080 command: scheduler environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" # 追加 REDASH_ADDITIONAL_QUERY_RUNNERS: "redash.query_runner.python" QUEUES: "queries,scheduled_queries,celery" WORKERS_COUNT: 2 REDASH_HOST: "http://localhost"
すごいアホだったんだけど、自分はserver
の方だけにしか追加してなくて小一時間動かず悩んでました・・。
あとはハンズオン通りに立ち上げると普通にPython
データソースが使える。
$ docker-compose -f docker-compose.yml up
Pythonの外部ライブラリを追加する
基本的には画像にある、「Modules to import prior to running the script」の項目にPython
で使用したいライブラリ(os, sysなど)をカンマ区切りで追加すればスクリプトを書く時に使用できる。
ただし、外部のライブラリを追加する場合は上記の部分に追加しても使用できない。
調べてみると
You need to install pandas in the worker container, which actually runs the query.
worker
のコンテナにpip install
しろってことらしい。
docker-compose
では、command
に追加でスクリプトの実行などができるためそれを利用する。
server: image: redash/redash:2.0.1.b3080 command: server depends_on: - postgres - redis ports: - "5000:5000" environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_COOKIE_SECRET: veryverysecret REDASH_WEB_WORKERS: 4 REDASH_ADDITIONAL_QUERY_RUNNERS: "redash.query_runner.python" worker: image: redash/redash:2.0.1.b3080 # 追加 # pip installで追加したいライブラリを入れる。 command: > scheduler && basch -c ' pip install requests requests_oauthlib ' environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_ADDITIONAL_QUERY_RUNNERS: "redash.query_runner.python" QUEUES: "queries,scheduled_queries,celery" WORKERS_COUNT: 2 REDASH_HOST: "http://localhost"
設定後、起動したら他のライブラリと同じくカンマ区切りでモジュールの追加をしたら利用できる。
感想
Redash
というよりDocker
の方の知識が必要だったなぁ。
ハンズオンにプルリクしようかな。