Интеграция Google BigQuery с PHP

Мне нужна помощь для интеграции кода bigquery google в PHP. Поэтому я могу выполнять запрос и другие виды операций с самого PHP-кода.

Нужна ваша помощь и предложите мне ссылку на некоторые рабочие примеры.

Заранее спасибо.

Вот код, который

  • правильно создает Google_Client используя https://github.com/google/google-api-php-client
  • запускает работу async
  • отображает текущий идентификатор задания и статус

Тебе нужно иметь:

  • создана учетная запись службы (что-то вроде ...@developer.gserviceaccount.com )
  • ваш ключевой файл ( .p12 )
  • service_token_file_location (доступный путь для хранения JSON из рукопожатия, он будет действителен в течение 1 часа)

образец кода:

 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

как:

  • Google_Service_Bigquery_TableRow

Также проверьте теги с тегами [php] и [google-bigquery] https://stackoverflow.com/questions/tagged/google-bigquery+php