Search code examples
phpgoogle-bigquerygoogle-cloud-platformgoogle-authenticationgoogle-authenticator

Bigquery could not get default credentials


I'm trying to setup Google Bigquery with Firebase and am having some issues. I have gcloud installed on my machine (MacOS Sierra) and have google cloud installed via composer on my project.

The following code on my project:

# 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.';

All I'm trying to do is just create a dataset within bigquery via the library but I'm not able to due to the following error:

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

I've tried running gcloud beta auth applications-default login as the example code says to do but after logging in on the browser, the error is still present. Any help would be great, thanks!


Solution

  • You were very close, just you need to setup the service account default credentials see lines with putenv and useApplicationDefaultCredentials(). This is a working code I have using the library https://github.com/google/google-api-php-client You need to obtain your service account key file from the console: https://console.cloud.google.com/iam-admin/serviceaccounts/

    composer.json

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

    php file

    # 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);