如何从PHP脚本中保存Bigquery结果作为表?

时间:2014-03-19 10:21:01

标签: google-bigquery

我从PHP脚本查询Big Query表并获得结果。我想将结果保存在新的结果表中,以备将来使用......

3 个答案:

答案 0 :(得分:2)

您需要通过调用设置destionationTable,结果将写入您设置的表格。

https://developers.google.com/bigquery/querying-data#asyncqueries

答案 1 :(得分:2)

提到的@ Pentium10选项有效,但是当你已经有查询结果而你想保存它们时,还有另一种方法可以做到。

BigQuery中的所有查询都会生成输出表。如果您没有指定自己的目标表,则输出表将是一个自动生成的表,仅持续24小时。但是,您可以将该临时表复制到新的目标表,并且只要您愿意,它就会一直存在。

要获取目标表,您需要查找作业(如果使用jobs.query() api,则作业ID位于响应的jobReference字段中(请参阅here)。在工作中,您可以将jobs.get()与该职位ID一起使用,并且您将从datasetId获取目标表信息(tableIdconfiguration.query.destinationTable)(作业对象描述为here)。

您可以使用填充了copy配置部分的jobs.insert()调用将该目标表复制到您自己的表中。有关复制表格的信息是here

答案 2 :(得分:0)

将参数传递给BQ调用很棘手。

这应该在更新的云库版本中起作用:

public function runBigQueryJobIntoTable($query, $project, $dataset, $table)
{
    $bigQuery = new BigQueryClient(['projectId' => $project]);

    $destinationTable = $bigQuery->dataset($dataset)->table($table);
    $queryJobConfig = $bigQuery->query($query)->destinationTable($destinationTable);

    $job = $bigQuery->startQuery($queryJobConfig);
    $queryResults = $job->queryResults();

    while (!$queryResults->isComplete()) {
        sleep(1);
        $queryResults->reload();
    }

    return true;
}

对于旧版本:

public function runBigQueryJobIntoTable($query, $project, $dataset, $table)
{
    $bigQuery = new BigQueryClient(['projectId' => $project]);

    $jobConfig = [
        'destinationTable' => [
            'projectId' => $project,
            'datasetId' => $dataset,
            'tableId' => $table
        ]
    ];

    $job = $bigQuery->runQueryAsJob($query, ['jobConfig' => $jobConfig]);
    $queryResults = $job->queryResults();

    while (!$queryResults->isComplete()) {
        sleep(1);
        $queryResults->reload();
    }

    return true;
}