【问题标题】:Can't get data from Google Pub/Sub to BigQuery with Google Cloud Function无法使用 Google Cloud Function 从 Google Pub/Sub 获取数据到 BigQuery
【发布时间】:2019-09-10 12:55:43
【问题描述】:

我尝试将我的数据导入 BigQuery 数据库。使用 Google Pub/Sub 将数据发送到 GCP。现在我想添加一个谷歌云函数来插入数据。 我对编程很陌生。我试图找到一些很好的文档来说明如何做到这一点,但不幸的是我找不到。

目前我的 GCFunction 看起来像这样,但我无法部署它:

/**
 * Triggered from a message on a Cloud Pub/Sub topic.
 *
 * @param {!Object} event Event payload.
 * @param {!Object} context Metadata for the event.
 */

var BigQuery = require('@google-cloud/bigquery'); 
var projectId = 'projectId';

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

var datasetName = 'dataSetName'; 
var tableName = 'tabeName'; 

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

  var msg = event.data; 
  var data = JSON.parse(Buffer.from(msg.data, 'base64').toString());

  bigquery
  .dataset(datasetName)
  .table(tableName)
  .insert(data)
  .catch(err => {
    console.error('ERROR:', err);
  });
};

Pub/Sub 接收到的负载如下所示:

{
  "name": "gcp_pub-sub",
  "data": "{\"devID\":\"XXX\",\"MON_SYS\":\"0\",\"T_BAT\":\"0\",\"F_SYS\":\"0\",\"P_SYS_1\":\"0\",\"P_SYS_2\":\"0\",\"I_SYS\":\"0\",\"U_SYS\":\"0\",\"SOC_SYS\":\"0\",\"T_OUT\":\"102\",\"H_OUT\":\"91\",\"GPS_SYS\":\"48.890587,9.182569\",\"SOC_HelpBattery\":\"150\",\"SYS_MainboardOn\":\"0\"}",
  "ttl": 60,
  "published_at": "2019-09-10T12:04:00.051Z",
  "coreid": "XXXXXX"
}

我的 BigQuery 表如下所示。与有效负载中的名称相同,另外还有日期时间。 https://pasteboard.co/IwLhWde.png

这是部署错误:

Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module '@google-cloud/bigquery'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/index.js:8:16)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

我不想要最终代码。如果您能指导我学习教程或类似内容,我将非常高兴。

提前致谢。随时问我是否忘记提及。

提姆

【问题讨论】:

    标签: google-cloud-platform google-bigquery google-cloud-functions google-cloud-pubsub


    【解决方案1】:

    来自 Google 官方文档的 tutorial 演示了编写、部署和触发使用 Cloud Pub/Sub 触发器的后台云函数。

    请记住,为了在您的函数中使用外部 Node.js 模块,您还需要在 package.json 文件中指定 dependencies。

    当您收到以下错误时:

    错误:找不到模块“@google-cloud/bigquery”

    您可以查看 GitHub 上官方 BigQuery Node.js API 存储库中的 package.json 文件以供参考。

    如果这些信息对您有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2021-11-23
      • 1970-01-01
      • 2021-07-24
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多