0

Я пытаюсь настроить Google Bigquery с Firebase, и у меня есть некоторые проблемы. У меня есть gcloud, установленный на моей машине (MacOS Sierra) и облако Google установлено через композитор в моем проекте.Bigquery не смог получить учетные данные по умолчанию

Следующий код в моем проекте:

# Includes the autoloader for libraries installed with composer 
require __DIR__ . '/vendor/autoload.php'; 

# Imports the Google Cloud client library 
use Google\Cloud\BigQuery\BigQueryClient; 

# Your Google Cloud Platform project ID 
$projectId = 'hidden here only'; 

# Instantiates a client 
$bigquery = new BigQueryClient([ 
    'projectId' => $projectId 
]); 

# The name for the new dataset 
$datasetName = 'test_dataset'; 

# Creates the new dataset 
$dataset = $bigquery->createDataset($datasetName); 

echo 'Dataset ' . $dataset->id() . ' created.'; 

Все, что я пытаюсь сделать, это просто создать набор данных в пределах BigQuery через библиотеку, но я не в состоянии из-за следующей ошибки:

Fatal error: Uncaught Google\Cloud\Exception\ServiceException: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information in /Applications/MAMP/htdocs/projects/work/bigquery-tests/vendor/google/cloud/src/RequestWrapper.php on line 219 

Я попытался запустить gcloud beta auth applications-default login, как говорится в примере кода, но после входа в браузер ошибка все еще присутствует. Любая помощь будет большой, спасибо!

ответ

3

Вы были очень близки, вам нужно настроить учетные записи по умолчанию учетной записи службы, чтобы увидеть строки с putenv и useApplicationDefaultCredentials(). Это рабочий код, который я с помощью библиотеки https://github.com/google/google-api-php-client Вам нужно получить учетную запись ключевой файл службы из консоли: https://console.cloud.google.com/iam-admin/serviceaccounts/

composer.json

{ 
    "require": { 
     "google/cloud": "^0.13.0", 
     "google/apiclient": "^2.0" 
    } 
} 

PHP файл

# Imports the Google Cloud client library 
use Google\Cloud\BigQuery\BigQueryClient; 
use Google\Cloud\ServiceBuilder; 

$query="SELECT repository_url, 
     repository_has_downloads 
FROM [publicdata:samples.github_timeline] 
LIMIT 10"; 
$client = new Google_Client(); 
putenv('GOOGLE_APPLICATION_CREDENTIALS='.dirname(__FILE__) . '/.ssh/dummyname-7f0004z148e1.json');//this can be created with other ENV mode server side 
$client->useApplicationDefaultCredentials(); 

$builder = new ServiceBuilder([ 
       'projectId' => 'edited', 
     ]); 

     $bigQuery = $builder->bigQuery(); 

     $job = $bigQuery->runQueryAsJob($query); 
     $info=$job->info(); 
//  print_r($info); 
//  exit; 
     $queryResults = $job->queryResults(); 

     /*$queryResults = $bigQuery->runQuery(
      $query, 
      ['useLegacySql' => true]);*/ 

     if ($queryResults->isComplete()) 
     { 
      $i = 0; 
      $rows = $queryResults->rows(); 

      foreach ($rows as $row) 
      { 
       $i++; 

       $result[$i] = $row; 
      } 
     } 
     else 
     { 
      throw new Exception('The query failed to complete'); 
     } 

     print_r($result); 
+1

Для этого вам не нужна зависимость google/apiclient. Вызов 'putenv' должен быть достаточным для создания экземпляра' ServiceBuilder'. – jdp

+0

@ Pentium10 Как загрузить файл ключа? У меня есть разрешение на просмотр ключей, но я не вижу кнопку загрузки. –

+0

@JoeScotto, см. Следующую ссылку для руководства по загрузке ключевого файла: https://googlecloudplatform.github.io/google-cloud-php/#/docs/v0.20.1/guides/authentication –