Запустите BigQuery без авторизации

Я пытаюсь запустить BigQuery через PHP язык.
Поэтому, прежде всего, я могу успешно выполнить bigquery с помощью аутентификации (значит сначала попросить войти в систему, чем выполнить запрос).
Мой вопрос заключается в том, что я могу выполнить запрос в BigQuery без аутентификации?
заранее спасибо

0

Решение

Вот код, который

  • правильно создает Google_Client с помощью https://github.com/google/google-api-php-client
  • выполняет асинхронную работу
  • отображает идентификатор и статус запущенного задания

Тебе нужно иметь:

  • Сервисный аккаунт создан (что-то вроде [email protected])
  • ваш ключевой файл (.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] и [google-bigquery].
https://stackoverflow.com/questions/tagged/google-bigquery+php

2

Другие решения

Все запросы к API BigQuery должны быть аутентифицированы. Вы можете аутентифицироваться как обычная учетная запись пользователя со стандартным потоком OAuth, или вы можете аутентифицироваться как служебная учетная запись для фоновых задач (см. Ответ Pentium10).

0

По вопросам рекламы [email protected]