• Stars
    star
    309
  • Rank 135,306 (Top 3 %)
  • Language
    Shell
  • Created about 7 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Redash study materials for beginners 📊

redash-hands-on

GitHub stars Redash version

前提

Redash ハンズオン資料は以下の環境を前提に動作確認をしています.

  • Docker For Mac
  • Docker For Windows

なお,Redash のバージョンごとにハンズオン資料を用意しています.最新バージョン以外を使う場合は,以下のタグから参照できます.

環境構築

Docker Compose で Redash (v10.1.0) 環境を構築します.任意のディレクトリに kakakakakku/redash-hands-on リポジトリをクローンしましょう.

$ git clone https://github.com/kakakakakku/redash-hands-on.git
$ cd redash-hands-on

公式の getredash/redash リポジトリに公開されている設定をベースに,テストデータを事前に投入した MySQL 5.7 コンテナを含めた docker-compose.yml を準備しました.

以下のコマンドを実行し,Docker Compose で Redash を起動しましょう.

初回はイメージをダウンロードするため,少し時間がかかる場合があります.

$ docker-compose run --rm server create_db
$ docker-compose up -d

起動すると,以下の URL で Redash にアクセスできるようになります.

最初に Admin User と Organization Name を登録しましょう.以下にサンプルを載せておきます.入力したら「Setup」をクリックします.

  • Admin User
  • General
    • Organization Name
      • hands-on

Redash にログインできました.

なお,Redash 環境の構築方法は Docker Compose 以外にもあります.興味のある方は,公式ドキュメントを読んでみましょう.

データソース設定

次に Redash から MySQL に接続できるように「データソース」を設定します.

ログイン後の画面にある「1. Connect a Data Source」のリンクをクリックします.

検索フォーム「Search...」に「MySQL」と入力し,1番目の「MySQL」をクリックします.「MySQL (Amazon RDS)」ではなく「MySQL」です.

以下の通りに設定したら「Create → Test Connection」とクリックし,接続確認をしましょう.Success と画面右下に表示されます.なお,今回はテストデータとして world データベースを使います.

項目
Name MySQL
Host mysql
Port 3306
User root
Password -
Database Name world

日付フォーマット設定

画面左下にある Settings アイコンをクリックし,「General」タブをクリックします.

日付フォーマットを以下の通りに変更します.変更後に「Save」ボタンをクリックします.

  • General
    • Date Format
      • YYYY-MM-DD

クエリを作ってみよう

ナビバーから「Create → New Query」とクリックし,以下のクエリを入力しましょう.

SELECT * FROM country;

入力したら「Execute」ボタンをクリックしてクエリを実行します.すると「国の一覧」が取得できます.

クエリの実行ができたら,画面左上の「New Query」という部分をクリックし,クエリタイトルを 「国の一覧」 に変更します.忘れずに画面右側にある「Save」ボタンをクリックしましょう.

さらに画面右上の「Publish」ボタンをクリックします.Redash ではクエリを公開することで,他のユーザーに共有することができます.

クエリの「お気に入り登録」と「タグ登録」をしよう

Redash ではクエリに対する「お気に入り登録」と「タグ登録」がサポートされています.

まず,クエリ名の左にある星アイコンをクリックし,お気に入り登録をしてみましょう.次に,クエリ名の右にある「Add tag」ボタンをクリックし,2個のタグ 「分析チーム」「マスタデータ」 を登録してみましょう.

クエリが増えると探しにくくなってしまうため,積極的に「お気に入り登録」と「タグ登録」を活用しましょう.

グラフを作ってみよう

先ほどと同様にナビバーから「Create → New Query」とクリックし,新規クエリを作成し,以下のクエリを入力しましょう.実行すると,登録されている国の件数が「239」であることが取得できます.この件数をグラフにしてみましょう.

SELECT COUNT(*) AS COUNT FROM country;

「Table」 タブの横に表示されている「+ Add Visualization」ボタンをクリックし,以下の通りに設定をします.「Save」ボタンをクリックすると,件数のグラフが表示されます.最新値など,特定の値をグラフにする場合は Counter が便利です.

  • Visualization Type
    • Counter
  • Visualization Name
    • 国の件数
  • Counter Value Column Name
    • COUNT

なお Counter には「目標値」を設定する機能もあります.今回のデータソースではデータ件数に変化がありませんが,サンプルとして,作ってみましょう.先ほどのクエリを以下の通りに変更し,実行します.

