BigQuery PHP API发送不在Google云存储中的json


BigQuery PHP API send json that isn't in Google Cloud Storage

我想用单个新行更新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媒体上传选项的信息