如何使用 Nodejs 将本地 Avro 上传到谷歌大查询

Posted

技术标签:

【中文标题】如何使用 Nodejs 将本地 Avro 上传到谷歌大查询【英文标题】:How to upload a local Avro to google big query using Nodejs 【发布时间】:2016-06-09 11:21:01 【问题描述】:

我正在尝试使用 nodejs 将本地 Avro 上传到谷歌大查询

var gcloud = require('gcloud')(
  keyFilename: './config/keyfile.json',
  projectId: 'my-project'
);

var bigquery = gcloud.bigquery();


var schoolsDataset = bigquery.dataset('my_dataset');
var schoolsTable = schoolsDataset.table('person_data');


schoolsTable.import('./examples/yob1900.avro', function(err, job) 
console.log(job)
console.log(err)
);

我收到以下错误:

 [ApiError: No schema specified on job or table.]
  code: 400,
  errors: 
   [  domain: 'global',
       reason: 'invalid',
       message: 'No schema specified on job or table.'  ],
  response: undefined,
  message: 'No schema specified on job or table.' 

如何添加架构? (“yob1900”文件是从 bigquery 文档中下载的 https://cloud.google.com/bigquery/loading-data#loading_json_files)

【问题讨论】:

【参考方案1】:

答案如下:

var gcloud = require('gcloud')(
  keyFilename: '../config/keyfile.json',
  projectId: 'my-project'
);

var request = require('request');

var bigquery = gcloud.bigquery();


var dataset = bigquery.dataset('my_dataset');
var table = dataset.table('my_table');

var metadata = 
  sourceFormat: 'AVRO'
;

fs = require('fs');

fs.createReadStream('./yob1900.avro')
  .pipe(table.createWriteStream(metadata))
  .on('complete', function(job) 
   job
      .on('error', console.log)
      .on('complete', function(metadata) 
        console.log('job completed', metadata);
      );
  );

【讨论】:

以上是关于如何使用 Nodejs 将本地 Avro 上传到谷歌大查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 multer 和 nodejs 将图像上传到谷歌云存储时出错

如何使用签名的 URL 将文件上传到谷歌云存储桶

使用 SSIS 将本地文件上传到谷歌云存储桶

Apache Avro 库无法解析文件 nodejs

如何将 nodejs 应用程序部署到谷歌云?

如何使用 Laravel 4 将图片上传到谷歌?