SELECT COUNT(*) AS COUNT, 500 AS kpi FROM country;

もう一度「+ Add Visualization」ボタンをクリックし,以下の通りに設定をします.先ほどとの違いは「Target Value Column Name」の設定を追加した点です.このようにクエリを活用することで,目標値と実績値を一緒に可視化することができます.

Counter に「目標値」を設定した場合,値が実績を下回る場合は赤く表示され,上回る場合は緑で表示されます.

  • Visualization Type
    • Counter
  • Visualization Name
    • 国の件数(+ 目標値)
  • Counter Value Column Name
    • COUNT
  • Target Value Column Name
    • kpi

クエリタイトルを 「国の件数」 とし,忘れずに保存と公開をしておきましょう.

円グラフと棒グラフを作ってみよう

クエリの作成はもう慣れたと思います.以下のクエリを作成し,実行しましょう.

国ごとに都市の件数を取得できます.中国とインドが特に多いことがわかります(あくまでサンプルデータです).

SELECT CountryCode, COUNT(*) AS COUNT
FROM city
GROUP BY CountryCode
ORDER BY COUNT DESC;

先ほどと同様に「+ Add Visualization」ボタンをクリックし,以下の通りに設定をすると,円グラフを作ることができます.

  • Visualization Type
    • Chart
  • Visualization Name
    • 都市の件数
  • General
    • Chart Type
      • Pie
    • X Column
      • CountryCode
    • Y Columns
      • COUNT

次に棒グラフも作ってみましょう.設定は以下の通りです.

  • Visualization Type
    • Chart
  • Visualization Name
    • 都市の件数(棒グラフ)
  • General
    • Chart Type
      • Bar
    • X Column
      • CountryCode
    • Y Columns
      • COUNT

しかし,棒グラフの場合,このままでは順序がバラバラです.「General」タブの隣にある「X Axis」タブをクリックし,軸の設定をする必要があります.

  • Scale
    • Category
  • Sort Values
    • OFF

これで棒グラフも作れました.

クエリタイトルを 「都市の件数」 とし,忘れずに保存と公開をしておきましょう.

ダッシュボードを作ってみよう

次にダッシュボードを作ってみましょう.

ナビバーから「Create → New Dashboard」とクリックし,ダッシュボードタイトルに 「国ダッシュボード」 と入力しましょう.

次にダッシュボードにグラフを配置していきます.

画面右下にあるメニューから「Add Widget」をクリックします.すると「Add Widget」というモーダルが表示されるため,以下の設定を繰り返し行いましょう.「Search a query by name」でクエリ名を検索し,Visualizaを選択します.レイアウトは自由に変更することができます.

  • 1回目
    • クエリ名
      • 国の一覧
    • Choose Visualization
      • Table
  • 2回目
    • クエリ名
      • 国の件数
    • Choose Visualization
      • 国の件数(+ 目標値)
  • 3回目
    • クエリ名
      • 都市の件数
    • Choose Visualization
      • 都市の件数
  • 4回目
    • クエリ名
      • 都市の件数
    • Choose Visualization
      • 都市の件数(棒グラフ)

もしクエリ名が表示されない場合は,そのクエリが公開されていないことが考えられます.

ナビバーの「Queries」で Unpublished 状態になっているクエリがあったら,そのクエリを公開し,再度ダッシュボードにグラフを追加してみましょう.

最後に画面右上にある「Done Editing」をクリックし,続けて「Publish」をクリックしましょう.クエリ同様にダッシュボードも他のユーザーに共有することができます.

ダッシュボードの「お気に入り登録」と「タグ登録」をしよう

Redash ではクエリだけではなく,ダッシュボードに対しても「お気に入り登録」と「タグ登録」がサポートされています.

まず,ダッシュボード名の左にある星アイコンをクリックし,お気に入り登録をしてみましょう.次に,ダッシュボード名の右にある「Add tag」ボタンをクリックし,タグ 「分析チーム」 を登録してみましょう.

パラメータ付きクエリを作ってみよう

次はクエリにパラメータを付けてみましょう.

Redash では,クエリに {{}} を含めると,その部分がパラメータになります.以下の新規クエリを作りましょう.

なお,クエリを入力した後にクエリの下にある2番目のアイコン「Format Query」をクリックすると,自動的にクエリをフォーマットすることができます.FROM が3行目にフォーマットされます.試してみましょう.

