API — интеграция Google BigQuery с переполнением стека

Мне нужна помощь для интеграции кода Google BigQuery в PHP.
Таким образом, я могу выполнить запрос и другой вид операции из самого кода PHP.

Нужна ваша помощь и предложить мне несколько примеров работы ссылку.

Заранее спасибо.

3

Решение

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

  • правильно создает 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

5

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

Других решений пока нет …

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