我有一个 BATCH 管道,需要写入 BigQuery 来截断表。我正在使用方法 STORAGE_API_WRITE 并且表不会被截断,而是附加值。
.apply(BigQueryIO.<RunQueryResponse>write()
.to(new TableReference()
.setProjectId(clientProject)
.setDatasetId(firestoreStateDataset)
.setTableId(table))
.withFormatFunction(new RunQueryResponseToTableRow())
.withMethod(BigQueryIO.Write.Method.STORAGE_WRITE_API)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE));
我知道 WRITE_TRUNCATE 不适用于流管道,但这是一个 BATCH 管道。 STORAGE_WRITE_API 不支持 WRITE_TRUNCATE?
表未分区。
如果我更改为使用默认方法 FILE_LOADS,它就可以工作。
STORAGE_WRITE_API 确实支持对 BigQuery 的实时流式处理和批量数据处理,但是,基本功能是通过流进行的,因此使用 WRITE_TRUNCATE 会遇到挑战。
在挂起类型中,记录以挂起状态缓冲,直到您提交流。当您提交流时,所有待处理的数据都可供读取。提交是一个原子操作。将此类型用于批量工作负载,作为 BigQuery 加载作业的替代方案。
此存储写入 api 使用挂起类型批量加载数据文档为您提供了说明和代码示例,您可以在您的用例中参考。或者,您还可以探索为批量数据管道配置 BigQuery 加载作业。