【问题标题】:Node JS - Big Query insert to a request object fully into a record data typeNode JS - Big Query 将请求对象完全插入到记录数据类型中
【发布时间】:2021-12-27 09:51:14
【问题描述】:

我有从客户端获取的 Json。我需要将整个请求插入到一个大查询表中。

如何在不指定单个字段的情况下编写插入查询

下面是req对象

var reqBody = {
   "Name":"testing",
   "columns":[
      {
         "fieldExistsIn":"BOTH",
         "columnWidth":5,
         "hide":false
      },
      {
         "fieldExistsIn":"BOTH",
         "columnWidth":10,
         "hide":false
      }
   ],
   "Range":{
      "startDate":"20-Oct-2022",
      "endDate":"26-Oct-2022"
   }
}

我需要将它插入到如下所示的“requestData”字段中。但是下面的查询不起作用

"INSERT INTO table_name(requestData) VALUES(reqBody)"

1.BigQuery 表架构

reqData RECORD  NULLABLE    
  Name  STRING  NULLABLE    
  column    RECORD  REPEATED
      fieldExistsIn STRING  NULLABLE
      columnWidth   INTEGER NULLABLE    
      hide  BOOLEAN NULLABLE

2.样本输出表

"requestData": {
      "Name": "testing",
      "columns": [
        {
          "fieldExistsIn":"BOTH",
          "columnWidth": 10,
          "hide": false
        },
        {
          "fieldExistsIn":"BOTH",
          "columnWidth": 5,
          "hide": false
        }]
    }
   

3.你是如何插入 JSON 文件的

using nodejs application

【问题讨论】:

  • 您能否提供以下详细信息,因为这将有助于复制 1.BigQuery 表架构 2.示例输出表 3.您如何尝试插入 JSON 文件,即通过控制台或 CLI 或 BigQuery 客户端图书馆?

标签: node.js google-bigquery


【解决方案1】:

根据您提供的表架构和示例数据,我尝试在我的一端复制它。

表架构:

使用INSERT查询插入json数据会报​​错。

insert into project.try.tab5 (reqData) values(var1) 

我在 var1 中存储了 json 数据的位置。

错误: 插入的行列数错误;有 1 个,预期 2 个

所以,如果要使用 Node.js 客户端,可以使用insertRowsAsStream 方法向表中插入行。

您可以参考下面的代码和相应的输出。

Sample.js:

const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function insertRowsAsStream() {
   const datasetId = 'sandeep';
   const tableId = 'tab8';
  const rows = [

    {
        "reqData": {
          "Name": [
            "testing"
          ],
          "column": [
            {
              "fieldExistsIn": "BOTH",
              "columnWidth": "10",
              "hide": false
            },
            {
              "fieldExistsIn": "BOTH",
              "columnWidth": "5",
              "hide": false
            }
          ]
        }
      }

  ];
    
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows);
  console.log(`Inserted ${rows.length} rows`);
}
insertRowsAsStream();

输出:

【讨论】:

  • PartialFailureError is gettingI a using a key to connect the db。这可能是原因吗
  • 嗨@user1187,对我来说,最初发生 PartialFailureError 是因为通过 Node.js 客户端库插入 BigQuery 表的 json 数据与 BigQuery 中的表架构不对齐。您能否尝试使用您传递的 json 数据检查您的 BigQuery 表架构是否对齐。
  • 我怎样才能以类似的方式进行更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2017-08-15
  • 2018-06-17
  • 2020-08-13
相关资源
最近更新 更多