Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. GASでSpreadSheetのデータをBigQueryに入れてみた

GASでSpreadSheetのデータをBigQueryに入れてみた

投稿者:上野 一樹

GASでSpreadSheetのデータをBigQueryに入れてみた

日本情報通信の上野です。
今回はスプレッドシートの表をBigQueryに取り込むGASを作成していきたいと思います。
GASはスプレッドシートの拡張機能App Scriptから作成します。

スクリーンショット (23).png

コードの作成

まずは、エディタコード.gsを開いてmain関数を作成していきます。

スクリーンショット (21).png

main関数では、以下のようにとりあえず接続するGCPのプロジェクトIDとBigQueryのデータセット名を指定します。
今回は編集したシートをリアルタイムにGASでBigQueryに取り込むので、対象のシートはアクティブスプレッドシートのアクティブシートです。
BigQueryのテーブル名はシート名と同じになるようにしました。

スクリーンショット (37).png

次に、テーブルとスキーマの定義を行います。
今回は、「id」、「name」、「memo」の3カラムを持つ表をBigQueryに取り込んでいきます。
シート名と同名のテーブルが指定したBigQueryのデータセットにすでに存在していた場合は、すでにあるテーブルを削除してから新しくテーブルを作成しなおすことでテーブルの内容を更新します。

スクリーンショット (38).png

以下のソースコードでは、取り込む範囲を決めてconvCsv関数を呼び出し、表を読み込んでいます。
また、表の1行目はカラム名が入っているので読み込みをスキップさせます。
最後にBigQuery.Jobs.insertでBigQueryのテーブルにデータを挿入しています。

スクリーンショット (39).png

以下のソースコードはスプレッドシートの表を取り込んでCSVに変換する関数です。
上記のmain関数から呼び出されて実行されます。

スクリーンショット (40).png

APIの追加

コードを作成し終えると、次にBigQueryのAPIを追加しなければなりません。
APIの追加の方法は、サービスからBigQuery APIを選択し、追加を押下します。

スクリーンショット (20).png

トリガーの設定

作成したGASを自動で実行するには、トリガートリガーを追加から、トリガーの設定を行う必要があります。
実行する関数はmainを選択し、イベントのソースはスプレッドシートから、イベントの種類は編集時を選択して保存します。
最後にデプロイボタンを押下すれば、App Sprict側の設定は終了です。

スクリーンショット (25).png

現状トリガーの設定のイベントの種類は、起動時編集時変更時フォーム送信時の4つがあります。
とくに編集時変更時の違いは分かりにくいと思います。
スプレッドシート編集時のトリガーは、スプレッドシートでセルの値を変更したり、列や行を追加・削除した場合にスクリプトが実行されます。
スプレッドシート変更時のトリガーは、セルが変更された場合にGASスクリプトが実行されます。
編集時では対象操作であった、列や行の削除・追加といった操作ではトリガー実行が起動しません。
そのため、セルを変更した時だけGASスクリプトを実行したい場合に、編集時ではなく変更時イベントトリガーを利用します。

動作確認

GASの設定は完了したので、実際にBigQueryに読み込む表をスプレッドシートに作成していきます。

スクリーンショット (32).png

BigQueryの指定したデータセットを確認すると、スプレッドシートに作成した表がテーブルとして読み込まれていることがわかります。

スクリーンショット (33).png

更新ボタンの作成(おまけ)

今回作成したGASでは、スプレッドシートの表のセルを1つ更新するたびにBigQueryのテーブルに更新をかけます。
しかし、表に大量のデータを追加したり複数のセルを更新する場合、どこかのセルが更新されるたびにBigQueryのテーブルに更新をかけると非常に効率が悪いです。
なので、表をまとめて更新した後に一括でBigQueryのテーブルに更新をかけるようにするために更新ボタンを作っていきたいと思います。
まずは、先ほど作成したGASのトリガーを削除します。
次に、表の横あたりに更新ボタンを追加します。
今回は、挿入図形描画から円の図形とテキストボックスを用いて更新ボタンを作成しました。

スクリーンショット (41).png

作成した図形に対してスクリプトを割り当てでmain関数を選択することで、図形をクリックするとmain関数が実行されるようになります。
これで、更新ボタンの作成は終了です。

スクリーンショット (43).png

作成したボタンを押してみると、「スクリプトを実行しています」と表示されGASが実行されました。

スクリーンショット (44).png

まとめ

今回はスプレッドシートの表をBigQueryに取り込むGASを作成していきました。
スプレッドシートで管理しているデータをBigQueryに取り込んでデータ分析をしたい場合は、ぜひとも試してみてください。

ページのトップへ