Apache Beam - > BigQuery - 用于重复数据删除的insertId不起作用

时间:2017-09-25 08:53:23

标签: google-bigquery apache-beam

我使用带有google dataflow runner的apache beam将数据从kafka传输到BigQuery。 我想利用insertId进行重复数据删除,我发现谷歌文​​档中描述了这一点。但是即使插件在几秒钟之内发生,我仍然会看到很多行具有相同的insertId。 现在我想知道我可能没有正确使用API​​来利用BQ提供的流媒体插入的重复数据删除机制。

我在写入梁的代码如下:

payments.apply("Write Fx Payments to BQ", BigQueryIO.<FxPayment>write()
            .withFormatFunction(ps -> FxTableRowConverter.convertFxPaymentToTableRow(ps))
            .to(bqTradePaymentTable)
            .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
            .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));

除了所有其他字段,我在FxTableRowConverter.convertFxPaymentToTableRow方法中直接在TableRow上设置insertId作为格式函数传递给BigQueryIO:

row.set("insertId", insertId);

我还将该字段添加为BQ的列。没有它,插入失败(显然)。 除了将其添加到TableRow对象之外,我无法直接在BigQueryIO上找到任何其他方法来设置insertId。

这是使用它的正确方法吗?因为它对我不起作用,所以即使我不应该看到许多重复,因为就像我已经提到的那样插入在几秒钟内发生。 BigQuery doc声明流缓冲区保持insertId至少一分钟。

0 个答案:

没有答案