我正在尝试使用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客户端库。如何使用此库进行可恢复上传?似乎没有太多关于这方面的信息,或者我遗漏了一些东西。有没有人这样做过?请指出一些文档/样本。感谢。
答案 0 :(得分:0)
如果application / octet-stream工作,只需使用它。我们不会将媒体类型用于任何重要的事情。
那就是说,我以为我改变它以便我们接受任何媒体类型。您使用的是最新版本的Java客户端库吗?