Google Cloud Function Node.Js - PullRequest
       5

Google Cloud Function Node.Js

0 голосов
/ 28 июня 2018

Облачная функция ожидает загрузки файла в корзину и загружает его в BQ. Таблица BQ уже существует. Мой набор данных не определен, хотя я назначаю имя набора данных в верхней части функции. Любые идеи о том, что мой вопрос может быть?

Функция «Follow» возвращает следующую ошибку. Ошибка: сбой функции. Подробности: Невозможно прочитать свойство 'таблица' из неопределенного

{
  "name": "sample-cloud-storage",
  "version": "0.0.1",
  "repository": "googleapis/nodejs-bigquery",
  "engines": {
    "node": ">=4"
  },
  "dependencies": {
    "@google-cloud/bigquery": "1.2.0",
    "@google-cloud/storage": "1.5.1",
    "yargs": "10.0.3"
  },
  "devDependencies": {
    "@google-cloud/nodejs-repo-tools": "2.1.3",
    "ava": "0.24.0",
    "nyc": "11.3.0",
    "proxyquire": "1.8.0",
    "sinon": "4.1.3",
    "uuid": "3.1.0"
  }
} 

exports.ToBigQuery_Stage = (event, callback) => {
  //https://stackoverflow.com/questions/49111829/using-cloud-function-to-load-data-into-big-query-table-it-is-appending-to-the-t

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

  const file = event.data;
  const context = event.context;
  const projectId = "bi-sales-sms";
  const datasetId = "bi-sales-sms:BI_Sales_SMS";
  const bucketName = file.bucket;
  const filename = file.name;

  //const dashOffset = filename.indexOf('-');

  //const tableId = filename + "_STAGE";
   const tableId = 'Roll_Up_Daily_Sales_Per_Retailer';

  console.log('hello norman');
  console.log('Load ' + filename + ' into ' + tableId);

const metadata = {
  allowJaggedRows: true,
  skipLeadingRows: 1

 };

  //test the print
  console.error(BigQuery.Dataset(datasetId));

  BigQuery
//issue is here  
    .Dataset(datasetId)
    .table(tableId)
    .Load(storage.bucket(bucketName).file(filename),metadata)
    .then(results => {
      job = results[0];
      // 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();
};

1 Ответ

0 голосов
/ 28 июня 2018

Создание клиента отсутствует, добавьте это в свой код, чтобы установить его

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

Теперь вместо объекта BigQuery вы должны использовать клиентский объект bigquery.

Кроме того, для создания ссылки на существующий набор данных используйте bigquery.dataset(datasetId), а не bigquery.Dataset(datasetId).

Более подробную информацию о клиентской библиотеке BigQuery Node.js можно найти здесь .

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