通过 Cloud Function 插入 BigQuery 不起作用

Dav*_*avM 3 google-bigquery google-cloud-platform google-cloud-functions google-publisher-tag

我将以下 json 插入到预先创建的 BigQuery 表中。

\n\n
{\n  "Member_ID": 881230,\n  "First_Name": "Dave2",\n  "Last_Name": "Manin2",\n  "Gender": "M",\n  "Age": 53,\n  "Height": "5,2",\n  "Weight": 145,\n  "Hours_Sleep": 4,\n  "Calories_Consumed": 2497,\n  "Exercise_Calories_Burned": 876,\n  "Date": "2018-10-17"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我将上面的行直接插入表中时,它工作正常,但通过函数出错(请参阅下面的完整错误消息)。我缺少什么?任何帮助表示赞赏。

\n\n

这是我的node.js(代码后的错误消息)

\n\n
exports.subscribe = function (event, callback) {\n  const BigQuery = require(\'@google-cloud/bigquery\');\n  const projectId = "mydemo-221920"; //Enter your project ID here\n  const datasetId = "mydemodata"; //Enter your BigQuery dataset name here\n  const tableId = "memid"; //Enter your BigQuery table name here -- make sure it is setup correctly\n  const PubSubMessage = event.data;\n  // Incoming data is in JSON format\n   const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, \'base64\').toString() : "{\'Member_ID\':\'na\',\'First_Name\':\'na\',\'Last_Name\':\'na\',\'Gender\':\'na\',\'Age\':\'na\',\'Height\':\'na\',\'Weight\':\'na\',\'Hours_Sleep\':\'na\',\'Calories_Consumed\':\'na\',\'Exercise_Calories_Burned\':\'na\',\'Date\':\'na\'}";\n  console.log(`My log  PubSub en String est: ${incomingData}`);\n  const jsonData = JSON.parse(incomingData);\nvar rows = [jsonData];\n\n  console.log(`Uploading data: ${JSON.stringify(rows)}`);\n\n  // Instantiates a client\n  const bigquery = BigQuery({\n    projectId: projectId\n  });\n\n  // Inserts data into memeid table\n  bigquery\n    .dataset(datasetId)\n    .table(tableId)\n    .insert(rows)\n    .then((foundErrors) => {\n      rows.forEach((row) => console.log(\'Inserted: \', row));\n\n      if (foundErrors && foundErrors.insertErrors != undefined) {\n        foundErrors.forEach((err) => {\n            console.log(\'Error: \', err);\n        })\n      }\n    })\n    .catch((err) => {\n      console.error(\'ERROR:\', err);\n    });\n  // [END bigquery_insert_stream]\n\n\n  callback();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当函数尝试插入时出现此错误

\n\n
ERROR: { PartialFailureError: A failure occurred during this request. \n at /user_code/node_modules/@google-cloud/bigquery/src/table.js:1213:13\n at Object.handleResp (/user_code/node_modules/@google-cloud/bigquery/node_modules/@google-cloud/common/src/util.js:135:3) \n at /user_code/node_modules/@google-cloud/bigquery/node_modules/@google-cloud/common/src/util.js:465:12 \n at Request.onResponse [as _callback] (/user_code/node_modules/@google-cloud/bigquery/node_modules/retry-request/index.js:198:7)\n at Request.self.callback (/user_code/node_modules/@google-cloud/bigquery/node_modules/request/request.js:185:22)\n at emitTwo (events.js:106:13)\n at Request.emit (events.js:191:7)\n at Request.<anonymous> (/user_code/node_modules/@google-cloud/bigquery/node_modules/request/request.js:1161:10)\n at emitOne (events.js:96:13)\n at Request.emit (events.js:188:7) errors: [ { errors: [Object], row: [Object] } ], response: { kind: \'bigquery#tableDataInsertAllResponse\', insertErrors: [ [Object] ] }, message: \'A failure occurred during this request.\' }\n
Run Code Online (Sandbox Code Playgroud)\n\n

该函数正在读取这个 json

\n\n
{\n insertId:  "000000-6dbc4c0f-fe15-4260-95c6-10afe7d0960b"  \n labels: {\xe2\x80\xa6}  \n logName:  "projects/mydemo-221920/logs/cloudfunctions.googleapis.com%2Fcloud-functions"  \n receiveTimestamp:  "2018-11-13T17:27:48.429240186Z"  \n resource: {\xe2\x80\xa6}  \n severity:  "INFO"  \n textPayload:  "My log  PubSub en String est: {"Member_ID":881230,"First_Name":"Dave2","Last_Name":"Manin2","Gender":"M","Age":53,"Height":"5,2","Weight":145,"Hours_Sleep":4,"Calories_Consumed":2497,"Exercise_Calories_Burned":876,"Date":"2018-10-17"}"  \n timestamp:  "2018-11-13T17:27:42.143Z"  \n trace:  "projects/mydemo-221920/traces/cef3531fe182bf1d6da6e47aae3bbff3"  \n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ale*_*lme 5

我在您的代码或 json 中看不到任何错误。我尝试了您提供的代码,并且能够将数据流式传输到 BigQuery 中而不会出现任何错误:

日志正常

数据质量

我尝试修改 BigQuery 表的架构以重现您的问题,并且我已经得到了与您完全相同的错误:

日志错误

这是架构应该可以解决您的问题:

BQ 架构