将数据从googlesheet推送到BigQuery with Appscript-如何设置服务帐户以加载数据。我不想将每个用户添加到 BigQuery?



我已经建立了一个谷歌表,将被复制80次为商店输入操作数据。这个用户生成的数据然后用Appscript通过相关工作表中的按钮推送给BigQuery。

脚本运行良好,但我不想让80个用户都访问BigQuery,我想使用一个服务帐户。作为一个新手,我不知道该怎么做。我有一些问题

  • 我是否在GCP IAM中设置此服务帐户?
  • 我是否在IAM中分配权限?如果我将服务帐户添加到具有编辑权限的GoogleSheet -我假设我需要修改我的appscript来使用服务帐户。否则我将得到的错误,按截图输入图像描述在这里
/**
* Loads the content of a Google Drive Spreadsheet into BigQuery

*/

function loadCogsPlayupHistory() {
// Enter BigQuery Details as variable.
var projectId = 'myproject';
// Dataset
var datasetId = 'my_Dataset';
// Table
var tableId = 'my table';

// WRITE_APPEND: If the table already exists, BigQuery appends the data to the table.
var writeDispositionSetting = 'WRITE_APPEND';

// The name of the sheet in the Google Spreadsheet to export to BigQuery:
var sheetName = 'src_cogs_playup_current';
Logger.log(sheetName)

var file = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('src_cogs_playup_current');
Logger.log(file)
// This represents ALL the data
var rows = file.getDataRange().getValues();
var rowsCSV = rows.join("n");
var blob = Utilities.newBlob(rowsCSV, "text/csv");
var data = blob.setContentType('application/octet-stream');
Logger.log(rowsCSV)

// Create the data upload job. 
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
skipLeadingRows: 1,
writeDisposition: writeDispositionSetting
}
}
};
Logger.log(job)

// send the job to BigQuery so it will run your query  
var runJob = BigQuery.Jobs.insert(job, projectId, data);
//Logger.log('row 61  '+ runJob.status);
var jobId = runJob.jobReference.jobId
Logger.log('jobId: ' + jobId);
Logger.log('row 61  '+ runJob.status);
Logger.log('FINISHED!');
// }
} 

我认为你可以通过使你自己....将执行apps脚本的帐户,所有者访问复制的Google表....

然后你要做的就是迭代每个复制的Google表格的代码完整的url

像这样的伪算法:

foreach(google sheets url)
{
execute_the_insert(google sheets url);
}

感谢代码示例…试试吧....我认为这是一个干净的代码

@Scott艾略特