2017-05-19 37 views
0

Google Cloud Storageからnode.js google_cloud sdkを使用してBigQueryにデータを読み込もうとしています。ここでは負荷コードの抜粋です:ジョブはキックオフとジョブIDを返しますGoogle BigQueryノードSDKエラーが発生してジョブが失敗する

//init Google Cloud storage 
var gcs = require("@google-cloud/storage")({ 
    projectId: bq_projectId, 
    keyFilename: "./" + keyfile 
}); 

//init Google BigQuery 
var bq = require("@google-cloud/bigquery")({ 
    projectId: bq_projectId, 
    keyFilename: "./" + keyfile 
}); 

const datasetId = "my-dataset"; 
const tableId = "data_load"; 
const fileName = "data-20170518-082238.csv"; 

bq 
    .dataset(datasetId) 
    .table(tableId) 
    .import(gcs.bucket(bucketName).file(fileName), (err, job, apiResponse) => { 
    if (err){ 
     throw err 
     return; 
    } 

    console.log(apiResponse); 
    console.log(`Job ${job.id} started.`); 
    }); 

、エラーがスローされていないとapiResponseは次のとおりです。

{ kind: 'bigquery#job', 
    etag: '"TcVKUQ2ft7DS9Q8U3noJdmpEDQ4/tFIJTWM2yuacXB5EvzWR1ffuKig"', 
    id: 'my-project:job_FTO4_Jb5ctr2oEy2IsDSAUCWrgw', 
    selfLink: 'https://www.googleapis.com/bigquery/v2/projects/my-project/jobs/job_FTO4_Jb5ctr2oEy2IsDSAUCWrgw', 
    jobReference: 
    { projectId: 'my-project', 
    jobId: 'job_FTO4_Jb5ctr2oEy2IsDSAUCWrgw' }, 
    configuration: 
    { load: 
     { sourceUris: [Object], 
     schema: [Object], 
     destinationTable: [Object], 
     sourceFormat: 'CSV' } }, 
    status: { state: 'RUNNING' }, 
    statistics: { creationTime: '1495151832686', startTime: '1495151833523' }, 
    user_email: 'service-account' } 

のBigQueryから細かいまったく同じファイルのロード指定されたテーブルへのインタフェース。

+0

ジョブがRUNNING状態です。あなたが持っているjobidを使用し、そのジョブのステータスを定期的にチェックする必要があります。それが完了すると、エラーがあれば表示されます! –

+0

ああ、最初の出力を含めたところで、テーブルを確認する前に仕事が完了するまで待っています。それは正常に完了します。 – jasonsirota

答えて

0

BigQueryのロードプロセスでエラーが発生した場合、コールバックまたはpromise.catch経由でスローされません。この場合

、あなたはjob.status.errorsを読む必要はエラーが負荷にあったかどうかを判断するために、オブジェクトを、ここにいくつかのサンプルコードは次のとおりです。

bq 
    .dataset(datasetId) 
    .table(tableId) 
    .import(gcs.bucket(bucketName).file(fileName),{ 
    skipLeadingRows: 1 
    }) 
    .then(results => { 
    console.log("initial results:") 
    console.log(results); 
    const job = results[0]; 
    console.log(`Job ${job.id} started.`); 
    return job.promise(); 
    }) 
    .then(results => { 
    console.log("completed results:") 
    console.log(results); 

    const job = results[0]; 

    // determine if there are any errors in the completed job 
    if(job.status.errorResult || (job.status.errors && job.status.errors.count > 0)) { 
     console.error(JSON.stringify(job.status.errors)); 
     return; 
    } 

    console.log(`Job ${job.id} completed successfully`); 
    }) 
    .catch(err => { 
    console.error(err); 
    }); 
関連する問題