我正在尝试从 PHP 的 Google BigQuery 客户端 执行存储过程。
我刚刚替换了存储过程来代替查询。
require 'vendor/autoload.php';
// $query = <<<ENDSQL
// SELECT
// CONCAT(
// 'https://stackoverflow.com/questions/',
// CAST(id as STRING)) as url,
// view_count
// FROM `bigquery-public-data.stackoverflow.posts_questions`
// WHERE tags like '%google-bigquery%'
// ORDER BY view_count DESC
// LIMIT 10;
// ENDSQL;
use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;
/** Uncomment and populate these variables in your code */
$projectId = 'project id';
$query = 'CALL spname';
$bigQuery = new BigQueryClient([
'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
print('Waiting for job to complete' . PHP_EOL);
$job->reload();
if (!$job->isComplete()) {
throw new Exception('Job has not yet completed', 500);
}
});
$queryResults = $job->queryResults();
$i = 0;
foreach ($queryResults as $row) {
printf('--- Row %s ---' . PHP_EOL, ++$i);
foreach ($row as $column => $value) {
printf('%s: %s' . PHP_EOL, $column, json_encode($value));
}
}
printf('Found %s row(s)' . PHP_EOL, $i);
执行脚本后出现以下错误。请帮助如何执行存储过程。
我们面临的错误来自 google 大查询库,文件名:google/cloud-bigquery/src/QueryResults.php
注意:未定义索引:第 162 行 /var/www/html/bigquery/vendor/google/cloud-bigquery/src/QueryResults.php 中的架构
发生这种情况的原因有多种,但似乎适合您场景的一个原因是您的存储过程中没有
SELECT
。
尝试修改您的 SP,在 SELECT 'successful' AS status;
之前添加类似 END
的内容。
另外,您可以添加检查以确保 $queryResults 在迭代之前有数据
if ($queryResults->isComplete() && $queryResults->rows()->valid()) {
foreach ($queryResults as $row) {
// logic here
}
} else {
echo 'No results returned from the stored procedure.';
}