Cloud SQL とデータポータルを繋いでみた
マネージドDBの作成から、ダッシュボード完成まで
- 1. はじめに
- 2. この記事で作るもの
- 3. 手順① Cloud SQL インスタンスを作成する
- 4. 手順② Cloud Shell からデータを投入する
- 5. 手順③ データポータルから接続する
- 6. 手順④ ダッシュボードを作る
- 7. さいごに
1. はじめに
皆さんは、Cloud SQL とデータポータル(旧称:Looker Studio)をお使いになったことはありますか?
昨今、BIツールでデータを可視化している方は沢山いらっしゃると思いますが、データポータルには Cloud SQL 専用のコネクタが標準で用意されており、誰でも簡単にデータ可視化を実現することが可能です。
本記事では、Cloud SQL インスタンスの作成方法からデータポータルと繋ぐ手順、そして簡単なダッシュボード作りまでの手順を解説していきます。
その中で、気を付けるポイントや Tips などもご紹介していますので、是非、本記事を見ながら一緒に作成してみてください。
なお、本記事ではCloud SQL のパブリックIPを有効にする構成で進めます。
パブリックIPを有効にすると、「承認済みネットワーク」という設定項目が現れます。これは接続を許可する送信元IPアドレスを登録する仕組みですが、これを空のままデータポータルから接続します。
なぜ繋がるのか、その理由と注意点を別記事で検証しているので、気になる方はぜひそちらの記事もご覧ください。本記事の最後にリンクを掲載しています。
2. この記事で作るもの
架空の売上データを Cloud SQL に格納し、データポータルでダッシュボードを作成します。
図1 完成するダッシュボード
なお、本記事の内容は2026年9月時点のものです。
Cloud SQL とは
Cloud SQL は、データベースを代わりに運用してくれるサービスです。中で動かすエンジンは MySQL / PostgreSQL / SQL Server から選びます。
今回は MySQL 8.0 を選ぶので、できあがるのは「Cloud SQL に運用してもらっている MySQL 8.0」です。SQLの書き方や接続の作法は通常の MySQL と変わらず、バックアップやパッチ適用といった面倒な部分は Cloud SQL が引き受けてくれます。なお、今回作るのは検証用のシングルゾーン構成であり、高可用性構成を選んだ場合にはゾーン障害に備えた冗長化にも対応しています。
3. 手順① Cloud SQL インスタンスを作成する
Google Cloud コンソールで Cloud SQL → インスタンスを作成 → 新しいインスタンス に進み、下記で設定します。検証用なので、コストを最小に抑えた構成にします。
| 設定項目 | 値 | 理由 |
|---|---|---|
| データベースエンジン | MySQL | |
| Cloud SQL エディション | Enterprise | 検証には十分です |
| エディションのプリセット | サンドボックス | 検証には十分です |
| データベースのバージョン | MySQL 8.0 | |
| インスタンスID | demo-sales-db | |
| パスワード | 任意 | root ユーザーのパスワードになります |
| リージョン | asia-northeast1(東京) | 既定値のままだと米国リージョンになります |
| ゾーンの可用性 | シングルゾーン | 冗長構成はコストが上がります |
| マシンの構成 | 汎用 - 共有コア(1 vCPU, 0.614GB) | 検証には十分です |
| ストレージ | HDD / 10GB / 自動増量オフ | HDDが安価。自動増量をオフにして想定外の課金を防ぎます |
| パブリックIP | 有効 | |
| 承認済みネットワーク | 空のまま | 何も登録しません。 |
※上記は検証用の最小構成です。共有コアやシングルゾーンのインスタンスは Cloud SQL のSLA対象外となるため、本番環境で構築する際はマシンの構成やゾーンの可用性、ストレージの設定を検討する必要があります。
作成できたら、あとで使う「インスタンス接続名」を確認しておきます。Cloud Shell(コンソール右上の >_ アイコン)で次を実行してください。
gcloud sql instances describe demo-sales-db --format="value(connectionName)"
「プロジェクトID:リージョン:インスタンスID」のように、コロン区切りで3つの値が返ります。この文字列を手順③で使います。
4. 手順② Cloud Shell からデータを投入する
ここからは Cloud Shell 上で作業します。まずエディタでSQLファイルを作成します。
cloudshell edit seed.sql
以下を貼り付けて保存します。テーブル定義と、900件のサンプルデータを生成するSQLです。
CREATE DATABASE IF NOT EXISTS sales
CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE sales;
CREATE TABLE sales_orders (
order_id INT NOT NULL,
order_date DATE NOT NULL,
category VARCHAR(20) NOT NULL,
product_name VARCHAR(40) NOT NULL,
region VARCHAR(20) NOT NULL,
channel VARCHAR(10) NOT NULL,
quantity INT NOT NULL,
unit_price INT NOT NULL,
amount INT NOT NULL,
PRIMARY KEY (order_id)
);
INSERT INTO sales_orders
WITH RECURSIVE seq(n) AS (
SELECT 1 UNION ALL SELECT n + 1 FROM seq WHERE n < 900
),
raw AS (
SELECT
n AS order_id,
DATE_ADD(DATE '2025-08-20', INTERVAL ((n * 7919) MOD 365) DAY) AS order_date,
1 + (n * 31) MOD 10 AS p,
ELT(1 + (n * 17) MOD 8,
'北海道','東北','関東','中部','関西','中国','四国','九州・沖縄') AS region,
ELT(1 + (n * 13) MOD 3, 'オンライン','店舗','卸') AS channel,
1 + (n * 7) MOD 5 AS base_qty
FROM seq
)
SELECT
order_id, order_date,
ELT(p, 'キッチン','キッチン','インテリア','インテリア','ステーショナリー',
'ステーショナリー','ファッション雑貨','ファッション雑貨','アウトドア','アウトドア'),
ELT(p, 'ホーロー鍋','木製カッティングボード','間接照明','アロマディフューザー','万年筆',
'レザーノート','トートバッグ','シルバーピアス','ステンレスボトル','LEDランタン'),
region, channel, qty, price, qty * price
FROM (
SELECT raw.*,
base_qty + CASE WHEN MONTH(order_date) IN (11, 12) THEN 3 ELSE 0 END AS qty,
ELT(p, 8800,3200,12800,5400,15000,2800,6900,4200,3600,7400) AS price
FROM raw
) t;
【注意】データポータル側はカラム名にASCII文字しか使えない
Cloud SQL for MySQL コネクタの制限事項として、列見出し(フィールド名)には ASCII 文字のみを使用する必要があります。ASCII 以外の文字はサポートされていない為、日本語のカラム名は避けて、テーブル側は英字で定義します。グラフに表示される名前は、あとからデータポータル側で日本語に変更できます。
出典:データポータル ヘルプ「Google Cloud SQL for MySQL に接続する」
https://docs.cloud.google.com/data-studio/connect-to-google-cloud-sql-for-mysql?hl=ja
続いて、Cloud Shell からデータベースに接続して実行します。ここで使う gcloud sql connect は、実行するとCloud Shellの送信元IPアドレスを短時間だけ承認済みネットワークに追加してくれます。そのため手順①で承認済みネットワークを空にしていても、このコマンドからは接続できます。データポータルからの接続とは別の仕組みです。
gcloud sql connect demo-sales-db --user=root
source seed.sql
SELECT COUNT(*), MIN(order_date), MAX(order_date), FORMAT(SUM(amount), 0) FROM sales.sales_orders;
900件・約1年分のデータが入っていることを確認します。
図2 Cloud Shell でデータ投入を確認した画面
BIツール専用のユーザーを作る
データポータルに root の資格情報を渡すのは避けたいので、読み取り専用ユーザー(looker_ro)を作成します。同じ mysql> プロンプトで実行します。
CREATE USER 'looker_ro'@'%' IDENTIFIED BY '任意のパスワード';
GRANT SELECT ON sales.* TO 'looker_ro'@'%';
sales データベースに対する SELECT だけを許可しています。万一この資格情報が漏れても、被害は sales の読み取りに限定されます。データを書き換えられたり、他のデータベースを覗かれたりすることはありません。
5. 手順③ データポータルから接続する
Cloud SQL 側の準備が完了したので、いよいよデータポータルと接続していきます。
【事前確認】接続するアカウントにIAM権限が必要です
データポータルの公式ドキュメントには、接続を作成するには Cloud SQL for MySQL プロジェクトにおいて cloudsql.client 以上の権限が必要である旨が記載されています。この cloudsql.client は「Cloud SQL クライアント」ロール(roles/cloudsql.client)のことで、cloudsql.instances.connect と cloudsql.instances.get の2つの権限を含みます。接続情報が正しいのに接続できない場合は、IAM権限のほうも確認してください。
出典:データポータル ヘルプ「Google Cloud SQL for MySQL に接続する」
https://docs.cloud.google.com/data-studio/connect-to-google-cloud-sql-for-mysql?hl=ja
出典:Cloud SQL「Cloud SQL のロール」
https://docs.cloud.google.com/sql/docs/mysql/iam-roles?hl=ja
データポータル( https://datastudio.google.com/ )で 作成 → レポート と進み、データソースの選択画面で「Cloud SQL for MySQL」を選択します。
図3 コネクタ選択画面
【注意】「MySQL」で検索すると、別のコネクタが出てきます
データポータルには汎用の「MySQL」コネクタもあり、こちらはホスト名やIPアドレスを指定して繋ぐものです。本記事のように承認済みネットワークを空にした構成では、汎用コネクタを選ぶと接続できません。Cloud SQL に繋ぐときは「Cloud SQL for MySQL」を選んでください。
基本 タブで4項目を入力します。
| 項目 | 値 |
|---|---|
| インスタンス接続名 | 手順①で取得したインスタンス接続名 |
| データベース | sales |
| ユーザー名 | looker_ro |
| パスワード | looker_ro のパスワード |
図4 接続情報の入力画面
「認証」をクリックしてテーブル一覧が表示されれば成功です。sales_orders を選んで「追加」します。
6. 手順④ ダッシュボードを作る
フィールドを整える
データポータルでは、データの項目名を分かりやすい名前に変更することができます。リソース → 追加済みのデータソースの管理 → 編集 を開き、各フィールドのフィールド名を直接編集していきます。
今回はこのように日本語へ変換します。
| 元の名前 | 変更後 |
|---|---|
| order_date | 注文日 |
| category | カテゴリ |
| product_name | 商品名 |
| region | 地域 |
| channel | 販売チャネル |
| quantity | 数量 |
| unit_price | 単価 |
| amount | 売上金額 |
テーブル側のカラム名は英字のままで、データポータルの表示名だけを日本語にできます。
あわせて型も整えます。
| フィールド | タイプ |
|---|---|
| 注文日 | 日付 |
| 売上金額・単価 | 通貨 → JPY (¥) |
| 数量 | 数値 |
図5 フィールド編集画面
ディメンションと指標
データポータルでグラフを作るときは「ディメンション」と「指標」を指定します。
| 意味 | 一言で | 例 | |
|---|---|---|---|
| ディメンション | データを切る軸 | 「何ごとに見るか」 | 地域、カテゴリ、注文日 |
| 指標 | 集計される数値 | 「どれだけか」 | 売上金額、数量、件数 |
SQLでいえば、ディメンションは GROUP BY する列、指標は SUM() などで集計される値です。データポータルは、このSQLをGUIで組み立てているだけと考えると分かりやすくなります。
① タイトル
テキスト からテキストボックスを追加します。
| 項目 | 値 |
|---|---|
| 入力値 | 雑貨EC 売上ダッシュボード |
| フォントサイズ | 40 |
| 太字 | オン |
② スコアカード(売上合計)
グラフを追加 → スコアカード で追加します。
| タブ | 項目 | 値 |
|---|---|---|
| 設定 | 指標 | 売上金額(SUM) |
| スタイル | フォントサイズ | 36px |
【Tips】通貨型の小数点2桁を消す
売上金額を通貨型(JPY)にすると、スコアカードが ¥24,276,000.00 と小数点2桁付きで表示されます。設定タブからメインのフィールドのチップをクリックし、表示フォーマットを Number(0) に変更すれば整数表示になります。
③ 時系列グラフ(月次推移)
グラフを追加 → 時系列グラフ で追加します。
| タブ | 項目 | 値 |
|---|---|---|
| 設定 | ディメンション | 注文日(データ型を「年、月」に変更) |
| 設定 | 指標 | 売上金額 |
| スタイル | タイトルを表示/タイトル名/フォントサイズ | オン/月次の売上推移/18px |
| スタイル | 系列のタイプ/グラデーション/データラベルを表示 | 折れ線/オン/オン |
【Tips】粒度を「年、月」に変える
既定では日単位であり、900件のデータでは傾向が読めません。設定タブからディメンションX軸のチップをクリックし、データ型を「年、月」に変更すると月単位にまとまります。
図6 ディメンションのデータ型を変更する画面
④ 円グラフ(カテゴリ別構成)
グラフを追加 → 円グラフ で追加します。
| タブ | 項目 | 値 |
|---|---|---|
| 設定 | ディメンション | カテゴリ |
| 設定 | 指標 | 売上金額 |
| 設定 | 並べ替え | 売上金額・降順 |
| スタイル | タイトルを表示/タイトル名/フォントサイズ | オン/カテゴリ別の売上構成/18px |
⑤ 横棒グラフ(地域別ランキング)
グラフを追加 → 棒グラフ で追加します。
| タブ | 項目 | 値 |
|---|---|---|
| 設定 | ディメンション | 地域 |
| 設定 | 指標 | 売上金額 |
| 設定 | 並べ替え | 売上金額・降順 |
| スタイル | タイトルを表示/タイトル名/フォントサイズ | オン/地域別の売上ランキング/18px |
| スタイル | データラベルを表示 | オン |
⑥ 期間設定コントロール
コントロールを追加 → 期間設定 で追加します。
| タブ | 項目 | 値 |
|---|---|---|
| スタイル | フォントサイズ | 24px |
【Tips】期間設定コントロールが自動で「注文日」を使う理由
データソースには「デフォルトの日付範囲ディメンション」という設定があり、日付型のフィールドが1つだけの場合は、それが自動的に採用されます。日付型のフィールドが複数あるテーブルの場合、どの日付を基準にするかを明示する必要があります。
レイアウトを整える
配置の目安です。
- 上段:タイトル+スコアカード+期間設定コントロール
- 中段:時系列グラフ
- 下段:円グラフ+横棒グラフ
「テーマとレイアウト」から好みのデザインを選択すると、それだけで見た目が整います。今回は「星座」を選択し、完成です。
図7 完成したダッシュボード
7. さいごに
Cloud SQL のインスタンスを作成し、データを入れ、データポータルでダッシュボードとして出力するまでを一通り実施してきました。パイプラインもAPIも書かず、標準のコネクタだけで繋がります。
そして1点、冒頭で申し上げた通り、手順①にて「承認済みネットワーク」を空のままでCloud SQLインスタンスを作成し、データポータルから接続してデータを取得することに成功しました。
データポータルの公式ドキュメントには、ファイアウォールの内側にあるデータベースに接続してクエリを実行できるようにするには、142.251.74.0/23 などのアドレスへのアクセスを可能にする必要がある旨が記載されています。
出典:データポータル ヘルプ「Google Cloud SQL for MySQL に接続する」
https://docs.cloud.google.com/data-studio/connect-to-google-cloud-sql-for-mysql?hl=ja
今回のCloud SQLインスタンスはその条件に当てはまりますが、それでも登録せずに繋がりました。そしてそれは決して抜け穴などではなく、正しい形です。
なぜ繋がるのかを別記事で検証・解説しているので、気になった方はこちらもご覧ください。
【関連記事】Cloud SQL の承認済みネットワーク検証 ~コネクタ接続にIP登録は必要なのか~
本記事が、皆さんのCloud SQL、そしてデータポータル活用のきっかけになれば嬉しいです。Google Cloud の導入や活用でお困りのことがあれば、お気軽にお問い合わせください。
