我正在尝试使用'@ google-cloud / bigquery'库从Google Cloud函数查询BigQuery。当Promise返回时,我得到的只是一个包含另一个空数组的Array,即使当我从Big Query控制台运行相同的查询时,也得到了一个非空的响应。
我尝试使用异步函数代替Promise,但这并不成功。我还为我的服务帐户赋予了“ BigQuery Admin”和“ Editor”特权,但这两种方法都没有解决。
我确实知道API达到了“大查询”水平。当我尝试通过Cloud Function创建新数据集时,该调用工作正常,但由于某种原因,我无法从BQ获取查询结果。
function warningAndPreventionIntent(agent) {
let userCountry = agent.parameters['geo-country'];
console.log(String(userCountry[0]));
const gotCountry = userCountry.length > 0;
if(gotCountry) {
agent.add('Im looking into your trip');
const OPTIONS = {
query: 'SELECT disease.name FROM `projectId.dataset.table`, unnest(disease) disease WHERE country = @country',
timeoutMs: 10000,
useLegacySql: false,
params: {country: userCountry[0]}
};
return bigquery
.query(OPTIONS)
.then(results => {
console.log(JSON.stringify(results[0]))
const ROWS = results[0];
let diseaseList = [];
for(var row of ROWS) {
diseaseList.push(row.name);
console.log(diseaseList);
}
return true;
})
.catch(err => {
console.error('ERROR:', err);
});
}
}
我应该获得一个带有值的JSON result
对象,但是我只获取和包含一个空数组[[]]
的数组
答案 0 :(得分:2)
请使用公共数据集找到一个有效的示例,您可以使用该数据集测试您的查询
if (!global._babelPolyfill) {
var a = require("babel-polyfill")
}
import BigQuery from '@google-cloud/bigquery'
describe('Check google-cloud', async () => {
it('Test query', async () => {
let result = await test('panada')
})
async function test(p1) {
try {
const bigquery = new BigQuery({
projectId: `projectId`,
keyFilename: '/Users/tamirklein/ssh/mydata.json'
})
let query = [
'SELECT url',
'FROM `publicdata.samples.github_nested`',
'WHERE repository.owner = @owner'
].join(' ')
console.log(`query is: ${query}`)
let [result] = await bigquery.query({
query,
params: {
owner: p1
}
})
result.forEach((row, index) => {
console.log(`row number ${index}, url is: ${row.url}`)
})
} catch (err) {
console.log("err", err)
}
}
})
答案 1 :(得分:0)
我现在正在得到同样的东西。我在不更改代码的情况下更新了云功能,并且更改了行为。
答案 2 :(得分:0)
考虑到您的评论,这些评论将google / bigquery降级为1.3.X可以帮助您解决此问题。在我看来,您可能已受this Issue的影响。 merge中似乎已修复此问题,因此您可以升级到最新的API版本,而无需重新引入错误。