Задание ExponentialBackoff Функция перезагрузки Ошибка: вызов неопределенного метода

Я получаю следующую фатальную ошибку при запуске сценария php ниже:

Ожидание завершения работы

**Fatal error: Uncaught Error: Call to undefined method
Google\Cloud\BigQuery\CopyJobConfiguration::*reload()*
in /opt/bitnami/apache2/htdocs/test.php:53 Stack trace: #0 [internal function]:
{closure}() #1 /opt/bitnami/apache2/htdocs/vendor/google/cloud/src/Core/ExponentialBackoff.php(74):
call_user_func_array(Object(Closure), Array) #2 /opt/bitnami/apache2/htdocs/test.php(58):
Google\Cloud\Core\ExponentialBackoff->execute(Object(Closure)) #3 /opt/bitnami/apache2/htdocs/test.php(36):
copy_table('aaaa', 'bbbb', 'cccc', 'dddd', 'eeee') #4 {main} thrown in /opt/bitnami/apache2/htdocs/test.php on line 54**

.

<?php

header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

# Includes the autoloader for libraries installed with composer

require "vendor/autoload.php";

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

$client = new Google_Client();
putenv('GOOGLE_APPLICATION_CREDENTIALS='.dirname(__FILE__) . '/.ssh/xxx.json');
$client->useApplicationDefaultCredentials();

# Your Google Cloud Platform project stuff
$projectId = 'aaaa';
$datasetIdin = 'bbbb';
$datasetIdout = 'cccc';
$tableIdin = "dddd";
$tableIdout = "eeee";

$gcloud = new ServiceBuilder([
'projectId' => $projectId
]);

copy_table($projectId, $datasetIdin, $datasetIdout, $tableIdin, $tableIdout);

function copy_table($projectId, $datasetIdin, $datasetIdout, $tableIdin, $tableIdout)
{
$bigQuery = new BigQueryClient([
'projectId' => $projectId,
]);
$datasetin = $bigQuery->dataset($datasetIdin);
$datasetout = $bigQuery->dataset($datasetIdout);
$sourceTable = $datasetin->table($tableIdin);
$destinationTable = $datasetout->table($tableIdout);
$job = $sourceTable->copy($destinationTable);

// poll the job until it is complete
$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);
}
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
$error = $job->info()['status']['errorResult']['message'];
printf('Error running job: %s' . PHP_EOL, $error);
} else {
print('Table copied successfully' . PHP_EOL);
}

echo "table copied";
}

?>

Похоже, «хотя соответствующий класс не был загружен? Я использую composer.json:

{
"require": {
"google/cloud": "^0.47.0",
"google/apiclient": "^2.0"}
}

Есть идеи, почему я попадаю в эту ошибку? Спасибо!

1

Решение

Что-то не так в вашем подходе.

$job = $sourceTable->copy($destinationTable);

это не возвращает работу.

Возвращает копию конфигурация работы быть переданным либо Google\Cloud\BigQuery\Table::runJob() или же Google\Cloud\BigQuery\Table::startJob(),

поэтому вам необходимо добавить код для передачи этой функции вышеупомянутым функциям.

http://googlecloudplatform.github.io/google-cloud-php/#/docs/google-cloud/v0.47.0/bigquery/table?method=copy

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]