Apache Beam, BigQueryIO, writeTableRows() vs write()



使用BigQueryIO时如何选择这两个write函数

找到了官方文档这里不建议提及writeTableRows(),但我不明白为什么。

  1. 我可以使用gson序列化我的Java POJO到TableRow,直接用writeTableRows()
  2. 我需要手动设置TableRow对象,如果我使用write()

问题:

  1. 选择write()
  2. 的原因
  3. 这两个选项性能差异大吗?

感谢

TL;DR

这两个选项是等价的,并且具有相同的底层实现。不要过于担心推荐。

我的建议:

  • 尝试使用format功能在write中格式化您的数据。
  • 如果你不能这样做,那么不用太担心,使用writeTableRows

详细说明不同之处在于write运行一个格式化函数,而writeTableRows的格式化函数只是一个标识。

我认为writewriteTableRows更值得推荐,因为TableRow对象是用JSON序列化的。JSON是一种非常低效的序列化格式。

write在将数据发送给BigQuery之前实现了到TableRow的转换,writeTableRows将数据转换,然后在写入BigQuery之前进行一些转换-这意味着writeTableRows的序列化成本可能更高。

明白了吗?谢谢!

解释太多细节

Javadoc中的"recommended"字被添加到这个pull request中。我问了为什么,我们应该得到一个回应:)

最新更新