【问题标题】:BigQuery + PHP Query Select Get Temporary TableBigQuery + PHP 查询选择获取临时表
【发布时间】:2017-04-01 23:13:15
【问题描述】:

我有点困惑,因为我很难找到文档的详细示例如何做到这一点

我想使用 PHP 上的 API 从 BigQuery 中的先前选择查询中查询临时表中的数据

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 username FROM user_activities”,我怎样才能从这个选择查询中获取临时表并从这个临时表中执行下一个查询?

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

谢谢

【问题讨论】:

    标签: php google-bigquery


    【解决方案1】:

    你需要替换这部分代码:

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

    !!!您现在还需要投票,直到一个工作完成,文档链接包含在底部,然后您可以使用:

    $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

    【讨论】:

    • 您好,我必须调用哪个库?我尝试“使用 Google\Cloud\BigQuery\Jobs;”但总是返回 Class 'Google_Job' not found?谢谢:)
    • 我想你错过了输入composer require google/apiclient:^2.0 我只有自动加载供应商,没有使用指令。 github.com/google/google-api-php-client
    • 您好,谢谢我已成功获取工作数据。我的最后一个问题是,当我查询“SELECT * FROM [datasetid].[tableid]”时,它会自动执行临时表的结果吗? :)
    • 试一试,如果你把临时表的名字,它会
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多