Google Beispielcodes # 1Google BigQuery RunQuery Proben und die richtige Art und Weise zu verwenden, während Schlaf die queryresult
$queryResults = $bigQuery->runQuery('SELECT commit FROM [bigquery-public-data:github_repos.commits] LIMIT 100');
$isComplete = $queryResults->isComplete();
while (!$isComplete) {
sleep(1); // let's wait for a moment...
$queryResults->reload(); // trigger a network request
$isComplete = $queryResults->isComplete(); // check the query's status
}
foreach ($queryResults->rows() as $row) {
echo $row['commit'];
}
In Beispielcode # 1, um zu überprüfen, ob es einige Fehler bei Google BigQuery sind Seite, dann wird PHP-Skript in einer Endlosschleife stecken, richtig?
Google Beispielcode # 2
$queryResults = $bigQuery->runQuery(
$query,
['useLegacySql' => $useLegacySql]);
# [END run_query]
# [START print_results]
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');
}
In Beispielcode # 2, könnte die BigQuery noch ausgeführt werden, bevor es abgeschlossen ist, aber unser PHP-Code bereits falsche Ausnahme zu früh werfen konnte.
Würde die richtige Lösung wie folgt aussehen?
$counter = 0;
while (!$isComplete && $counter < 100) {
sleep(1); // let's wait for a moment...
$queryResults->reload(); // trigger a network request
$isComplete = $queryResults->isComplete(); // check the query's status
#counter++;
}
So werden wir BigQuery Zeit geben, um die Abfrage zu beenden, aber wir werden nur für eine angemessene Zeit warten, bevor wir Fehler Ausnahme auslösen.