BigQuery - 使用 Java 客户端库上传 GZIP 压缩文件

Posted

技术标签:

【中文标题】BigQuery - 使用 Java 客户端库上传 GZIP 压缩文件【英文标题】:BigQuery - Uploading GZIP compressed files using Java Client library 【发布时间】:2015-09-14 22:56:48 【问题描述】:

我正在尝试使用 Google 的 BigQuery Java 客户端 API 上传 gzip 压缩文件。我可以毫无问题地上传普通文件。但是 gzip 失败并出现错误“无效的内容类型 'application/x-gzip'。上传必须具有内容类型 'application/octet-stream'”。

下面是我的代码。

val pid = "****"
val dsid = "****"
val tid = "****"
val br = Source.fromFile(new File("****")).bufferedReader()
val mapper = new ObjectMapper()
val schemaFields = mapper.readValue(br, classOf[util.ArrayList[TableFieldSchema]])
val tschema = new TableSchema().setFields(schemaFields)
val tr = new   TableReference().setProjectId(pid).setDatasetId(dsid).setTableId(tid)

val jc = new JobConfigurationLoad().setDestinationTable(tr)
  .setSchema(tschema)
  .setSourceFormat("NEWLINE_DELIMITED_JSON")
  .setCreateDisposition("CREATE_IF_NEEDED")
  .setWriteDisposition("WRITE_APPEND")
  .setIgnoreUnknownValues(true)

val fmr = new SimpleDateFormat("dd-MM-yyyy_HH-mm-ss-SSS")
val now = fmr.format(new Date())

val loadJob = new Job().setJobReference(new JobReference().setJobId(Joiner.on("-")
  .join("INSERT", pid, dsid, tid, now))
  .setProjectId(pid))
  .setConfiguration(new JobConfiguration().setLoad(jc))

//  val data = new FileContent(MediaType.OCTET_STREAM.toString, new   File("/Users/jegan/sessions/34560-6"))  // This works.

val data = new FileContent(MediaType.GZIP.toString, new   File("/Users/jegan/sessions/34560-6"))

val bq = BQHelper.createAuthorizedClientWithDefaultCredentials()

val job = bq.jobs().insert(pid, loadJob, data).execute()

从这个链接中,我看到我们需要使用可恢复上传来实现这一点。

https://cloud.google.com/bigquery/loading-data-post-request#resumable

但问题是,我使用的是 Google 的 Java 客户端库。如何使用此库进行可恢复上传?关于这方面的信息似乎不多,或者我遗漏了一些东西。有没有人这样做过?请指点我一些文档/示例。谢谢。

【问题讨论】:

【参考方案1】:

如果 application/octet-stream 有效,就使用它。我们不会将媒体类型用于任何重要的事情。

也就是说,我想我改变了它,以便我们可以接受任何媒体类型。您使用的是最新版本的 Java 客户端库吗?

【讨论】:

感谢您的回复杰里米。八位字节流实际上有效。我之前是手动解压缩文件的。阅读您的回复后,我尝试不转换,它确实有效。我记得在某处读到该 API 不支持 gzip 格式并对此感到厌烦。对于那个很抱歉。感谢您的帮助。

以上是关于BigQuery - 使用 Java 客户端库上传 GZIP 压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 POST 请求和 Java 客户端库加载到 BigQuery 的任何示例?

Bigquery 加载列中包含“null”文本的 CSV 文件

如何使用 PHP bigquery 客户端库对 bigquery 数据进行分页?

如何在 BigQuery java 客户端加载作业中将“ignoreUnknownValues”选项设置为“true”

Google 的 Bigquery 客户端库中的 put 方法是不是使用流式插入?

BigQuery 代码因使用 pandas python 客户端库的 MemoryError 而失败