Примеры Bigquery + PHP

Может ли кто-нибудь предоставить рабочий пример использования API Bigquery с PHP. Я вижу, что есть примеры для python и java, но ничего не могу найти для PHP.

Вот браузер bigquery https://bigquery.cloud.google.com/?pli=1

Например, вы можете запустить этот SQL в браузере

SELECT corpus,count(*) FROM publicdata:samples.shakespeare group by corpus limit 5; 

Я хочу имитировать аналогичный вызов через PHP.

Даже пример того, как использовать PHP API, очень поможет.

Solutions Collecting From Web of "Примеры Bigquery + PHP"

Используйте API API Google для PHP. Вот простой пример скрипта, который выполняет одно синхронное задание запроса. Это использует имена классов, найденные в загружаемом клиенте API. Примечание: источник, извлеченный из SVN, имеет разные имена классов. Обратите внимание, где вы должны добавить свои собственные значения для секретности клиента, идентификатора клиента, перенаправления URI и идентификатора проекта.

 <?php require_once 'google-api-php-client/src/apiClient.php'; require_once 'google-api-php-client/src/contrib/apiBigqueryService.php'; session_start(); $client = new apiClient(); // Visit https://developers.google.com/console to generate your // oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri. $client->setClientId('XXXXXXXXXXXXXXX.apps.googleusercontent.com'); $client->setClientSecret('XXXXXXXXXXXXXXXXXXX'); $client->setRedirectUri('http://www_your_domain.com/somescript.php'); // Your project id $project_id = 'XXXXXXXXXXXXXXXXXXXX'; // Instantiate a new BigQuery Client $bigqueryService = new apiBigqueryService($client); if (isset($_REQUEST['logout'])) { unset($_SESSION['access_token']); } if (isset($_SESSION['access_token'])) { $client->setAccessToken($_SESSION['access_token']); } else { $client->setAccessToken($client->authenticate()); $_SESSION['access_token'] = $client->getAccessToken(); } if (isset($_GET['code'])) { $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); } ?> <!doctype html> <html> <head> <title>BigQuery API Sample</title> </head> <body> <div id='container'> <div id='top'><h1>BigQuery API Sample</h1></div> <div id='main'> <?php $query = new QueryRequest(); $query->setQuery('SELECT TOP( title, 10) as title, COUNT(*) as revision_count FROM [publicdata:samples.wikipedia] WHERE wp_namespace = 0;'); $jobs = $bigqueryService->jobs; $response = $jobs->query($project_id, $query); // Do something with the BigQuery API $response data print_r($response); ?> </div> </div> </body> </html> с <?php require_once 'google-api-php-client/src/apiClient.php'; require_once 'google-api-php-client/src/contrib/apiBigqueryService.php'; session_start(); $client = new apiClient(); // Visit https://developers.google.com/console to generate your // oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri. $client->setClientId('XXXXXXXXXXXXXXX.apps.googleusercontent.com'); $client->setClientSecret('XXXXXXXXXXXXXXXXXXX'); $client->setRedirectUri('http://www_your_domain.com/somescript.php'); // Your project id $project_id = 'XXXXXXXXXXXXXXXXXXXX'; // Instantiate a new BigQuery Client $bigqueryService = new apiBigqueryService($client); if (isset($_REQUEST['logout'])) { unset($_SESSION['access_token']); } if (isset($_SESSION['access_token'])) { $client->setAccessToken($_SESSION['access_token']); } else { $client->setAccessToken($client->authenticate()); $_SESSION['access_token'] = $client->getAccessToken(); } if (isset($_GET['code'])) { $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); } ?> <!doctype html> <html> <head> <title>BigQuery API Sample</title> </head> <body> <div id='container'> <div id='top'><h1>BigQuery API Sample</h1></div> <div id='main'> <?php $query = new QueryRequest(); $query->setQuery('SELECT TOP( title, 10) as title, COUNT(*) as revision_count FROM [publicdata:samples.wikipedia] WHERE wp_namespace = 0;'); $jobs = $bigqueryService->jobs; $response = $jobs->query($project_id, $query); // Do something with the BigQuery API $response data print_r($response); ?> </div> </div> </body> </html> 

