问题描述
在这段代码中,我尝试在一个不存在的表上运行选择,getJobReference()
返回 NULL
,我很想抓住这种错误,并希望以某种方式获得错误消息.
In this code, I try to run a select on a table that doesn't exists, getJobReference()
returns NULL
and I would love to catch this kind of error, and would like to error messages obtained somehow.
出现故障时如何获取错误信息?
How to obtain the error message when something fails?
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
//$client->setDeveloperKey(API_KEY);
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name, array(
'https://www.googleapis.com/auth/bigquery',
), $key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
var_dump($_SESSION);
$bq = new Google_Service_Bigquery($client);
//build query
$sql = 'select * from example.table LIMIT 10';
$job = new Google_Service_Bigquery_Job();
$config = new Google_Service_Bigquery_JobConfiguration();
$queryConfig = new Google_Service_Bigquery_JobConfigurationQuery();
$config->setQuery($queryConfig);
$job->setConfiguration($config);
$queryConfig->setQuery($sql);
$insert = new Google_Service_Bigquery_Job($bq->jobs->insert(PROJECT_ID, $job));
$jr = $insert->getJobReference();
var_dump($jr);/*THIS RETURNS NULL */
$jobId = $jr['jobId'];
$res = new Google_Service_Bigquery_GetQueryResultsResponse($bq->jobs->getQueryResults(PROJECT_ID, $jobId));
//see the results made it as an object ok:
var_dump($res);
推荐答案
他们的 API 会自动动态创建一些类,并在创建时吃掉错误.
Their API automatically creates some classes on fly, and errors are eaten on creation.
我在调试过程之后得到了这样的错误:
I ended up after a debug process to get errors like this:
try {
$job = $bq->jobs->insert(PROJECT_ID, $job);
$status = new Google_Service_Bigquery_JobStatus();
$status = $job->getStatus();
// print_r($status);
if ($status->count() != 0) {
$err_res = $status->getErrorResult();
die($err_res->getMessage());
}
} catch (Google_Service_Exception $e) {
echo $e->getMessage();
exit;
}
一般的方法是查看您正在使用的服务是否有Status
类.只有在抛出错误时才会激活 Exception 块,也就是当 dryRun
处于活动状态时.
The general way is to see if there is a Status
class for the service you are using. The Exception block gets activated only when errors are thrown, and that is when dryRun
is active.
$config->setDryRun(true);
这篇关于运行无效的 BigQuery 作业时如何进行故障排除/获得错误响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!