5

誰かがPHPでBigqueryAPIを使用する実際の例を提供できますか?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の使用方法の大まかな例でさえ、大いに役立ちます。

4

4 に答える 4

13

PHP用のGoogleAPIクライアントを使用します。これは、単一の同期クエリジョブを実行するスクリプトの簡単な例です。これは、ダウンロード可能なAPIクライアントにあるクラス名を使用します。注:SVNからプルされたソースは、異なるクラス名を備えています。クライアントシークレット、クライアントID、リダイレクトURI、およびプロジェクトIDに独自の値を追加する必要がある場所に注意してください。

<?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>
于 2012-09-13T21:05:21.917 に答える
3

以前の回答には古いコードが含まれています。次の例は、最新の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を使用し、ピングバックアドレスを持っている必要があります。

于 2015-10-08T21:04:25.650 に答える
1

例を見つけるのに多くの問題がありました。これは基本的な非同期クエリですが、現在のPHPAPIの使用法を示すことができます。非同期クエリの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);
于 2013-08-23T02:10:20.407 に答える
1
/**
 * 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;
}
于 2014-07-22T05:33:30.013 に答える