我正在尝试允许我的Node应用编写并执行查询,然后将其保存到我的BQ项目中的表中。
所有这一切都很好,直到我的结果超过尺寸阈值。然后我得到通常的“结果太大而无法返回”错误。
我已阅读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);
}
让我知道我能做些什么来使问题更清楚。
值得注意的另一件事是,在选项列表中,“{nf_hashed”表是在useLegacySql: true
时创建的,而不是在为false时创建的。
感谢您的帮助。
答案 0 :(得分: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();
});
(源代码本身有更多处理结果回调的例子。)