Apache Beam、BigQueryIO、writeTableRows() 与 write()
Apache Beam, BigQueryIO, writeTableRows() vs write()
使用BigQueryIO时如何选择这2个写入函数
已找到
official doc
不建议在这里提及 writeTableRows()
,但不明白为什么。
- 我可以使用
gson
将我的Java POJO序列化为TableRow
并直接用writeTableRows()
写入
- 如果我使用
write()
,我需要手动设置 TableRow
对象
问题:
- 为什么更喜欢
write()
和
- 这两个选项的性能差异大吗?
谢谢
TL;DR
这两个选项是等效的,并且具有相同的底层实现。推荐不用太担心
我的建议:
- 尝试使用 Format 函数在
write
内格式化您的数据。
- 如果做不到,不要太担心,用
writeTableRows
详细解释
区别在于write
运行格式化函数,而对于writeTableRows
格式化函数只是一个标识。
我认为 write
优于 writeTableRows
,因为 TableRow
对象是用 JSON 序列化的。 JSON 是一种非常低效的序列化格式。
write
在将数据发送到 BigQuery 之前实现到 TableRow
的转换,而 writeTableRows
转换数据,然后在写入 BigQuery 之前通过一些转换传递它- 这意味着 writeTableRows
.
的序列化成本可能更高
这有意义吗?谢谢!
解释太多细节
在 this pull request 中添加了 Javadoc 中的 'recommended' 单词。我问过为什么 - 我们应该希望得到回应 :)
使用BigQueryIO时如何选择这2个写入函数
已找到
official doc
不建议在这里提及 writeTableRows()
,但不明白为什么。
- 我可以使用
gson
将我的Java POJO序列化为TableRow
并直接用writeTableRows()
写入 - 如果我使用
write()
,我需要手动设置
TableRow
对象
问题:
- 为什么更喜欢
write()
和 - 这两个选项的性能差异大吗?
谢谢
TL;DR
这两个选项是等效的,并且具有相同的底层实现。推荐不用太担心
我的建议:
- 尝试使用 Format 函数在
write
内格式化您的数据。 - 如果做不到,不要太担心,用
writeTableRows
详细解释
区别在于write
运行格式化函数,而对于writeTableRows
格式化函数只是一个标识。
我认为 write
优于 writeTableRows
,因为 TableRow
对象是用 JSON 序列化的。 JSON 是一种非常低效的序列化格式。
write
在将数据发送到 BigQuery 之前实现到 TableRow
的转换,而 writeTableRows
转换数据,然后在写入 BigQuery 之前通过一些转换传递它- 这意味着 writeTableRows
.
这有意义吗?谢谢!
解释太多细节
在 this pull request 中添加了 Javadoc 中的 'recommended' 单词。我问过为什么 - 我们应该希望得到回应 :)