マーケターの中には、「MySQL」をデータベースとして使っている方も多いのではないでしょうか?
同じSQLデータベースのGoogle BigQueryでは簡単にスプレッドシートと接続できるのですが、MySQLの場合は、クエリをたたいて、csvでエクスポートして、スプレッドシートにインポートして・・・と、データ集計の作業が煩雑になりがちです。
MySQLをお使いの場合でも、GASを活用することでスプレッドシートからMySQLサーバーに接続して、クエリ結果を直接スプレッドシートに返すことができます。
実際のGASコード例と、MySQLからクエリデータを返す方法を解説します。
日々手間になりがちな貼り付け作業から解放され、トリガーを設定することでほぼリアルタイムでスプレッドシート上でデータを参照することが可能です!
スプレッドシートに直接MySQLデータを返す手順
データベース接続に必要な情報を準備する
スプレッドシートからMySQLサーバーに接続するために、以下5つの情報が必要です。
まずは以下の情報をそれぞれメモしておいてください。
- ホスト名
- ポート番号
- ユーザー名
- パスワード
- データベース名
わからない場合は、社内のエンジニアなどデータベース構築の担当者に確認してみましょう。
GASコードに必要情報を記述する
以下のGASコード内の「xxx」にそれぞれ必要な情報を記述していきます。
function getDataFromSQLdb() {
const sheetId = 'xxx'; // シートIDを指定
const sheetName = 'xxx'; // シート名を指定
const address = 'xxx:xxx'; // ホスト名:ポート番号
const user = 'xxx'; // ユーザー名
const password = 'xxx'; // パスワード
const db = 'xxx'; // データベース名
const dbUrl = 'jdbc:mysql://' + address + '/' + db;
const conn = Jdbc.getConnection(dbUrl, user, password);
// 以下にクエリを記述する
let query = `
select
id
,purchase_date
from
purchase
order by
1,2
`;
let stmt = conn.createStatement();
let results = stmt.executeQuery(query);
let metaData = results.getMetaData();
let numCols = metaData.getColumnCount();
let sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);
sheet.clear();
let row = [];
for (let col = 1; col <= numCols; col++) {
row.push(metaData.getColumnName(col));
}
sheet.appendRow(row);
while (results.next()) {
row = [];
for (let col = 1; col <= numCols; col++) {
row.push(results.getString(col));
}
sheet.appendRow(row);
}
results.close();
stmt.close();
conn.close();
}
まず、スプレッドシートの「シートID」と「シート名」を記述します。
「シートID」は、スプレッドシートURLの以下「xxx」の部分です。
https://docs.google.com/spreadsheets/d/xxx/edit#gid=0
「シート名」は、インポート元・貼り付け先それぞれのシートの名前です。
次に、MySQLサーバーへの接続に必要な情報をそれぞれ記述していきます。
- ホスト名
- ポート番号
- ユーザー名
- パスワード
- データベース名
「ホスト名」と「ポート番号」は、 ‘ホスト名:ポート番号’ のように「:」でつないで記述します。
必要な情報が入力できたら、 let query = “; の「“(バッククォート)」の間に実際のSQLクエリを記述します。
※上記のGASコードでは、サンプルのクエリを記述してあります。
関数を実行する
クエリの記述まで完了したら、関数「getDataFromSQLdb()」を実行します。
指定されたスプレッドシートの該当シートにクエリデータが返ってきます。
トリガーを設定すればリアルタイムでデータをスプレッドシートに返すことが可能です。
まとめ
MySQLの場合でも、スプレッドシートから直接サーバーに接続して、クエリデータを返すことができました!
ご紹介したコードを活用することで、csvのエクスポートや貼り付け作業を完全になくすことができ、リアルタイムでデータをスプレッドシートに展開できます。
Google BigQueryと似たような使い方を実現できますので、MySQLを利用しているマーケターはぜひご活用ください!