Apache Beam、BigQueryIO、writeTableRows() 与 write()

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

使用BigQueryIO时如何选择这2个写入函数

已找到 official doc 不建议在这里提及 writeTableRows(),但不明白为什么。

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

问题:

  1. 为什么更喜欢write()
  2. 这两个选项的性能差异大吗?

谢谢

TL;DR

这两个选项是等效的,并且具有相同的底层实现。推荐不用太担心

我的建议:

  • 尝试使用 Format 函数在 write 内格式化您的数据。
  • 如果做不到,不要太担心,用writeTableRows

详细解释

区别在于write运行格式化函数,而对于writeTableRows格式化函数只是一个标识。

我认为 write 优于 writeTableRows,因为 TableRow 对象是用 JSON 序列化的。 JSON 是一种非常低效的序列化格式。

write 在将数据发送到 BigQuery 之前实现到 TableRow 的转换,而 writeTableRows 转换数据,然后在写入 BigQuery 之前通过一些转换传递它- 这意味着 writeTableRows.

的序列化成本可能更高

这有意义吗?谢谢!

解释太多细节

this pull request 中添加了 Javadoc 中的 'recommended' 单词。我问过为什么 - 我们应该希望得到回应 :)