Используя PHP, я могу запустить BigQuery вручную, но мне нужно, чтобы BigQuery запускался как автоматическое задание cron (без входа в Gmail). Как бы я это сделал? Благодарю.
Вам нужно создать учетную запись службы в консоли разработчика, чем вы сможете использовать из кода. Вот код, который мы имеем в наших файлах cron.
Google_Client
используя https://github.com/google/google-api-php-client Тебе нужно иметь:
...@developer.gserviceaccount.com
) .p12
) образец кода:
function getGoogleClient($data = null) { global $service_token_file_location, $key_file_location, $service_account_name; $client = new Google_Client(); $client->setApplicationName("Client_Library_Examples"); $old_service_token = null; $service_token = @file_get_contents($service_token_file_location); $client->setAccessToken($service_token); $key = file_get_contents($key_file_location); $cred = new Google_Auth_AssertionCredentials( $service_account_name, array( 'https://www.googleapis.com/auth/bigquery', 'https://www.googleapis.com/auth/devstorage.full_control' ), $key ); $client->setAssertionCredentials($cred); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); $service_token = $client->getAccessToken(); } return $client; } $client = getGoogleClient(); $bq = new Google_Service_Bigquery($client); /** * @see https://developers.google.com/bigquery/docs/reference/v2/jobs#resource */ $job = new Google_Service_Bigquery_Job(); $config = new Google_Service_Bigquery_JobConfiguration(); $config->setDryRun(false); $queryConfig = new Google_Service_Bigquery_JobConfigurationQuery(); $config->setQuery($queryConfig); $job->setConfiguration($config); $destinationTable = new Google_Service_Bigquery_TableReference(); $destinationTable->setDatasetId(DATASET_ID); $destinationTable->setProjectId(PROJECT_ID); $destinationTable->setTableId('table1'); $queryConfig->setDestinationTable($destinationTable); $sql = "select * from publicdata:samples.github_timeline limit 10"; $queryConfig->setQuery($sql); try { // print_r($job); // exit; $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; } //print_r($job); $jr = $job->getJobReference(); //var_dump($jr); $jobId = $jr['jobId']; if ($status) $state = $status['state']; echo 'JOBID:' . $jobId . " "; echo 'STATUS:' . $state;
Вы можете получить результаты с помощью:
$res = $bq->jobs->getQueryResults(PROJECT_ID, $_GET['jobId'], array('timeoutMs' => 1000)); if (!$res->jobComplete) { echo "Job not yet complete"; exit; } echo "<p>Total rows: " . $res->totalRows . "</p>\r\n"; //see the results made it as an object ok //print_r($res); $rows = $res->getRows(); $r = new Google_Service_Bigquery_TableRow(); $a = array(); foreach ($rows as $r) { $r = $r->getF(); $temp = array(); foreach ($r as $v) { $temp[] = $v->v; } $a[] = $temp; } print_r($a);
Вы можете увидеть здесь классы, которые вы можете использовать для других вызовов BigQuery. Когда вы читаете файл, пожалуйста, знайте, что файл создается из других источников, поэтому он выглядит странным для PHP, и вам нужно научиться его читать, чтобы иметь возможность использовать методы из него.
https://github.com/google/google-api-php-client/blob/master/src/Google/Service/Bigquery.php
как:
Также проверьте теги с тегами [php] и [google-bigquery] https://stackoverflow.com/questions/tagged/google-bigquery+php