# #java #google-bigquery #gson #google-cloud-dataflow #apache-beam
Вопрос:
как выбрать эти 2 функции записи при использовании BigQueryIO.
Я нашел здесь официальный документ, в котором упоминается writeTableRows()
, что не рекомендуется, но не понимаю, почему.
- Я могу использовать
gson
для сериализации моего Java POJOTableRow
иwriteTableRows()
прямой записи с помощью - Мне нужно вручную установить
TableRow
объект, если я используюwrite()
Вопросы:
- В чем причина предпочесть
write()
и - имеют ли эти 2 варианта большую разницу в производительности?
Спасибо
Ответ №1:
TL;DR
Эти два варианта эквивалентны и имеют одинаковую базовую реализацию. Не беспокойтесь слишком сильно о рекомендации.
Мой совет:
- Попробуйте отформатировать свои данные с
write
помощью функции форматирования. - Если вы не можете этого сделать, то не волнуйтесь слишком сильно и используйте
writeTableRows
Подробное объяснение
Разница в том, что write
выполняется функция форматирования, а для writeTableRows
функции форматирования это просто идентификатор.
Я считаю write
, что это рекомендуется writeTableRows
, потому TableRow
что объекты сериализуются с помощью JSON. JSON-очень неэффективный формат сериализации.
write
реализует преобразование в TableRow
прямо перед отправкой данных в BigQuery и writeTableRows
преобразует данные, а затем передает их в несколько преобразований перед записью в BigQuery — это означает, что затраты на сериализацию могут быть выше writeTableRows
.
Имеет ли это смысл? Спасибо!
Объяснение со слишком большим количеством деталей
В этом запросе на извлечение было добавлено слово «рекомендуемое» в Javadoc. Я спросил, почему — мы должны надеяться получить ответ на это : )
Комментарии:
1. Они ответили: «writeTableRows часто дороже, потому что он зависит от объектов json». как вы предложили в своем ответе.
2. имеет смысл. Если ваши строки очень широкие (много столбцов), то неэффективность JSON хуже, но если ваши строки не огромны, то это может быть в основном нормально — тем не менее, лучше использовать функцию форматирования
3. если ответ подходит, вы можете выбрать его в качестве ответа на свой вопрос : )