BigQuery 加载本地文件不起作用,位置有问题
Posted
技术标签:
【中文标题】BigQuery 加载本地文件不起作用,位置有问题【英文标题】:BigQuery load local file doesn't work, something wrong with location 【发布时间】:2021-10-17 23:13:25 【问题描述】:试图复制这个例子: https://cloud.google.com/bigquery/docs/samples/bigquery-load-from-file
writer.job
对于“我们”位置为空
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")
// GenericDataclassInfo=[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 的文件吗?
更新:
回答解释了位置问题的原因 答案提供了有关工作状态轮询的线索引用的示例由于某种原因不起作用。带有工作帮助的片段。
// 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")
【问题讨论】:
【参考方案1】:回答您关于 404 错误和writer.job
“null”值的问题。
writer.job
的“null”值,因为作业对象没有 location
的字段。位置用作get job information 的输入。请参阅Job 的 REST 参考。如果您想获得location
,您可以从dataset information 获得。请参阅Dataset 的 REST 参考。
API 应该能够加载 100MB 的文件,因为未压缩 CSV 的最大允许大小为 5TB。见CSV loading limits。
【讨论】:
以上是关于BigQuery 加载本地文件不起作用,位置有问题的主要内容,如果未能解决你的问题,请参考以下文章
使用本地文件通过 java 库加载 Google BigQuery 表
JQuery $.getJSON 加载本地 JSON 文件不起作用