2017-04-10 40 views
0

我想讓我的Node應用程序編寫並執行查詢,然後將其保存到我的BQ項目中的表中。如何配置BigQuery查詢作業以在Node.js中允許較大的結果?

所有這些工作都很好,直到我的結果超出尺寸閾值。然後,我得到通常的'結果太大,返回'的錯誤。

我已閱讀node.js api文檔here,並嘗試將destination和allowLargeResults選項設置爲配置。但他們似乎被忽略了。

我該如何使用Node.js來運行我的查詢並將結果寫入指定的表中,以允許大的結果?

以下是我正在使用的功能。

function getData(file, outfile, email, callback){ 
    fs.writeFile('public/downloads/' + outfile, 'email_sha256'+'\n', function(err){ 
     console.log(err); 
    }); 
    const tableName = outfile.substring(0, outfile.length - 4); 
    console.log('getData function started'); 
    const sql = 'SELECT email_sha256 FROM temp.{table} cid JOIN etl.customer email ON cid.customer_id = email.customer_id GROUP BY email_sha256'; 
    const sql2 = sql.replace("{table}", tableName); 
    console.log(tableName); 
    const options = { 
     destination: 'nf_hashed', 
     query: sql2, 
     timeoutMs: 10000000, 
     useLegacySql: false, 
     defaultDataset: 'temp' 
    }; 
    console.log('Starting Query'); 
    bigquery.query(options); 
} 

讓我知道是否有什麼我可以做的,使問題更清楚。

還有一件值得注意的事情是,在選項列表中,當useLegacySql: true時創建了'nf_hashed'表格,但是在假時不會創建。

感謝您的任何幫助。

回答

0

看起來你需要使用bigquery.startQuery而不是bigquery.query。看看example in the source code。你的代碼可能是這樣的:

bigquery.startQuery({ 
    destination: bigquery.dataset('temp').table('nf_hashed'), 
    useLegacySql: false, 
    query: sql2 
}).then(function(data) { 
    var job = data[0]; 
    var apiResponse = data[1]; 
    return job.getQueryResults(); 
}); 

(源代碼本身有更多的處理結果回調的例子)。

+0

完美。這使我可以設置所有選項。現在玩回調。 非常感謝。 – nFrain

相關問題