我想用单个新行更新BigQuery中的现有表。
我发现了一个例子,如果我在谷歌云存储的文件中有json,如何做到这一点:
$confLoad->setSourceUris(array(
"gs://json_file_bucket/some_name.json"
));
$conf = new 'Google_JobConfiguration;
$conf->setLoad($confLoad);
$job->setConfiguration($conf);
$service = new 'Google_BigQueryService($this->client);
$running = $service->jobs->insert($this->projectId, $job);
但是我不明白没有外部json文件是如何实现的。
如果您只添加一行,最好的选择是使用TableData.insertAll()
方法,它允许您一次导入一行或几行。更多信息在这里。
下面是python的代码(我意识到你正在使用PHP,但它应该有点类似):
body = {"rows":[
{"json": {"column_name":7.7,}}
]}
response = bigquery.tabledata().insertAll(
projectId=PROJECT_ID,
datasetId=DATASET_ID,
tableId=TABLE_ID,
body=body).execute()
另一个选择是使用'media upload'。这与向作业配置中添加media_body参数一样简单,其中media_body包含正在加载的数据(并且不需要指定sourceUris
)。例如:
job = {
'configuration': {
'load': load_config # specify destination table here
}
}
result = jobs.insert(
projectId=project_id,
body=job,
media_body=media_body).execute()
这里有更多关于PHP媒体上传选项的信息