BigQuery - 使用Java Client库上传GZIP压缩文件

时间:2015-09-14 22:56:48

标签: google-bigquery

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:0)

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

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