SELECT * FROM city
WHERE CountryCode = '{{CountryCode}}'
ORDER BY Population DESC;

すると,画面左下に「CountryCode」をパラメータとして入力するテキストエリアが表示されます.

ここに「JPN」を入力し,「Apply Changes」をクリックすると,日本の都市を人口の多い順に取得することができます.クエリタイトルを 「都市の検索(パラメータ選択)」 にして保存しておきましょう.

パラメータとして入力できる UI はテキストフィールド以外にもあります.名前の通り,例えば「Date」を選択すると,日付ピッカー(カレンダー)から日付を選択することができます.

  • Text
  • Number
  • Dropdown List
  • Query Based Dropdown List
  • Date
  • Date and Time
  • Date and Time (with seconds)
  • Date Range
  • Date and Time Range
  • Date and Time Range (with seconds)

今回は便利な「Dropdown List」を試しましょう.

パラメータの横にあるトグルをクリックし,「Type」を Dropdown List にします.さらに「Values」 に以下のリストを設定します.

JPN
USA
AUS

すると,選択肢から選べるようになるため,入力ミスを軽減できるようになります.「AUS」を選択し,「Apply Changes」をクリックしてみましょう.

パラメータ付きクエリ(複数値)を作ってみよう

パラメータを複数選択する機能もあります.以下の新規クエリを作りましょう.

SELECT *
FROM city
WHERE CountryCode IN ({{CountryCode}})
ORDER BY Population DESC;

パラメータの横にあるトグルをクリックし,「Type」を Dropdown List にします.さらに「Values」 に以下のリストを設定し,今回は「Allow multiple values」をチェックし,「Quotation」で「Single Quotation Mark」を選択します.

JPN
USA
AUS

すると,選択肢からパラメータを複数選べるようになります.今回は「JPN」と「AUS」を選択し,「Apply Changes」をクリックしてみましょう.

クエリタイトルを 「都市の検索(パラメータ複数選択)」 にして保存しておきましょう.

フィルタ機能を使ってみよう

Redash では,クエリのカラム名を カラム名::filter もしくは カラム名::multi-filter という命名規則にすると,クエリ結果をフィルタできるようになります.さっそく試してみましょう.

以下の新規クエリを作成し,実行すると,クエリ結果を「CountryCode」で自由にフィルタできるようになります.これが「フィルタ機能」です.

SELECT *, CountryCode AS 'CountryCode::filter'
FROM city
ORDER BY Population DESC;

次に「マルチフィルタ機能」を試しましょう.クエリを以下のように変更すると,今度は複数の「CountryCode」でフィルタできるようになります.なお,今回も「Format Query」を実行しておきましょう.

SELECT *, CountryCode AS 'CountryCode::multi-filter' FROM city ORDER BY Population DESC;

フィルタ機能は非常に便利です.詳しくは公式ドキュメントを読んでみましょう.

クエリタイトルを 「都市のフィルタ」 にして保存しておきましょう.

クエリスニペットを活用しよう

Redash では,よく使うクエリ(もしくはクエリの一部)をクエリスニペットとして登録する機能があります.

画面左下にある Settings アイコンをクリックし,「Query Snippets」タブをクリックします.

次に「New Query Snippet」ボタンをクリックすると登録画面が表示されます.以下の設定をしたら「Create」ボタンを押しましょう.

  • Trigger
    • _country_code
  • Description
    • 国コード検索
  • Snippet
    • WHERE CountryCode = '{{CountryCode}}'

新規クエリを作成し,以下のクエリを入力しましょう.クエリスニペットに登録した「Trigger」に部分一致すると候補として表示されるため _ と入力するとクエリスニペットを呼び出すことができます.

SELECT * FROM city _

クエリスニペットにプレースホルダを設定することもできます.

以下のように ${1:table} と設定すると,テーブル名のプレースホルダになります.是非試してみましょう.今回はクエリスニペットの動作確認が目的ですので,クエリは保存しなくて大丈夫です.

  • Trigger
    • _record_count
  • Description
    • レコード件数
  • Snippet
    • SELECT COUNT(*) FROM ${1:table};

クエリ結果に色を付けよう

Redash では,クエリ結果に HTML を埋め込むことができます.さっそく以下の新規クエリを作成してみましょう.

