Я пытаюсь запустить BigQuery через PHP язык.
Поэтому, прежде всего, я могу успешно выполнить bigquery с помощью аутентификации (значит сначала попросить войти в систему, чем выполнить запрос).
Мой вопрос заключается в том, что я могу выполнить запрос в BigQuery без аутентификации?
заранее спасибо
Вот код, который
Google_Client
с помощью https://github.com/google/google-api-php-clientТебе нужно иметь:
[email protected]
).p12
)Пример кода:
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
лайк:
Также ознакомьтесь с вопросами, помеченными [php] и [google-bigquery].
https://stackoverflow.com/questions/tagged/google-bigquery+php
Все запросы к API BigQuery должны быть аутентифицированы. Вы можете аутентифицироваться как обычная учетная запись пользователя со стандартным потоком OAuth, или вы можете аутентифицироваться как служебная учетная запись для фоновых задач (см. Ответ Pentium10).