LoginSignup
1
2

More than 1 year has passed since last update.

BigQuery + Googleスプレッドシート + GASでほぼノーコード開発でデータマート作成

Last updated at Posted at 2021-12-10

BigQueryの外部テーブル機能 + Googleスプレッドシートでデータマートを作成しましょう

↓BQの外部テーブル設定画面
image.png

スプシやExcelでデータ管理している会社は多いと思うので、スプシの外部テーブル化は有効です。
ZIPやCSV形式のファイルの場合、GASでスプレッドシートに出力するようにしてみます。

CSVを直接BQに取り込めば良いのではと思われるかもしれませんが、
データの整形、フォーマットをスプシの関数でできるので選択肢として有効です。スクラッチでPython等の整形プログラムを組まなくて良いのもメリットです。

Gドライブ上でzip解凍、CSVをスプシ出力するスクリプト
//zipファイルのフォルダ、ファイル名(例:yyyy-MM-dd_XXXX.zip)
var folder_id = "XXXXX";
var date = new Date();
var file_name = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy-MM-dd') + "_XXXX.zip"

//zipファイルの解凍先フォルダ、ファイル名
var unzip_folder_id = "XXXXX"
var unzip_file_name = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy-MM-dd') + "_XXXX.csv"

//出力するスプレッドシート、シート
var ss = SpreadsheetApp.openById('XXXXX');
var sheet = ss.getSheetByName('XXX');

//ZIP解凍
function unzip() {
 //解凍する対象のファイルを取得
 var zipblob = DriveApp.getFolderById(folder_id).getFilesByName(file_name).next();

 //ファイル解凍の準備
 var unzipfile = Utilities.unzip(zipblob);

 //解凍先フォルダにunzipしたファイル群を入れる
 var unzipfolder = DriveApp.getFolderById(unzip_folder_id)
 for (i = 0; i < unzipfile.length; i++) {
   unzipfolder.createFile(unzipfile[i].setName(unzip_file_name));
 }

//解凍したCSVファイルをパース
 var file = DriveApp.getFilesByName(unzip_file_name).next();
 var csv_data = Utilities.parseCsv(file.getBlob().getDataAsString('shift-jis'));

//シートを一旦クリアして、CSVデータを貼り付け
 sheet.clearContents();
 sheet.getRange(1, 1, csv_data.length, csv_data[0].length).setValues(csv_data);
}

CSVファイルの場合、ZIP解凍云々...がいらなくなるので、//解凍したCSVファイルをパース 以降を参考にしてください。

上記RPAで定期的にCSV DLするような業務フローと相性がいいです。
実際にRPAで業務データ取得、GASとスプシでデータマート作成を行なっていますが、メンテの手間が短縮できて良かったです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2