SELECT Code,
       Name,
       Population,
       CASE
           WHEN Population > 1000000000 THEN '<div class="bg-success p-30 text-center">AAA</div>'
           WHEN Population > 213000000 THEN '<div class="bg-warning p-20 text-center">BBB</div>'
           ELSE '<div class="bg-danger p-10 text-center">CCC</div>'
       END AS Color
FROM country
ORDER BY Population DESC;

「Population」の値によって「緑黄赤」と色を変えています.さらに縦サイズも変えています.このように活用すると,よりクエリ結果を便利に使うことができます.

クエリタイトルを 「国の一覧(色付き)」 にして保存しておきましょう.他にも利用可能なマークアップがあり,公式ドキュメントに載っています.

リンク集を作ろう

ダッシュボードに複数のグラフを配置する場合,関連する URL などを載せておくと便利な場合があります.

ダッシュボードにフリーテキストを入力する方法もありますが,Redash では,クエリ結果に HTML を埋め込むことができるため,簡単にリンクを作成することができます.

以下の新規クエリを作成し,クエリタイトルを 「リンク集」 にして保存しておきましょう.

SELECT '<a href="https://www.google.co.jp/" target="_blank">Google</a>' AS name
UNION
SELECT '<a href="https://www.yahoo.co.jp/" target="_blank">Yahoo!</a>'
UNION
SELECT '<a href="https://www.bing.com/" target="_blank">Bing</a>'
UNION
SELECT '<a href="https://kakakakakku.hatenablog.com/" target="_blank">kakakakakku blog</a>';

クエリを選択実行しよう

Redash には,クエリを選択実行する機能があります.

分析クエリを書くときにサブクエリや JOIN を活用する場面も多いと思います.サブクエリなどの部分クエリを選択して実行できると便利です.

以下の新規クエリを作成し,サブクエリを選択し,「Execute Selected」ボタンをクリックして実行してみましょう.

SELECT *
FROM country
WHERE Code =
    (SELECT Code
     FROM country
     WHERE Name = 'Japan')

クエリ結果をダウンロードしよう

Redash では,クエリ結果をダウンロードすることができます.現状サポートされているデータ形式は CSV と TSV と Excel です.

ナビバーの「Queries」をクリックし,既に作ったクエリ 「国の一覧」 を開きましょう.

画面下にある「縦点」ボタン(Edit Visualization ボタンの左にある)を押すと,以下のメニューが表示されます.クエリ結果をダウンロードしてみましょう.

  • Download as CSV File
  • Download as TSV File
  • Download as Excel File

クエリのフォーク機能を体験しよう

今回はハンズオンとして Redash を1人で使っていますが,一般的にはチームで使うことが多いと思います.

チームで使っていると 「メンバーが作ったクエリを少しカスタマイズしたい」 と感じる場面があります.そのために Redash には「フォーク機能」があります.

