API Bigquery: выполнение запроса с таблицей назначения не сохраняет результаты

Я пытаюсь использовать скрипт Google Apps для автоматизации ежедневного процесса агрегирования. Идея состоит в том, чтобы запустить несколько таблиц из одного набора данных и сохранить их результаты в таблицу второго набора данных. У моего пользователя есть разрешения на оба соответствующих набора данных.

Мой запрос выглядит следующим образом

        var request = {
        "maxResults": 10000,
        "useQueryCache": false,
        "destinationTable": {
              "projectId": "project_name_obfuscated",
              "datasetId": "project_114151_shared",
              "tableId": "test123"
            },
        "writeDisposition": "WRITE_TRUNCATE",
        "createDisposition": "CREATE_IF_NEEDED",
        "allowLargeResults": true,
        "query": "query syntax here"
      };

  var queryResults = BigQuery.Jobs.query(request, "project_name_obfuscated");

(Я запутал названия проектов и сам запрос из соображений конфиденциальности).

Запрос на самом деле работает нормально, однако он не сохраняется в указанном проекте/наборе данных/таблице, которые я определил.

В пользовательском интерфейсе BQ я вижу что-то вроде:

Job ID: project_name_obfuscated:job_NhkQpi110p3i5yoOO7nzXp3tTKY
Start Time: 5:47pm, 20 Oct 2014
End Time: 5:47pm, 20 Oct 2014
Bytes Processed: 0 B
Destination Table: project_name_obfuscated:_138c3340e691065e8db0b55781b5a41c6b4bcd49.anonev_SOiiRC10lfetj000kcj4rmXNc5E

Любые идеи, что я делаю неправильно?


person Gil Adirim    schedule 20.10.2014    source источник


Ответы (1)


Вы используете аргументы, которые доступны только через Jobs.insert в методе Jobs.query. Jobs.query предназначен для быстрых синхронных запросов и не поддерживает весь набор параметров, доступных в Jobs.insert, который является асинхронной версией.

Попробуйте что-то вроде:

var configuration = {
  "query": {
    "useQueryCache": false,
    "destinationTable": {
          "projectId": "project_name_obfuscated",
          "datasetId": "project_114151_shared",
          "tableId": "test123"
        },
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "query": "query syntax here"
  }
};
var job = {
    "configuration": configuration
};

var jobResult = BigQuery.Jobs.insert(job, "project_name_obfuscated");

var jobId = jobResult.jobReference.jobId;

// The job might not actually be done; wait until it is marked
// complete.
var sleepTimeMs = 500;
while (true) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
      "maxResults": 10000);
    if (!queryResults.jobComplete) {
      break;
    }
}
person Jordan Tigani    schedule 20.10.2014
comment
Требуется небольшое исправление, чтобы пометить как решенное — все содержимое конфигурации должно находиться за другим параметром запроса (например, конфигурация-›запрос-›‹параметры›). В противном случае вы получите ошибки от API. var configuration = { запрос: { useQueryCache: false, - person Gil Adirim; 22.10.2014
comment
Спасибо. Исправлено (похоже, предложенные вами обновления были отклонены модераторами SO по какой-то причине, но я все равно подал заявку). - person Jordan Tigani; 27.10.2014