gpt4 book ai didi

php - PHP 中当前 Google API 的 BigQuery 示例

转载 作者:行者123 更新时间:2023-12-02 02:14:05 26 4
gpt4 key购买 nike

所有关于示例的问题都好像有 2 年的历史了,我找不到适用于当前 API 客户端版本 (https://github.com/google/google-api-php-client) 的任何工作示例。每个人都遗漏了一些东西或抛出异常....

有人可以提供工作示例吗?任何地方都没有任何文档。

这是最有效的:

<?php
require_once 'inc/google-api/autoload.php'; // or wherever autoload.php is located

$client = new Google_Client();
$client->setApplicationName("whatever");
$client->setDeveloperKey("some key");

$service = new Google_Service_Bigquery($client);



$postBody = "[
'datasetReference' => [
'datasetId' => $datasetId,
'projectId' => $projectId,
],
'friendlyName' => $name,
'description' => $description,
'access' => [
['role' => 'READER', 'specialGroup' => 'projectReaders'],
['role' => 'WRITER', 'specialGroup' => 'projectWriters'],
['role' => 'OWNER', 'specialGroup' => 'projectOwners'],
],
]";

$dataset = $service->datasets->insert($projectId, new Google_Dataset($postBody));

$postBody = "[
'tableReference' => [
'projectId' => 'test_project_id',
'datasetId' => 'test_data_set',
'tableId' => 'test_data_table'
]
]";

$table = $service->tables->insert($projectId, $datasetId, new Google_Table($postBody));
?>

但我收到有关 Google_DatasetGoogle_Table 未定义的 fatal error ...

最佳答案

这是一段代码

  • 正确创建一个 Google_Client
  • 异步运行作业
  • 显示正在运行的作业 ID 和状态

你需要:

  • 已创建服务帐户(类似于 ...@developer.gserviceaccount.com)
  • 您的 key 文件(.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 - PHP 中当前 Google API 的 BigQuery 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27985766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com