GASでスプレッドシートからBigQueryへ自動転送
/ 初心者向け
Google Apps ScriptでスプレッドシートのデータをBigQueryに自動転送!
皆さん、こんにちは!Google Apps Script(GAS)専門ブロガーの[あなたの名前]です。
今回は、多くの方が日々利用しているであろう「Google スプレッドシート」のデータを、より強力な分析基盤である「Google BigQuery」へ自動で転送する方法について、初心者の方にも分かりやすく解説していきます。
なぜスプレッドシートからBigQueryへ?
スプレッドシートは手軽にデータを管理・共有できる非常に便利なツールですが、データ量が増えたり、複雑な分析を行いたい場面では、その限界を感じることもあります。一方、BigQueryは、大量のデータを高速に処理・分析できるデータウェアハウスです。
「スプレッドシートのデータをもっと効率的に分析したい」「定期的にスプレッドシートのデータを集計してBigQueryに蓄積したい」といったニーズに応えるために、GASを使った自動転送が非常に有効になります。
自動転送の全体像
今回実現するのは、以下の流れです。
1. トリガー設定: 特定の時間(例: 毎日午前3時)や、スプレッドシートの更新をトリガーにしてGASを実行します。
2. スプレッドシートからデータ取得: GASがスプレッドシートを開き、必要なシート・範囲のデータを読み込みます。
3. BigQueryへデータ挿入: 取得したデータをBigQueryの指定したテーブルに挿入します。
事前準備
始める前に、以下の準備が必要です。
- Google アカウント: GAS、スプレッドシート、BigQueryを利用するために必要です。
- Google スプレッドシート: 転送したいデータが含まれるスプレッドシート。
- Google BigQuery: データを格納するデータセットとテーブルを作成しておきます。
- データセットの作成: BigQueryのコンソールで、任意のデータセット名で作成します。
- テーブルの作成: データセット内に、スプレッドシートの列構成に合わせたスキーマでテーブルを作成します。
- 注意点: テーブルのスキーマは、GASから挿入するデータの型と一致させる必要があります。例えば、スプレッドシートの「日付」列はBigQueryでは
DATE型やTIMESTAMP型にするなど、適切な型を選びましょう。 - GASプロジェクトの作成: スプレッドシートを開き、「拡張機能」>「Apps Script」から新しいスクリプトエディタを開きます。
GASスクリプトの作成
では、実際にGASのコードを書いていきましょう。
1. スプレッドシートのデータを取得する関数
function getSpreadsheetData() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート名'); // データを取得したいシート名に変更
const range = sheet.getDataRange();
const values = range.getValues();
// ヘッダー行を削除する場合(BigQueryにヘッダーは不要なため)
values.shift();
return values;
}
この関数では、アクティブなスプレッドシートから指定したシートの全データを取得しています。values.shift();でヘッダー行を削除していますが、必要に応じて削除しない、または別の処理を行うように変更してください。
2. BigQueryへデータを挿入する関数
BigQueryへデータを挿入するには、BigQueryというサービスを使いますが、GASの標準機能には含まれていないため、BigQueryという名前のサービスを明示的に追加する必要があります。
1. GASエディタの左側メニューにある「+」アイコン(サービス)をクリックします。
2. 「BigQuery」を検索して選択し、「追加」をクリックします。
function insertDataToBigQuery() {
const projectId = 'YOUR_PROJECT_ID'; // ご自身のGCPプロジェクトIDに変更
const datasetId = 'YOUR_DATASET_ID'; // 作成したデータセットIDに変更
const tableId = 'YOUR_TABLE_ID'; // 作成したテーブルIDに変更
const data = getSpreadsheetData();
if (data.length === 0) {
Logger.log('転送するデータがありません。');
return;
}
try {
// BigQueryにデータを挿入
const result = BigQuery.Jobs.insert({
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
sourceData: {
data:
data.map(row => (
{ "values": row.map(val => String(val)) } // 全て文字列に変換して挿入
))
},
writeDisposition: 'WRITE_APPEND', // 追記モード('WRITE_TRUNCATE'で上書き)
skipLeadingRows: 0
}
}
});
Logger.log('BigQueryへのデータ挿入が完了しました。Job ID: %s', result.id);
} catch (e) {
Logger.log('BigQueryへのデータ挿入中にエラーが発生しました: %s', e.toString());
}
}
コードの解説:
projectId,datasetId,tableId: ご自身の環境に合わせて適切に設定してください。data.map(row => ({ "values": row.map(val => String(val)) })): BigQueryへの挿入形式に合わせるために、各行の各値を文字列に変換しています。BigQueryのスキーマに合わせて、必要であればここで型変換を行ってください。writeDisposition: 'WRITE_APPEND': 既存のデータに追記します。'WRITE_TRUNCATE'を指定すると、テーブルの内容がすべて削除され、新しいデータで上書きされます。
3. 全体をまとめる関数
function transferSpreadsheetToBigQuery() {
Logger.log('スプレッドシートからBigQueryへのデータ転送を開始します。');
insertDataToBigQuery();
Logger.log('スプレッドシートからBigQueryへのデータ転送が完了しました。');
}
トリガーの設定
このスクリプトを自動で実行するために、トリガーを設定します。GASエディタの左側メニューにある時計アイコン(トリガー)をクリックします。
1. 「トリガーを追加」ボタンをクリックします。
2. 実行する関数を選択: transferSpreadsheetToBigQuery を選択します。
3. 実行するデプロイを選択: Head を選択します。
4. イベントソースを選択: 「時間主導型」を選択します。
5. 時間間隔を選択: 「毎日」「午前3時~4時」など、任意のスケジュールを設定します。
6. 「保存」をクリックします。
初めてトリガーを作成する際には、Googleアカウントへの承認を求められますので、内容を確認して許可してください。
まとめ
いかがでしたでしょうか?
Google Apps Scriptを使えば、スプレッドシートのデータをBigQueryに自動で転送し、より高度なデータ分析への第一歩を踏み出すことができます。
今回の記事を参考に、ぜひご自身の業務やプロジェクトでGASを活用してみてください。もし不明な点があれば、コメント欄で気軽にご質問ください!
次回の記事もお楽しみに!
GAS自動化の導入相談
請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。