我尝试将数据放入BigQuery数据库。数据使用Google Pub / Sub发送到GCP。现在,我想添加一个Google Cloud Function来插入数据。 我是编程新手。我试图找到一些很好的文档来做到这一点,但是不幸的是我找不到。
此刻,我的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)
我不需要最终代码。如果您可以指导我学习教程或类似课程,我将不胜感激。
先谢谢了。随时问我是否忘记要提及的内容。
蒂姆
答案 0 :(得分:1)
此Google官方文档中的tutorial演示了如何使用Cloud Pub / Sub触发器编写,部署和触发 Background Cloud Function 。
请记住,为了在函数中使用外部Node.js模块,还需要在 package.json 文件中指定dependencies。
当您遇到以下错误时:
错误:找不到模块'@ google-cloud / bigquery'
您可以查看GitHub上官方BigQuery Node.js API存储库中的 package.json 文件以供参考。
让我知道此信息是否对您有所帮助。