Angular10 с помощью BigQuery , Отказано в доступе: Большой запрос Большой запрос: Отказано в разрешении при получении учетных данных диска

# #firebase #google-bigquery #angular10

Вопрос:

Я интегрирую Angular10, Firebase с BigQuery, используя «@google-облако/bigquery». Я создал папку функций в своем проекте и добавил в нее файл json с ключом, который я получил после создания учетной записи службы json на облачной консоли Google.

У меня есть 2 набора данных в моей панели мониторинга BigQuery, источником которых является Google Диск.Но когда я пытаюсь запросить эти таблицы, я получаю ошибку.

В моей папке функций у меня есть index.js файл, в котором я инициализирую свой клиент BigQuery, используя следующее:

 const bigqueryClient = new BigQuery({
    keyFilename:'./<name of key Json file from servie account>',
    scopes:['https://www.googleapis.com/auth/drive.readonly'],
    projectId:<Project-id>
  }); 

Ошибка, которую я получаю:
«Отказано в доступе: большой запрос Большой запрос: Отказано в разрешении при получении учетных данных диска».

Кроме того, если я удаляю ProjectID при инициализации моего клиента big query, в консоли регистрируется следующая ошибка:

К сожалению, мы не можем подключиться к облачным сервисам без идентификатора projectn. Вы можете указать его с переменной среды с именемn «GOOGLE_CLOUD_PROJECT».

Кто-нибудь может мне здесь помочь?

Ответ №1:

Чтобы решить эту проблему, вам необходимо определить область действия в файле BigQueryClient, который существует в приведенном ниже пути в пути структуры библиотеки bigquery application/libraries/bigqueryclient/vendor/google/cloud-bigquery/src/BigQueryClient .

Внесите изменения ниже

     const SCOPE=['https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/bigquery',];
        const INSERT_SCOPE = 'https://www.googleapis.com/auth/bigquery.insertdata';

 

    public function __construct(array $config = [])
        {
            $this->location = $this->pluck('location', $config, false);
            $this->setHttpRetryCodes([502]);
            $this->setHttpRetryMessages([
                'rateLimitExceeded',
                'backendError'
            ]);
            $config  = [
                'scopes' => self::SCOPE,
                'projectIdRequired' => true,
                'returnInt64AsObject' => false,
                'restRetryFunction' => $this->getRetryFunction(),
                //@codeCoverageIgnoreStart
                'restCalcDelayFunction' => function ($attempt) {
                    return min(
                        mt_rand(0, 1000000)   (pow(2, $attempt) * 1000000),
                        self::MAX_DELAY_MICROSECONDS
                    );
                }
                //@codeCoverageIgnoreEnd
            ];
            $this->connection = new Rest($this->configureAuthentication($config));
            $this->mapper = new ValueMapper($config['returnInt64AsObject']);
        }