Google BigQuery 与 PHP 集成
Google BigQuery integration with PHP
我需要帮助将 google bigquery 代码集成到 PHP。
所以我可以从 php 代码本身执行查询和其他类型的操作。
需要你的帮助并向我推荐一些工作示例link。
提前致谢。
这是
的代码
- 使用 https://github.com/google/google-api-php-client
正确创建 Google_Client
- 异步运行作业
- 显示 运行 作业 ID 和状态
您需要:
- 已创建服务帐户(类似于
...@developer.gserviceaccount.com
)
- 您的密钥文件 (
.p12
)
- service_token_file_location(握手后JSON的可写路径,有效期为1h)
代码示例:
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://whosebug.com/questions/tagged/google-bigquery+php
您可以使用以下步骤
- 在云端控制台中,在项目select或页面上,select或创建云端项目
- 启用 BigQuery API。
- 设置身份验证
- 在 Cloud Console 中,转到“创建服务帐户密钥”页面。
- 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐户密钥的 JSON 文件的路径。此变量仅适用于您当前的 shell 会话,因此如果您打开一个新会话,请再次设置该变量
如需完整指南,请参阅此文档here
我需要帮助将 google bigquery 代码集成到 PHP。 所以我可以从 php 代码本身执行查询和其他类型的操作。
需要你的帮助并向我推荐一些工作示例link。
提前致谢。
这是
的代码- 使用 https://github.com/google/google-api-php-client 正确创建
- 异步运行作业
- 显示 运行 作业 ID 和状态
Google_Client
您需要:
- 已创建服务帐户(类似于
...@developer.gserviceaccount.com
) - 您的密钥文件 (
.p12
) - service_token_file_location(握手后JSON的可写路径,有效期为1h)
代码示例:
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://whosebug.com/questions/tagged/google-bigquery+php
您可以使用以下步骤
- 在云端控制台中,在项目select或页面上,select或创建云端项目
- 启用 BigQuery API。
- 设置身份验证
- 在 Cloud Console 中,转到“创建服务帐户密钥”页面。
- 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐户密钥的 JSON 文件的路径。此变量仅适用于您当前的 shell 会话,因此如果您打开一个新会话,请再次设置该变量
如需完整指南,请参阅此文档here