RedashでBigQueryのデータを可視化する


## **はじめに**

データ駆動型の意思決定は、現代ビジネスにおいて不可欠な要素となっています。このプロセスでは、膨大なデータから意味ある洞察を抽出し、それを基に戦略を練ることが求められます。そこで今回は、Google Cloud 上でRedashをセットアップし、BigQueryに保存されたデータを活用してダッシュボードを作成する方法について説明します。

## **1.Google Cloud Shellでの準備**

Google Cloud Platform (GCP) で作業を行う前に、Google Cloud Shellを開始します。これはブラウザベースのコマンドラインツールで、事前に構成された環境でGoogle Cloud resourcesを管理するために使用します。

- Google Cloud Console（[console.cloud.google.com](https://console.cloud.google.com/)）にログインします。
- 右上にある「アクティベート Cloud Shell」アイコン（>_の形）をクリックして、Cloud Shellを開始します。

### **必要なVPCとサブネットの作成**

Redashインスタンスを作成する前に、適切なネットワーキングリソースを設定する必要があります。以下のコマンドを使用して、VPCとサブネットを作成します。

```bash
gcloud compute networks create redash-vpc --subnet-mode=custom
↓
gcloud compute networks subnets create redash-subnet --network=redash-vpc --range=10.128.0.0/20 --region=asia-northeast1
```
![スクリーンショット 2024-05-10 13.51.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/88a90150-c006-7f62-8e49-271461b9c52e.png)


これらのコマンドにより、カスタムモードのVPC (**`redash_vpc`**) が作成され、指定したIP範囲 (**`10.128.0.0/20`**) のサブネット (**`redash_subnet`**) が東京リージョンに設定されます。

### **RedashのイメージをGCEアカウントに追加**

次に、RedashのイメージをGoogle Cloud StorageからGCEアカウントに追加します。

```bash
gcloud compute images create "redash-8-0-0" --source-uri gs://redash-images/redash.8.0.0-b32245-1.tar.gz
```

### **Redashサーバのインスタンスを起動**

VPCとサブネットが設定された後、以下のコマンドを使用してRedashサーバのインスタンスを作成します。この時点で、適切なタグ（**`redash-server`**）とファイアウォールルールを考慮に入れます。

```bash
gcloud compute instances create redash-instance --image redash-8-0-0 --machine-type n1-standard-1 --zone asia-northeast1-a --network=redash-vpc --subnet=redash-subnet --tags redash-server
```
![スクリーンショット 2024-05-10 13.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/6d5a9c6e-4e0f-59fc-1b34-dee44b542baf.png)


### **ファイアウォールルールの確認と設定**

Redashのデフォルトポートは`5000`ですが、セキュリティ上の理由からこのポートはデフォルトでは外部からアクセスできないように設定されています。以下のコマンドを使用して、ポート`5000`でのアクセスを許可するファイアウォールルールを作成します。

```bash
gcloud compute firewall-rules create allow-redash-access --network redash-vpc --allow tcp:5000 --target-tags redash-server
```

## **2.Redashのセットアップ**

次にRedashの初期設定を行います。新しいタブでブラウザを開き、`http://35.194.108.82:5000/`にアクセスします。
**`35.194.108.82`** は自身の外部IPアドレスを入力してください。
![スクリーンショット 2024-05-10 14.00.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/b94aaa07-aa82-a3b1-aaa7-abd343ad52a2.png)

初回アクセス時には、管理者アカウントの作成画面が表示されるので、指示に従ってアカウントを設定します。

## **3.BigQueryデータソースの接続**

### **サービスアカウントの作成**

RedashからBigQueryへの接続には、サービスアカウントが必要です。Google Cloud Platformでサービスアカウントを作成し、適切な権限を設定します。

1. Google Cloud Consoleにログインします。
2. 「IAM & Admin」→「Service Accounts」に移動します。
3. 「+ CREATE SERVICE ACCOUNT」をクリックし、サービスアカウントの名前を入力します。
4. 必要なロールをサービスアカウントに割り当てます。BigQueryに対して必要な権限は以下の通りです。今回は短時間での簡単な利用のため、BigQuery管理者のロールを割り当てます。
    - **`bigquery.jobs.create`**
    - **`bigquery.jobs.get`**
    - **`bigquery.jobs.update`**
    - **`bigquery.datasets.get`**
    - **`bigquery.tables.list`**
    - **`bigquery.tables.get`**
    - **`bigquery.tables.getData`**
![スクリーンショット 2024-05-10 14.02.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/9539ace5-3fde-9e24-f656-44e6c69428fa.png)
        
5. 「続行」をクリックしてサービスアカウントを作成します。
6. サービスアカウントの詳細ページから「Keys」セクションに移動し、「Add Key」→「Create new key」を選択します。
7. キーのタイプとして「JSON」を選択し、「CREATE」をクリックして、キーファイルをダウンロードします。このファイルはRedashでの認証に使用します。
    
![スクリーンショット 2024-05-10 14.03.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/bb099ef6-412c-ee18-070e-df123e3ac1c0.png)
    

### BigQueryテーブルの作成

今回は、簡易的に可視化を行いたいため、以下のSQLで架空のトランザクションデータを作成していきます。

BigQueryから「データセット作成」をクリック、任意のデータセットを作成し、SQLクエリを作成から以下のSQLを実行します。

```sql
CREATE TABLE `プロジェクトID.データセット名.test_transactions` (
    TransactionID STRING,
    TransactionDate DATE,
    CustomerName STRING,
    ProductName STRING,
    Quantity INT64,
    UnitPrice NUMERIC,
    TotalPrice NUMERIC,
    PaymentMethod STRING
);

INSERT INTO `プロジェクトID.データセット名.test_transactions` (TransactionID, TransactionDate, CustomerName, ProductName, Quantity, UnitPrice, TotalPrice, PaymentMethod) VALUES
    ('T0005', '2023-11-03', '鈴木一郎', 'ゲームコンソール', 1, 30000.0, 30000.0, 'PayPay'),
    ('T0006', '2023-11-03', '高橋真理子', 'キッチンブレンダー', 1, 8000.0, 8000.0, '現金'),
    ('T0003', '2023-11-02', '佐藤健', 'スマートフォン', 1, 60000.0, 60000.0, '代金引換'),
    ('T0009', '2023-11-05', '小林幸子', 'カメラ', 1, 50000.0, 50000.0, '銀行振込'),
    ('T0001', '2023-11-01', '田中太郎', 'ノートパソコン', 1, 80000.0, 80000.0, 'クレジットカード'),
    ('T0007', '2023-11-04', '渡辺梨花', 'スマートウォッチ', 1, 25000.0, 25000.0, 'クレジットカード'),
    ('T0004', '2023-11-02', '伊藤翼', '電子書籍リーダー', 1, 20000.0, 20000.0, 'クレジットカード'),
    ('T0010', '2023-11-05', '吉田拓也', 'Bluetoothスピーカー', 1, 15000.0, 15000.0, 'クレジットカード'),
    ('T0002', '2023-11-01', '山田花子', 'ヘッドフォン', 2, 15000.0, 30000.0, '銀行振込'),
    ('T0008', '2023-11-04', '中村蓮', 'ワイヤレスイヤフォン', 2, 10000.0, 20000.0, 'コンビニ払い');
```

### **Redashでのデータソース設定**

ダウンロードしたJSONキーファイルを使用して、RedashにBigQueryデータソースを設定します。

1. Redashダッシュボードの「Connect a Data Source」セクションで「+ New Data Source」をクリックします。
![スクリーンショット 2024-05-10 14.05.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/fc3f2695-bab5-6a57-01c5-4d652f340e78.png)

2. 「BigQuery」を選択し、表示されるフォームに必要な情報を入力します。
![スクリーンショット 2024-05-10 14.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/8aa256c6-9c2b-ee53-2aa1-26e37c447bdb.png)

3. 「JSON Key File」フィールドに、ダウンロードしたキーファイルの内容を貼り付けます。
4. 設定を完了し、「Save」をクリックしてデータソースを保存します。

## **クエリの作成とダッシュボードの設定**

Redashを使用してデータを可視化するには、まずクエリを作成し、それをダッシュボードに組み込む必要があります。以下は、`test_transactions`テーブルからデータを抽出して分析するための手順です。

### **Redashでのクエリ作成**

1. 左側のサイドバーから「Create」を選択し、「Query」ボタンをクリックします。
2. 「Data Source」のドロップダウンリストから、設定したBigQueryデータソースを選択します。

### **日別売上合計のクエリ**

1. 日々の売上を把握するためのクエリを以下のように作成します。

```sql
SELECT TransactionDate, SUM(TotalPrice) AS TotalSales
FROM `プロジェクトID.データセット名.test_transactions`
GROUP BY TransactionDate
ORDER BY TransactionDate
```
![スクリーンショット 2024-05-10 14.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/3a7b5d6b-f44b-1a56-20ce-05277e4a292c.png)
2. クエリを入力したら、「Execute」ボタンをクリックしてクエリを実行します。
3. 結果が表示されたら、「Save」をクリックして、クエリに名前を付けて保存します。

## **3.グラフでの可視化**
クエリ実行後の画面には、クエリ結果とともに「New Visualization」ボタンが表示されます。このボタンをクリックします。「New Visualization」をクリックすると、視覚化の種類を選択するための画面が開きます。

### **Visualization タブでの操作**

- 視覚化の種類を選択できるドロップダウンメニューから「Line Chart」などのグラフタイプを選びます。
- X軸とY軸に使用するデータカラムを指定します。例えば、X軸に「TransactionDate」、Y軸に「TotalSales」を設定します。
- その他のオプション（グラフのタイトル、色設定、グリッド線の表示など）をカスタマイズします。
- 設定が完了したら、「Save」をクリックして視覚化を保存します。
![スクリーンショット 2024-05-10 14.09.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/62fe43cc-aaa0-6ef3-ed9e-d2f9721caa1c.png)

**ダッシュボードの作成**: 左側のサイドバーから「Create」を選択し、「Dashboard」から「New Dashboard」をクリックします。
![スクリーンショット 2024-05-10 14.10.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/a30621bd-92dc-634c-2d81-15225f07cfd0.png)

**ダッシュボードへのクエリの追加**: 新しいダッシュボードに「Add Widget」をクリックし、保存したクエリを選択します。

![スクリーンショット 2024-05-10 14.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/2166fc82-3af6-5418-ccc6-3213a70dfcf9.png)


**ダッシュボードに追加**: 「Add to Dashboard」をクリックして、折れ線グラフをダッシュボードに追加します。このように選択した「Visualization」を追加していくことで、BigQueryから取得したデータを可視化することができます。

![スクリーンショット 2024-05-10 14.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/5baa6492-a4c3-590e-202e-fc521b0b2fca.png)

## まとめ

今回は、Redashを使用してBigQueryデータをクエリし、視覚化する一連のプロセスを紹介しました。データを効果的に視覚化することで、ビジネス上の決定を迅速かつ正確に行うための支援が可能になります。