既に作ったクエリ 「国の一覧」 を開き,画面右上にあるプルダウンから「Fork」ボタンをクリックしましょう.すると,自動的に新規クエリが作成されます.クエリタイトルを 「Copy of (#1) 国の一覧」 から 「国の一覧(カスタマイズ)」 に変更しましょう.

クエリを自由に変更できるため,以下のクエリを入力し,実行しましょう.表示するカラムを「国コード」と「名前」と「人口」にカスタマイズできました.なお,今回も「Format Query」を実行しておきましょう.

SELECT Code, Name, Population FROM country;

アラートを設定しよう

Redash の機能は可視化だけではありません.特定の値が閾値を超えた場合にアラートを通知する機能があります.通知先は以下から選ぶことができます.

  • Email
  • Slack
  • Webhook
  • Mattermost
  • ChatWork
  • PagerDuty
  • Google Hangouts Chat

Slack に Webhook 経由でアラートを通知してみましょう.今回は,自由に使える Slack アカウントがある前提で進めます.

まず,Slack で Incoming WebHooks を作成します.そのままでも使えますが,「Customize Name」に Redash Alerts,「Customize Icon」に Redash のロゴ画像などを設定しておくと便利です.「Webhook URL」の値は次に使います.

画面左下にある Settings アイコンをクリックし,「Alert Destinations」タブにある「New Alert Destination」ボタンをクリックしましょう.次に「Slack」をクリックし,登録画面で以下を設定します.

  • Name
    • Slack
  • Slack Webhook URL
    • Webhook URL

アラートを設定する前に,もう少し準備をしておく必要があります.

既に作成をした「国の件数」クエリを開き「Edit Source」をクリックします。さらに画面左下にある「Refresh Schedule」を有効にする必要があります.「Never」をクリックしてから,今回は 1 minute にしましょう.

今回の例では,国の件数に変化はありませんが,定期的にクエリの実行をする機能です.アラートの設定をするクエリには「Refresh Schedule」の設定が必要です.

最後はアラートの設定です.ナビバーから「Create → New Alert」をクリックし,「New Alert」の画面を開きます.

登録画面で以下を設定します.

  • Query
    • 国の件数
  • Trigger when
    • COUNT > 200
  • When triggered, send notification
    • Each time alert is evaluated
  • 名前(画面1番上)
    • 国の件数が200件を超えた場合

「Create Alert」をクリックすると,右側に「Destinations」のメニューが表示されるため,「Slack」を「Add」します.

すると,Slack にアラートが通知されます.確認ができたら「Destinations」の「Slack」を消しておきましょう.

Redash ユーザーを追加/無効化しよう

次に,Redash 管理者として Redash ユーザーを追加/無効化する運用手順を試してみましょう.

画面左下にある Settings アイコンをクリックし,「Users」タブをクリックします.次に「New User」ボタンをクリックします.

以下の通りに,Redash ユーザーを2個登録します.「Email not sent!」というメッセージは問題ありません.登録が終わったら「Pending Invitations」をクリックし,ユーザーを確認しましょう.招待中の状態になっています.

メンバーの退職など,Redash ユーザーを削除する場合はどうしたら良いのでしょう?

Redash にはユーザーを削除する機能はありませんが,ユーザーを無効化する手順があります.今回は招待中のユーザーを無効化します.

「Pending Invitations」で「RedashUser2」をクリックし,「Disable User」ボタンを押してみましょう.ユーザーを無効化できました.無効化を解除する場合は「Enable User」ボタンをクリックします.

以上でハンズオンは終わりです!Redash を停止しておきましょう!お疲れさまでした!

$ docker-compose down

Happy querying :)

More Repositories

1

elasticsearch-hands-on

Elasticsearch study materials for beginners 🌵
Ruby
27
star
2

togoo

Super Simple CLI for TODO management 🐠
Go
22
star
3

docker-haproxy-nginx

HAProxy & nginx sample with Docker Compose
Shell
22
star
4

docker-hands-on

Docker study materials for beginners 🐳
Python
17
star
5

mysql-beginner-hands-on

MySQL study materials for beginners 🎹
8
star
6

mysql-world-database-dockerfiles

Dockerfiles for MySQL pre-loaded sample database "world database" 🐳
Dockerfile
6
star
7

lambda-lgtm

JavaScript
3
star
8

treasure-go-2017

Go
2
star
9

aws-application-workshop-using-localstack

LocalStack 実践入門 | AWS アプリケーション開発ワークショップ
Python
2
star
10

aws-regions

List AWS regions extremely simply 🌏
Go
2
star
11

playground

My playground for studying any languages, like the TIL (Today I Learned)
Python
2
star
12

hubot-aws-webinars

A Hubot script for AWS Webinar (Blackbelt) 🍔
CoffeeScript
1
star
13

docker-apex

Dockerized Apex 🐳
Dockerfile
1
star
14

killercoda-kakakakakku

Killercoda Courses
1
star
15

sinatra-swagger-sample

Ruby
1
star
16

elasticache-parameters-diff

CLI to get diff of Amazon ElastiCache Parameter Group 🐝
Go
1
star
17

docker-mkr

Dockerized mkr 🐟
1
star
18

docker-rubocop

Dockerized RuboCop 👮
Dockerfile
1
star
19

sandbox-nginx-mirror

Sandbox for nginx "ngx_http_mirror_module" module
Ruby
1
star
20

botty

A simple bot for me 🤖
CoffeeScript
1
star
21

awesome-vscode-cloudformation-settings

My Awesome "VS Code" Settings for CloudFormation
1
star
22

my-certifications

My Certification Histories 🏆
1
star
23

octy

Generate GitHub repository changelog
Ruby
1
star
24

blinker

Simple timer with blink(1)
Ruby
1
star
25

docker-cfn-lint

Dockerized CloudFormation Linter (cfn-lint) ✂️
Dockerfile
1
star
26

ruby-releases-history

Ruby Releases History generated using mdline 🗓
1
star