2016-11-18 8 views
1

ich ein wenig verwirren, weil ich hart Detail Beispiel der Dokumentation zu finden, wie man dieseBigQuery + PHP Abfrage Select Get Temporary Table

ich aus früheren Auswahlabfrage in BigQuery API auf PHP auf temporäre Tabelle abzufragen Daten wollen

function run_query($query, $useLegacySql, &$result) 
{ 
     $builder = new ServiceBuilder([ 
       'projectId' => 'PROJECTID', 
     ]); 

     $job = new Google_Job(); 

     $bigQuery = $builder->bigQuery(); 

     $queryResults = $bigQuery->runQuery(
      $query, 
      ['useLegacySql' => $useLegacySql]); 

     if ($queryResults->isComplete()) 
     { 
      $i = 0; 
      $rows = $queryResults->rows(); 

      foreach ($rows as $row) 
      { 
       $i++; 

       $result[$i] = $row; 
      } 
     } 
     else 
     { 
      throw new Exception('The query failed to complete'); 
     } 
} 

Also meine Frage ist, ob ich diese Funktion zu starten meine Auswahlabfrage zum Beispiel „SELECT username FROM user_activities“ auszuführen, wie kann ich die temporäre Tabelle aus dieser Auswahlabfrage erhalten und die nächste Abfrage aus dieser temporären Tabelle ausführen?

Ich weiß, gibt es Jobs API auf BigQuery, aber ich verwechsle immer noch, wie es zu implementieren?

Dank

Antwort

0

Sie müssen diesen Abschnitt des Codes ersetzen:

$queryResults = $bigQuery->runQuery(
      $query, 
      ['useLegacySql' => $useLegacySql]); 

mit:

$job = $bigQuery->runQueryAsJob($query); 
$isComplete = false; 
$queryResults = $job->queryResults(); 

while (!$isComplete) { 
    sleep(1); // let's wait for a moment... 
    $queryResults->reload(); // trigger a network request 
    $isComplete = $queryResults->isComplete(); // check the query's status 
} 

!!! Sie auch brauchen jetzt abfragen, bis ein Auftrag abgeschlossen ist, der documenation Link im Boden enthalten ist, dann können Sie verwenden:

$info=$job->info(); 
print_r($info); 

und dies gibt Ihnen ein paar Informationen über Ihre Arbeit, wie die Destination

Array 
(
    [kind] => bigquery#job 
    [etag] => "<edited>" 
    [id] => <edited> 
    [selfLink] => https://www.googleapis.com/bigquery/v2/projects/<edited> 
    [jobReference] => Array 
     (
      [projectId] => <edited> 
      [jobId] => <edited> 
     ) 

    [configuration] => Array 
     (
      [query] => Array 
       (
        [query] => SELECT repository_url, 
     repository_has_downloads 
FROM [publicdata:samples.github_timeline] 
LIMIT 10 
        [destinationTable] => Array 
         (
          [projectId] => <edited> 
          [datasetId] => <edited> 
          [tableId] => anon734f2eebd13d01c49c65dce7359aeab1df285473 
         ) 

        [createDisposition] => CREATE_IF_NEEDED 
        [writeDisposition] => WRITE_TRUNCATE 
       ) 

     ) 

    [status] => Array 
     (
      [state] => RUNNING 
     ) 

    [statistics] => Array 
     (
      [creationTime] => 1479487171996 
      [startTime] => 1479487172576 
     ) 

    [user_email] => <edited> 
) 

weitere Dokumentation here

+0

Hallo wieder, welche Bibliothek muss ich anrufen? Ich versuche, Google \ Cloud \ BigQuery \ Jobs zu verwenden. aber immer zurück Klasse "Google_Job" nicht gefunden? Danke :) –

+0

Ich denke, Sie verpasst tippen 'Komponist erfordern Google/apiclient:^2.0' Ich habe nur Autoload Vendor, keine Verwendung Richtlinien. https://github.com/google/google-api-php-client – Pentium10

+0

Hallo danke Ich habe die Jobdaten erfolgreich erhalten. Meine letzte Frage also, wenn ich abfrage "SELECT * FROM [Datei-ID]. [TableId]" wird es automatisch das Ergebnis aus der temporären Tabelle ausführen? :) –

Verwandte Themen