@ google-cloud / bigquery Query API, возвращающий пустое Promise при использовании в облачной функции - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь использовать библиотеку '@ google-cloud / bigquery' для запроса BigQuery из функции Google Cloud. Когда обещание возвращается, все, что я получаю, это массив с другим пустым массивом внутри, хотя, когда я выполняю тот же запрос из консоли большого запроса, я получаю непустой ответ.

Я пытался использовать асинхронную функцию вместо обещания, но это не удалось. Я также дал моей учетной записи службы права «BigQuery Admin» и «Редактор», но это тоже не сработало.

Я знаю, что API работает с Big Query. Когда я пытался создать новый набор данных из моей облачной функции, этот вызов работал просто отлично, но по какой-то причине я не могу получить результаты запроса из 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 со значениями, но я получаю только массив с пустым массивом [[]]

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Найдите рабочий пример с использованием общедоступного набора данных, который вы можете использовать для проверки вашего запроса с помощью

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)
        }
    }
})
0 голосов
/ 30 мая 2019

Теперь я получаю то же самое.Я обновил свою облачную функцию без изменения кода, и поведение изменилось.

...