Функция Bigquery Load in Cloud в Node JS получает идентификатор задания без ожидания - PullRequest
0 голосов
/ 01 марта 2019

Я изо всех сил пытаюсь получить идентификатор задания BigQuery из моего кода функции ниже облака.Мне нужен идентификатор задания, чтобы проверить, успешно ли выполнено задание

Вот мой код:

 var storage = new Storage({projectId: process.env.PROJECT_ID});
    var tableId = getTableID(file);

    const metadata = {
        sourceFormat: 'CSV',
        skipLeadingRows: 1,
        autodetect: false,
        writeDisposition: 'WRITE_APPEND',
        fieldDelimiter: process.env.DELIMITER,
        allowJaggedRows: 'TRUE'
    };

    console.log(`The file ${file.name} has been successfully picked up and going to be stored in table ${process.env.PROJECT_ID}:${process.env.DATASET_ID}.${tableId}.`);
    outboundHandler.sendStatusUpdate(file.name, process.env.IN_PROGRESS_CODE);
    var errorsState = false;

// Loads data from a Google Cloud Storage file into the table
   const [job] =   bigquery
        .dataset(process.env.DATASET_ID)
        .table(tableId)
        .load(storage.bucket(file.bucket).file(file.name), metadata);

          console.log(job.id);

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я хочу не использовать обещание, так как не хочу ждать завершения задания большого запроса:

Вы можете установить свой собственный jopIdв объекте метаданных, чтобы отслеживать состояние задания и избегать ожидания ответа на обещание.

Из документации класса BigQuery Load

  • @ param {string} [metadata.jobId] Пользовательский идентификатор для основного задания.
  • @ param {string} [metadata.jobPrefix] Префикс, применяемый к базовому идентификатору задания.

Это ссылка на пример в c # того, какчтобы сделать это

Однако, исходя из вашего описания, похоже, что у вас есть ошибка, которую вы пропустили в процессе.Я предлагаю вам попробовать Async/Await вместо promise, где это возможно, чтобы упростить ваш код и помочь в устранении неполадок

// Imports the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const filename = "/path/to/file.csv";
// const datasetId = "my_dataset";
// const tableId = "my_table";

// Creates a client
const bigquery = new BigQuery({projectId});

// Loads data from a local file into the table
const [job] = await bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(filename);

console.log(`Job ${job.id} completed.`);

// Check the job's status for errors
const errors = job.status.errors;
if (errors && errors.length > 0) {
  throw errors;
}
0 голосов
/ 01 марта 2019

Вам необходимо в дальнейшем использовать Обещание

const [job] =   bigquery
        .dataset(process.env.DATASET_ID)
        .table(tableId)
        .load(storage.bucket(file.bucket).file(file.name), metadata)
        .then(results => {
                const job = results[0];

                // load() waits for the job to finish
                console.log(`Job ${job.id} completed.`);

                // Check the job's status for errors
                const errors = job.status.errors;
                if (errors && errors.length > 0) {
                    //console.log(errors);
                    callback(errors);
                    //throw errors;
                } else {
                    callback();
                }
            })
            .catch(err => {
                //console.error('ERROR:', err);
                callback(err);
            });

Обязательно звоните своему callback на каждом возможном финише.

Наша функция определяется как exports.loadFileFromGCStoBigQuery = (data, callback) => {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...