2016-11-18 60 views
1

我有点迷惑,因为我很难找到文件的细节例如如何将这个的BigQuery + PHP查询选择获取临时表

我想用API查询到以前的select查询在临时表中的数据BigQuery中的PHP

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'); 
     } 
} 

所以我的问题是,如果我运行此函数来执行我的例如“SELECT用户名FROM user_activities”选择查询,我怎么可以从这个选择查询得到的临时表,并从该临时表执行一个查询?

我知道BigQuery上有Jobs API,但我仍然混淆了如何实现它?

感谢

回答

0

您需要更换此部分代码:

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

有:

$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 
} 

!您还现在需要轮询,直到工作完成后,documenation链接包含在底部,那么你可以使用:

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

,这将返回你一堆信息的有关工作,如destinationTable会

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> 
) 

看到更多的文档here

+0

再次您好,我必须调用什么库?我尝试“使用Google \ Cloud \ BigQuery \ Jobs;”但总是返回Class'Google_Job'找不到?谢谢:) –

+0

我想你错过了键入'作曲家需要谷歌/ apiclient:^ 2.0'我只有自动加载供应商,没有使用指令。 https://github.com/google/google-api-php-client – Pentium10

+0

嗨,谢谢我已经成功地获得了工作数据。我的最后一个问题,当我查询“SELECT * FROM [datasetid]。[tableid]”时,它会自动执行临时表的结果吗? :) –