# #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']);
}