【GAS】スプレッドシートからMySQLサーバーに接続してクエリデータを返す方法

デジタルマーケティング

マーケターの中には、「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を利用しているマーケターはぜひご活用ください!

タイトルとURLをコピーしました