gson Apache Beam、BigQueryIO、写入表行()与写入()

xmjla07d  于 2022-11-06  发布在  Apache
关注(0)|答案(1)|浏览(164)

如何在使用BigQueryIO时选择这两个写入函数。
我发现这里的官方文档提到不推荐使用writeTableRows(),但不明白为什么。
1.我可以使用gson将我的Java POJO序列化为TableRow,然后直接使用writeTableRows()进行编写
1.如果使用write(),则需要手动设置TableRow对象
问题:
1.为什么选择write()
1.这两个选项在性能上是否有很大差异?
谢谢

jfewjypa

jfewjypa1#

TL;DR的名称

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

  • 尝试使用Format函数在write内格式化数据。
  • 如果做不到这一点,那么不要太担心,使用writeTableRows

详细说明

不同之处在于write运行一个格式化函数,而对于writeTableRows,格式化函数只是一个标识。
我认为推荐使用write而不是writeTableRows,因为TableRow对象是用JSON序列化的。JSON是一种效率非常低的序列化格式。
write在将数据发送到BigQuery之前实现到TableRow的转换,writeTableRows转换数据,然后在写入BigQuery之前通过几次转换传递数据-这意味着writeTableRows的序列化成本可能更高。
这样说得通吗?谢谢!

详细说明 * 太多 *

Javadoc中的“recommended”一词是在this pull request中添加的。我问过为什么-我们希望能得到它的回应:)

相关问题