Какой метод API BigQuery nodejs для загрузки файлов GCS с подстановочными знаками - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь написать облачную функцию, которая загружает файлы GCS, соответствующие шаблону, в BigQuery. Все примеры, которые я могу видеть и в справочнике API, являются методом загрузки, который задает определенное имя файла c через метод bigquery.dataset.table.load.

Какой метод можно использовать для запуска загрузки файла с использованием подстановочных знаков? Я знаю, что могу указать источник метаданных uri, но не могу увидеть пример метода загрузки до go. Любая помощь приветствуется.

Вот мой код.

exports.importReadyToIngestFiles = (event, context) => {
  const pubsubMessage = event.data;
  console.log(Buffer.from(pubsubMessage, 'base64').toString());
  const bucketName = Buffer.from(pubsubMessage, 'base64').toString();

    const {BigQuery} = require('@google-cloud/bigquery');
  const {Storage} = require('@google-cloud/storage');

//specify projectID and bigquery datasetID below
  const projectId = "test-3";
  const datasetId = "Data";
  const filename = "p_*";

  const gcsFile = `${bucketName}/p_*`;  

    const tableId = "numeric";

  const bigquery = new BigQuery({
    projectId: projectId,
  });

  const storage = new Storage({
    projectId: projectId,
  });

  let job;

  // Loads data from a Google Cloud Storage file into the table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename))
    .then(results => {
      job = results[0];
      console.log(`Job ${job.id} started.`);

      // Wait for the job to finish
      return job;
    })
    .then(metadata => {
      // Check the job's status for errors
      const errors = metadata.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    })
    .then(() => {
      console.log(`Job ${job.id} completed.`);
    })
    .catch(err => {
      console.error('ERROR:', err);
    });

  // callback();

};

ОБНОВЛЕНИЕ: Аа, я выяснил, просмотрев ошибку истории заданий BigQuery, что мой файл разделен конвейером, поэтому произошло несоответствие столбцов. Теперь, где я могу найти, как указать разделитель? Это только я или документация nodejs bigquery api немного неясно.

1 Ответ

0 голосов
/ 22 января 2020

Как вы упомянули в первоначальном вопросе, я полагаю, что есть возможность предоставить поле sourceUris[] внутри нагрузки Задание в пределах метаданных параметров для использовать поиск по шаблону, и это уже было подтверждено в JobConfigurationLoad документации:

sourceUris []

Полностью квалифицированные URI, указывающие на ваши данные в Google Cloud. Для URI облачного хранилища Google: каждый URI может содержать один подстановочный знак «*», и он должен идти после имени «корзины».

Указание метаданных в качестве входных значений для класса .load, что-то вроде этого :

const metadata = {
    sourceUris: [gs://my_bucket*],
    ...
  };

bigquery
    .load(metadata)

Вы также можете использовать поле fieldDelimiter для метаданных, чтобы настроить разделитель столбцов для файла входных данных.

Исходный код класса createLoadJob, который вы можете найти здесь .

...