Пример BigQuery для текущего API Google в переполнении стека

Все вопросы о примерах уже 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));
?>

Но я получаю Fatal errors около Google_Dataset а также Google_Table не определен…

2

Решение

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

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

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

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

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