我们正在Google的电子表格中开发POC。
有一些配置,但简而言之,它从BigQuery下载数据并将其重定向到预测。
我们的Bigquery表有超过41Mb,Spreadsheets不允许/不支持。
我们考虑过来自Bigquery的5Mb数据的下载包。 尽管Predicition API为insert大量数据提供了方法,但update方法只允许上传一行/实例。
有没有办法将Bigquery数据直接重定向到预测?
涉及的主要三个功能是:
/**
* this function downloads data from Bigquery
* for a given table, it receives the columns supposed to be downloaded
*
* @params
* - modelName // the new prediction model name
* - columns // an array of columns
* - table // the table name
* - dataset // the dataset name
*/
function createPrediction(modelName, columns, table, dataset) {
try {
var rows = simpleQuery(columns, table, dataset);
var rowsL = rows.length;
var trainingL = parseInt(0.9 * rowsL, 10);
var training_instances = [];
for (var i = 0; i < trainingL; i++) {
training_instances.push({'output': rows[i].f[0].v, 'csvInstance': rows[i].f[1].v});
}
var resource = {'id': modelName, 'trainingInstances': training_instances};
var insert_reply = Prediction.Trainedmodels.insert(resource, c_projectId);
c_modelName = modelName;
Browser.msgBox('Insert reply:' + insert_reply, Browser.Buttons.OK);
} catch (err) {
Browser.msgBox('ERROR: ' + err, Browser.Buttons.OK);
}
}
/**
* this function should receive a dataset name, a table name and some columns' names
* it is supposed to return the "SELECT [COLUMNS] FROM [DATASET.TABLE]"
*
* @params:
* -
*/
function simpleQuery(columns, table, dataset, projectId) {
projectId = projectId || c_projectId;
return getQuery("SELECT " + columns.join(",") + " FROM [" + dataset + "." + table + "]", projectId);
}
/**
* this function should return the result for a given query
*
* @params:
* - query // the query to be evaluated
* - projectId // the googles's project id
*/
function getQuery(query, projectId) {
var request = {
query: query
};
var queryResults = BigQuery.Jobs.query(request, projectId);
var jobId = queryResults.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
return rows;
}
&#13;
问候。
答案 0 :(得分:1)
此时BigQuery与Prediction Api之间没有直接联系,但两者都与Google云端存储集成。
对于培训新模型,您可以将BigQuery数据作为CSV文件导出到GCS,然后将该文件插入到预测Api中。
为了从BigQuery数据更新现有模型,您将不得不做更多的工作,因为Prediction api支持对现有模型的单行插入,但BigQuery仅提供批量导出到GCS或通过bigquery.tabledata.list
进行远程读取。您需要进行一些处理以从BigQuery中提取数据,并将其一次一行插入到预测模型中。
使用Google Apps脚本从Google电子表格中访问BigQuery会打开很多简单的集成选项,但也会受到Apps脚本强加的处理限制,例如最大文件上传大小......您可能会发现其他框架更灵活。 Cloud Dataflow会为你效力吗? Google App Engine怎么样?