BigQuery加载本地文件不起作用,位置有问题



尝试复制此示例:https://cloud.google.com/bigquery/docs/samples/bigquery-load-from-file

  • CCD_ 1为空;我们";位置
  • 对于任何其他位置,404位于bigQuery.writer(job, writeChannelConfiguration)

的工作原理

  • 连接工作
  • 表是通过java API创建的,数据位置设置为us(我不知道为什么)。有可能控制它吗?我更喜欢"europe-west2"

这是我的scala代码:

val table = createBigQueryTable(metadata, datasetName, tableName)
log.info(s"table: $table")
val tableId = table.getTableId
log.info(s"tableId: $tableId")
// GenericData{classInfo=[datasetId, projectId, tableId], 
// {datasetId=my_dataset, projectId=my_project_id tableId=my_new_table}} 
val writeChannelConfiguration: WriteChannelConfiguration = WriteChannelConfiguration
.newBuilder(tableId)
.setFormatOptions(FormatOptions.parquet())
.build
// tried these locations: "us", "europe-west2", "US"
val job = JobId.newBuilder().setLocation(location).build()
// throws 404 for all except location = "us"
// but writer.getJob is null for "us"
val writer: TableDataWriteChannel = bigQuery.writer(job, writeChannelConfiguration)
val stream: OutputStream = Channels.newOutputStream(writer)
Files.copy(parquetGzipFile.toPath, stream)
// Get load job
val jobInProgress = writer.getJob
// returns null for location = "us"

log.info(s"jobInProgress: $jobInProgress")
val completedJob = jobInProgress.waitFor()
log.info(s"completedJob: $completedJob")
val stats = completedJob.getStatistics
log.info(s"stats: $stats")
stats

它应该如何工作?

顺便说一下,这个API会加载100 mb的文件吗?

UPD:

  • 答案解释了位置的问题
  • 答案提供了有关工作状态轮询的线索

由于某些原因,引用的示例不起作用。用工作代码段帮助。

// Set location, project explicitly for JobId
val jobId: JobId = JobId.newBuilder()
.setLocation(location)
.setProject(table.getTableId.getProject)
// generates UUID under the hood. 
.setRandomJob()
.build()
log.info(s"job: $jobId")
val writer: TableDataWriteChannel = bigQuery.writer(jobId, writeChannelConfiguration)
val stream: OutputStream = Channels.newOutputStream(writer)
Files.copy(parquetGzipFile.toPath, stream)
writer.close() // close it
// Get load job by jobId
val jobInProgress = bigQuery.getJob(jobId)
log.info(s"jobInProgress: $jobInProgress")
val completedJob = jobInProgress.waitFor()
log.info(s"completedJob: $completedJob")
val stats = completedJob.getStatistics.asInstanceOf[JobStatistics]
log.info(s"stats: $stats")

回答404错误和writer.job"空";价值

  • 由于位置不匹配,您会遇到404错误。您的数据集位于美国(如果未指定位置,则为默认值),并且您正试图在其他位置运行作业。我建议,如果你想在";欧洲西部2";,数据集应该位于";欧洲西部2";在创作时。有关详细信息,请参阅指定位置文档
  • 请参阅创建数据集,了解如何创建数据集并设置其位置
  • 你得到了"空";writer.job的值,因为作业对象没有location的字段。位置被用作获取工作信息的输入。请参阅作业的REST参考。如果你想得到location,你可以从数据集信息中得到它。请参阅数据集的REST参考

API应该能够加载100MB文件,因为未压缩CSV的最大允许大小为5TB。请参阅CSV加载限制。

相关内容

  • 没有找到相关文章

最新更新