【问题标题】:Export nested BigQuery data to cloud storage将嵌套的 BigQuery 数据导出到云存储
【发布时间】:2025-12-15 07:10:02
【问题描述】:

我正在尝试通过 API 将 bigquery 数据导出到谷歌云存储桶。我从这里改编了一个代码 sn-p https://cloud.google.com/bigquery/docs/exporting-data

Job job = table.extract(format, gcsUrl);
// Wait for the job to complete
try {
  Job completedJob = job.waitFor(WaitForOption.checkEvery(1, 
TimeUnit.SECONDS),
      WaitForOption.timeout(3, TimeUnit.MINUTES));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully
  } else {
    // Handle error case
       System.out.println(completedJob.getStatus().getError());
  }
} catch (InterruptedException | TimeoutException e) {
  // Handle interrupted wait

}

我已使用“JSON”交换格式,因为我的数据是嵌套的,无法导出到 CSV 和带有“gs://mybucket/export_*.json”的 gcsUrl。 但是错误消息告诉我以下问题:

transfer not working  BigQueryError{reason=invalid, location=null, message=Operation cannot be performed on a nested schema. Field: totals}

有什么建议吗? JSON 应该能够处理嵌套格式...

【问题讨论】:

  • 在您的代码中,format 是如何定义的?
  • 对于我使用 JSON 的格式

标签: java json google-cloud-datastore google-bigquery google-cloud-platform


【解决方案1】:

我知道这已被标记为已解决,但我在 Python 中执行此操作时遇到了同样的错误,并且 Python 中的 extract_table() 方法不接受 destination_format 参数,因此对于任何使用 Python 尝试实现此目的的人这里是如何以 JSON 格式导出它:

# Basically one has to pass job_config instead of destination_format
# Configuring Job Config to export data as JSON
job_config = bigquery.job.ExtractJobConfig()
job_config.destination_format = bigquery.DestinationFormat.NEWLINE_DELIMITED_JSON

extract_job = client.extract_table(
    table_id,
        destination_uri,
        job_config=job_config,
        # Location must match that of the source table.
        location="US"
)

extract_job.result()

【讨论】:

    【解决方案2】:

    参考destinationFormat option,您应该为format 变量设置"NEWLINE_DELIMITED_JSON",以便导出为JSON。

    【讨论】:

      最近更新 更多