Перенаправление данных BigQuery в прогноз

Мы разрабатываем POC в электронных таблицах Google.

Есть какие-то настройки, но вкратце он скачивает данные из BigQuery и перенаправляет их в Prediction.

Наши таблицы Bigquery имеют размер до 41 МБ, что не разрешено/не поддерживается электронными таблицами.

Мы думали о загрузке пакетов по 5 Мб данных из Bigquery. Хотя Predicition API предоставляет методы для insert< /a> много данных, обновление позволяет загружать только одну строку/экземпляр.

Есть ли способ перенаправить данные Bigquery прямо в Prediction?

Основные три задействованные функции:

/**
 * 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;
}

С уважением.


person Thiago Melo    schedule 15.02.2016    source источник


Ответы (1)


В настоящее время нет прямой связи между BigQuery и Prediction Api, но оба они интегрируются с Google Cloud Storage.

Для обучения новых моделей вы можете экспортировать данные BigQuery в GCS в виде файла CSV, а затем вставить этот файл в API прогнозирования.

Для обновления существующих моделей из данных BigQuery вам придется проделать больше работы, поскольку API прогнозирования поддерживает вставку одной строки в существующие модели, но BigQuery обеспечивает только массовый экспорт в GCS или ранжированное чтение через bigquery.tabledata.list. Вам потребуется некоторая обработка, чтобы извлечь данные из BigQuery и вставить их по одной строке за раз в вашу модель прогнозирования.

Использование Google Apps Script для доступа к BigQuery из Google Spreadsheet открывает множество простых вариантов интеграции, но есть также ограничения на обработку, налагаемые Apps Script, такие как максимальный размер загружаемых файлов... Другие фреймворки могут оказаться более гибкими. Подойдет ли вам Cloud Dataflow? Как насчет Google App Engine?

person Michael Sheldon    schedule 18.02.2016