Предыдущие ответы имеют устаревший код. Следующий пример должен работать с более последним API ( https://github.com/google/google-api-php-client/blob/master/src/Google/Service/Bigquery.php ):

 require_once '../source/application/libraries/Google/autoload.php'; public function createGClient(){ define("CLIENT_ID", "{PROJECT_ID}.apps.googleusercontent.com"); define("SERVICE_ACCOUNT_NAME","{SERVICE_ACCOUNT EMAIL FROM CONSOLE}"); define("KEY_FILE",'../{FILENAME}.p12'); define("PROJECT_ID","{PROJECT_ID}"); define("DATASET_ID","{DATASET_ID}"); define("TABLE_ID",""); $this->client = new Google_Client(); $this->client->setApplicationName("{NAME}"); $key = file_get_contents(KEY_FILE); $this->client->setAssertionCredentials(new Google_Auth_AssertionCredentials(SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/bigquery'), $key, "notasecret")); $this->client->setClientId(CLIENT_ID); $this->service = new Google_Service_Bigquery($this->client); } public function runQuery(){ // To see the a list of tables print_r($this->service->tables->listTables(PROJECT_ID, DATASET_ID)); // To see details of a table print_r($this->service->tables->get(PROJECT_ID, DATASET_ID, TABLE_ID)); // To query a table $jobs = $this->service->jobs; $query = new Google_Service_Bigquery_QueryRequest(); $query->setQuery("SELECT * FROM wherever;"); $response = $jobs->query(PROJECT_ID, $query); print_r($response); } 

Это модифицированная версия образца, приведенная по адресу: http://michaelheap.com/using-the-php-sdk-with-google-bigquery/ для учетной записи службы. Чтобы использовать учетную запись клиента, вам необходимо использовать oauth2 и иметь адрес pingback.

У меня было много проблем с поиском примеров. Это базовый асинхронный запрос, но он может продемонстрировать текущее использование PHP API. Здесь вы можете увидеть пример API-интерфейса Python / Java для асинхронных запросов: https://developers.google.com/bigquery/querying-data

Обратите внимание, что я не ссылаюсь на то, как настроить учетные данные $ client, так как это хорошо описано в других местах.

  $bq = new Google_BigqueryService($client); //build query $sql = 'select * from example.table LIMIT 10'; $job = new Google_Job(); $config = new Google_JobConfiguration(); $queryConfig = new Google_JobConfigurationQuery(); $config->setQuery($queryConfig); $job->setConfiguration($config); $queryConfig->setQuery($sql); $insert = new Google_Job($bq->jobs->insert(PROJECT_ID,$job)); $jr = $insert->getJobReference(); $jobId = $jr['jobId']; $res = new Google_GetQueryResultsResponse($bq->jobs->getQueryResults(PROJECT_ID, $jobId)); //see the results made it as an object ok: var_dump($results); 
 /** * Executes and returns bigQuery response with 'INTERACTIVE' priority * $this->service is the object of Google_Service_Bigquery * $this->service = new Google_Service_Bigquery($this->client); * @param String $sql * @return Google_Service_Bigquery_GetQueryResultsResponse */ public function execute($sql) { $job = new Google_Service_Bigquery_Job(); $config = new Google_Service_Bigquery_JobConfiguration(); $queryConfig = new Google_Service_Bigquery_JobConfigurationQuery(); $queryConfig->setQuery($sql); /** * Priority is set to INTERACTIVE for faster response options are 'BATCH'/'INTERACTIVE' */ $queryConfig->setPriority("INTERACTIVE"); $config->setQuery($queryConfig); $job->setId(md5("$sql_{microtime()}")); $job->setConfiguration($config); $running = $this->service->jobs->insert('divine-builder-586', $job); /* @var $running Google_Service_Bigquery_Job */ $jr = $running->getJobReference(); $jobId = $jr['jobId']; $res = $this->service->jobs->getQueryResults('divine-builder-586', $jobId); /* @var $res Google_Service_Bigquery_GetQueryResultsResponse */ return $res; }