带有 STORAGE_API_WRITE 的 BigQueryIO 批处理管道不会截断表

问题描述 投票:0回答:1

我有一个 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,它就可以工作。

google-bigquery google-cloud-dataflow apache-beam apache-beam-io
1个回答
0
投票

STORAGE_WRITE_API 确实支持对 BigQuery 的实时流式处理和批量数据处理,但是,基本功能是通过流进行的,因此使用 WRITE_TRUNCATE 会遇到挑战。

在挂起类型中,记录以挂起状态缓冲,直到您提交流。当您提交流时,所有待处理的数据都可供读取。提交是一个原子操作。将此类型用于批量工作负载,作为 BigQuery 加载作业的替代方案。

此存储写入 api 使用挂起类型批量加载数据文档为您提供了说明和代码示例,您可以在您的用例中参考。或者,您还可以探索为批量数据管道配置 BigQuery 加载作业

© www.soinside.com 2019 - 2024. All rights reserved.