googleBigQuery: уловимая фатальная ошибка: аргумент 1 передан в Google\Cloud\BigQuery\BigQueryClient::runQuery()

Я застрял с этой ошибкой, дайте мне знать, если есть обходные пути:

googleBigQuery: Catchable fatal error: Argument 1 passed to

Google\Cloud\BigQuery\BigQueryClient::runQuery() must be an instance

of Google\Cloud\BigQuery\JobConfigurationInterface, string given

Пример кода:

<?php

require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\BigQuery\BigQueryClient;

// get the project ID as the first argument    
$projectId = 'bigquery-public-data';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

$query = 'SELECT TOP(corpus, 10) as title, COUNT(*) as unique_words ' .
         'FROM [bigquery-public-data:samples.shakespeare]';
         
$options = ['useLegacySql' => true];
$queryResults = $bigQuery->runQuery($query, $options);

if ($queryResults->isComplete()) {
    $i = 0;
    $rows = $queryResults->rows();
    foreach ($rows as $row) {
        printf('--- Row %s ---' . PHP_EOL, ++$i);
        foreach ($row as $column => $value) {
            printf('%s: %s' . PHP_EOL, $column, $value);
        }
    }
    printf('Found %s row(s)' . PHP_EOL, $i);
} else {
    throw new Exception('The query failed to complete');
}

person web.dev.etc    schedule 17.01.2018    source источник
comment
У вас низкая ставка. Важно для SO, вы должны отметить принятые ответы, поставив галочку слева от опубликованного ответа под голосованием. Это повысит вашу ставку. Посмотрите, как это работает, перейдя по этой ссылке: meta.stackoverflow.com/questions/5234/   -  person Pentium10    schedule 17.01.2018


Ответы (1)


Я публикую для вас полный пример, так как это намного проще.

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

Вам необходимо получить файл ключа сервисного аккаунта из консоли: 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);
person Pentium10    schedule 17.01.2018
comment
Привет, @ Pentium10, я пробовал код выше, но получаю другую ошибку Неустранимая ошибка: класс 'Google_Client' не найден в C:\xampp\htdocs\gbq-test\google-api-php-client-master\sample-bigquery.php в сети 9.. - person web.dev.etc; 17.01.2018
comment
вам нужно применить и включить правильный composer.json - person Pentium10; 17.01.2018
comment
На самом деле я загрузил файлы библиотеки с github.com/google/google-api-php- клиент и изменил файл композитора, как вы предложили.. можете ли вы предложить какой-либо обходной путь.. - person web.dev.etc; 17.01.2018
comment
эта библиотека больше не поддерживается, убедитесь, что вы не запутались, есть две библиотеки github.com/ googlecloudplatform/google-cloud-php ссылки на файл composer.json "google/cloud": "^0.13.0" - person Pentium10; 17.01.2018
comment
Не могли бы вы поделиться списком папок из вашей библиотеки, которую я тоже пробовал с github.com/googlecloudplatform/google-cloud-php, но не помогает.. - person web.dev.etc; 18.01.2018