【问题标题】:Reading multiple files from google bucket & loading into BQ using nodejs从谷歌存储桶中读取多个文件并使用 nodejs 加载到 BQ
【发布时间】:2021-09-21 17:13:20
【问题描述】:

当我尝试从谷歌存储桶读取文件并在 bigquery 表中加载数据时,谷歌存储桶会抛出超时错误。有没有办法同步读取文件并加载到 bigquery 表。

这适用于文件较少的情况,并且尝试使用 then 也会出现同样的错误。

const { BigQuery } = require('@google-cloud/bigquery');
const { Storage } = require('@google-cloud/storage');
var fs = require("fs");


const bucketName = 'bucketname';
const gcpProject = "projectname";
const datasetprojectname = "bqprojectname";
const datasetId = "dsname";
const tableId = "tablename";





exports.helloworld = async (req, res) => {


  const bigquery = new BigQuery({ projectId: datasetprojectname });
  const storage = new Storage(gcpProject);
  const loaddatabq = new Storage(gcpProject);
  const bucket = storage.bucket(bucketName);
  const fileoptions = {
    prefix: "singlefile"
  };

  var filecount = 0;
  var errcount = 0;
  var filemoveerrcount = 0;
  const [getfilename] = await bucket.getFiles(fileoptions);
  var filenamespring = "";
  var getjson = null;
          
  getfilename.forEach(async files => {
    try {
      filecount++;
      var filename = files.name;
      
      if (filename != "singlefile/") {  

       var contents =  await files.download(files.name);
          
           await bigquery.dataset(datasetId).table(tableId).insert(JSON.parse(contents).body);       
      }
    }
    catch (err) {
      
    }

  });

};

【问题讨论】:

  • 您的 JSON 是内联的还是文件中漂亮的打印(缩进)?
  • JSON 内联,如果需要,我可以将其修改为漂亮的打印。

标签: node.js google-bigquery google-cloud-functions


【解决方案1】:

如果您的文件采用 JSONL 格式(每行 1 个 JSON 文档,JSON 行),您可以使用 load job to achieve this

您可以通过using wildcard character 过滤您想要的文件。它会比 for 循环更有效。

这种解决方案也更便宜。每张桌子和每天您只能使用1500 loads,但负载是免费的。在您当前的代码中,您使用流式 API,而您 pay for it ($0.05 per Gb)

【讨论】:

  • 我在存储桶中有多个文件,可能包含单行或多行,没有通过使用云功能支持的 nodejs 直接摄取支持吗?
  • 一切都取决于您的输入格式。如果每行有 1 个 JSON 并且有多行,即多行,这不是问题,加载 API 就是这样工作的。多个文件也是如此,通配符模式允许一次摄取多个文件。
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 2019-02-09
  • 1970-01-01
  • 2020-04-01
  • 2020-10-22
  • 2020-01-18
  • 1970-01-01
  • 2019-04-13
相关资源
最近更新 更多