我从PHP脚本查询Big Query表并获得结果。我想将结果保存在新的结果表中,以备将来使用......
答案 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
获取目标表信息(tableId
和configuration.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;
}