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

leo*_*leo 1 java gson google-bigquery google-cloud-dataflow apache-beam

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

找到了 官方文档 这里提到writeTableRows()不推荐,但不明白为什么。

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

问题:

  1. write()喜欢和选择的理由是什么
  2. 这两个选项有很大的性能差异吗?

谢谢

Pab*_*blo 6

长话短说

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

我的建议:

  • write尝试使用格式功能格式化您的数据。
  • 如果你做不到,那就不用太担心,使用writeTableRows

详细解释

不同之处在于write运行格式化函数,并且对于writeTableRows格式化函数来说只是一个标识。

我相信write建议不要这样做,writeTableRows因为TableRow对象是用 JSON 序列化的。JSON 是一种效率非常低的序列化格式。

writeTableRow在将数据发送到 BigQuery 之前实现向右转换,并writeTableRows转换数据,然后在写入 BigQuery 之前将其通过几次转换传递 - 这意味着writeTableRows.

那有意义吗?谢谢!

解释太多细节

Javadoc 中的“推荐”一词已添加到此拉取请求中。我已经问过为什么 - 我们希望能得到答复:)