LoginSignup
0
0

More than 3 years have passed since last update.

Redashでクエリを投げてみる

Posted at

はじめに

先日Redashをローカル環境にインストールしたので、今回はデータベースにデータを入れて、Redashでクエリを投げるところまでを実施します。
Redashのインストールについてはこちらをご覧ください。

環境

MacBookAirを使用しています。OSなどは次の通りです。

$sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G14033

$python --version
Python 3.7.3

$docker --version
Docker version 20.10.0, build 7287ab3

Redashを起動した状態を想定しています。

$docker container ls
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                            NAMES
caa3348d587a   redash_scheduler      "/app/bin/docker-ent…"   43 minutes ago   Up 42 minutes   5000/tcp                                         redash_scheduler_1
00e34fe2ef97   redash_worker         "/app/bin/docker-ent…"   43 minutes ago   Up 42 minutes   5000/tcp                                         redash_worker_1
0f60c28cecbd   redash_server         "/app/bin/docker-ent…"   43 minutes ago   Up 43 minutes   0.0.0.0:5000->5000/tcp, 0.0.0.0:5678->5678/tcp   redash_server_1
518d2c7aad0d   postgres:9.5-alpine   "docker-entrypoint.s…"   43 minutes ago   Up 43 minutes   0.0.0.0:15432->5432/tcp                          redash_postgres_1
c1e85b4cfa69   redis:3-alpine        "docker-entrypoint.s…"   27 hours ago     Up 27 hours     6379/tcp                                         redash_redis_1
d32426258263   djfarrelly/maildev    "bin/maildev --web 8…"   27 hours ago     Up 27 hours     25/tcp, 0.0.0.0:1080->80/tcp                     redash_email_1

データ準備

データは簡単に手に入るscikit-learnのボストンデータセットを使用します。
ボストンの住宅価格のデータで、506行14列です。
データ項目についてはこちらに詳しく書かれているので、説明は省きます。

まずはこのデータをscikit-learnから取ってきて、csvファイルにダンプしようと思います。
そのためにpythonのコードを実行します。

data.py
import pandas as pd
import sklearn.datasets as skd

data = skd.load_boston()
df_X = pd.DataFrame(data.data, columns=data.feature_names)
df_y = pd.DataFrame(data.target, columns=['y'])
df = pd.concat([df_X, df_y], axis=1)
df.to_csv('data.csv', index=True, index_label='ID')

python data.pyで実行すると、data.csvが作成されます。
これをこの後、DBに投入します。

データベースの準備

今回はデータベースはRedashを起動するときに作成されるPostgreSQLを使用します。
先ほどのcsvファイルや、sqlファイルをdocker-composeで作成されたコンテナ内に持っていきたいので、ローカルのフォルダをマウントしておきます。

docker-composeの設定を少し変えたいので、以下のファイルについて、61行目、62行目を追加しました。

docker-compose.yml
(中略)
50   postgres:
 51     image: postgres:9.5-alpine
 52     # The following turns the DB into less durable, but gains significant performance improvements for the tests run (x3
 53     # improvement on my personal machine). We should consider moving this into a dedicated Docker Compose configuration for
 54     # tests.
 55     ports:
 56       - "15432:5432"
 57     command: "postgres -c fsync=off -c full_page_writes=off -c synchronous_commit=OFF"
 58     restart: unless-stopped
 59     environment:
 60       POSTGRES_HOST_AUTH_METHOD: "trust"
 61     volumes:
 62       - ../data:/tmp/data
(中略)

docker-compose builddocker-compose up -dを実行して、設定を反映させます。

データベース作成とテーブル作成用のsqlファイルを作成しておきます。

data/setup_db.sql

DROP DATABASE IF EXISTS boston_datasets;

CREATE DATABASE boston_datasets;
setup_tbl.sql
CREATE TABLE realestate
(
ID INTEGER,
CRIM NUMERIC,
ZN NUMERIC,
INDUS NUMERIC,
CHAS NUMERIC,
NOX NUMERIC,
RM NUMERIC,
AGE NUMERIC,
DIS NUMERIC,
RAD NUMERIC,
TAX NUMERIC,
PTRATIO NUMERIC,
B NUMERIC,
LSTAT NUMERIC,
y NUMERIC
);

上2つのsqlファイルを実行。

$docker-compose run --rm postgres psql -f /tmp/data/setup_db.sql -h postgres -U postgres 
Creating redash_postgres_run ... done
DROP DATABASE
CREATE DATABASE
$cat  ../data/setup_db.sql 
DROP DATABASE IF EXISTS boston_datasets;

CREATE DATABASE boston_datasets;

(base) DyamaguchiMBA:redash $docker-compose run --rm postgres psql -f /tmp/data/setup_tbl.sql -h postgres -U postgres -d boston_datasets
Creating redash_postgres_run ... done
CREATE TABLE

コンテナに入って確認。

$docker exec -it redash_postgres_1 bash
bash-5.0# psql -U postgres -h postgres -d boston_datasets
psql (9.5.24)
Type "help" for help.

boston_datasets=# \dt
           List of relations
 Schema |    Name    | Type  |  Owner   
--------+------------+-------+----------
 public | realestate | table | postgres
(1 row)

boston_datasets=# \q
bash-5.0# exit

確かにrealestateテーブルが作成できている。
このテーブルに対して、csvファイルのデータを挿入。

$docker-compose run --rm postgres psql -h postgres -U postgres -d boston_datasets -c "copy realestate from  '/tmp/data/data.csv' encoding 'utf8' csv header delimiter ','"
Creating redash_postgres_run ... done
COPY 506

ここまででデータベース、テーブル、データがPostgreSQLに入ったことになる。

Redashの設定

次にRedashからPostgreSQLへの接続について確認していく。
基本的に、下図のように設定すればいいはず。

setting.png

ここでPasswordは空欄でOK。
念のため、Test Connectionを実施して、正しく接続を確認した。

クエリ発行

画面左の「Queries」からデータソースを選択すると、先ほど作ったDBやテーブルが見える。
SQLとしてselect * from realestateを実行してみると、下図のように結果が返ってきました。

newquery.png

まとめ

データの準備からクエリ発行まで実施しました。
次はいよいよ可視化していきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0