【问题标题】:Google cloud bigquery php client library return an error?谷歌云 bigquery php 客户端库返回错误?
【发布时间】:2026-01-20 16:15:02
【问题描述】:

RequestWrapper.php 第 257 行中的 ServiceException: count():参数必须是数组或者实现了Countable的对象

以下是我在 laravel 5 中编写的代码。

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ServiceBuilder;

public function __construct()
{
    $this->getservicekey = env('GOOGLE_APPLICATION_CREDENTIALS');
}
//Function where i write code for getting data from gcloud bigquery
public function index()
{
    // Authenticate using Service Account Key
    $cloud = new ServiceBuilder([
        'keyFilePath' => $this->getservicekey
    ]);

    $bigQuery = $cloud->bigQuery();

    $query = 'SELECT * FROM [publicdata:wikipedia.samples] limit 10';

    $queryJobConfig = $bigQuery->query($query);
    $queryResults = $bigQuery->runQuery($queryJobConfig);
    foreach ($queryResults->rows() as $row) {
        print_r($row);
    }
}

下面是详细显示错误的图像文件。

【问题讨论】:

    标签: php laravel-5.2 google-bigquery


    【解决方案1】:

    我运行了您提供的代码 sn-p,但无法得出与您看到的相同的错误。您能否分享您的 PHP 版本和您正在使用的 BigQuery 客户端库的版本?希望我可以从那里帮助调试,因为该错误不是很有帮助。

    然而,我确实遇到的错误与格式有关。

    首先要注意的是,客户端库默认使用标准 SQL 格式,而您的查询使用传统格式。此外,FROM 子句需要以下格式:

    [project_name:datasetId.tableId]
    

    如果您将代码更新为:

    $query = 'SELECT * FROM [publicdata:samples.wikipedia] limit 10';
    $queryJobConfig = $bigQuery->query($query)
        ->useLegacySql(true);
    

    我怀疑你应该开始得到一些结果。

    【讨论】:

    • 我在 laravel 中使用这个库。我已经在问题中提到了。
    • 我问的是您使用的是哪个版本的 BigQuery 客户端库,而不是 laravel。
    • @HassanRaza 您是否根据这个有用的答案更改了代码?你在这里有更多的官方信息:googlecloudplatform.github.io/google-cloud-php/#/docs/…