BigQueryの外部テーブル機能 + Googleスプレッドシートでデータマートを作成しましょう
スプシや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とスプシでデータマート作成を行なっていますが、メンテの手間が短縮できて良かったです。