尝试复制此示例: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加载限制。