Запрос Google BigQuery DML Update на строки, все еще находящиеся в буфере потоковой передачи - PullRequest
0 голосов
/ 25 сентября 2018

Недавно я пытался придумать механизм повторных попыток для потокового API Google Big Query для выполнения запросов DML с оператором UPDATE по строкам, которые иногда все еще могут находиться в буфере потоковой передачи.Поскольку эти строки еще не были экспортированы в таблицу, API-интерфейсы BI запрещают запускать на них операторы UPDATE или DELETE.Как я понимаю, нет способа вручную очистить потоковый буфер.

Мой вопрос заключается в том, есть ли способ или хорошая практика для вызова с каким-либо механизмом повторных попыток, который сделает это в течение объявленного возможного 90-минутного времени ожидания (что строки могут находиться в буфере)

1 Ответ

0 голосов
/ 25 сентября 2018

Я бы рекомендовал скопировать данные из таблицы, в которой происходит потоковая передача, в другую таблицу, в которой DML можно запускать без каких-либо ограничений.Эта еще одна постоянная таблица может быть создана с помощью jobs.insert API . Вам следует рассматривать эту постоянную таблицу как источник true, для исходной таблицы вы можете включить срок действия таблицы или разделсрок действия в зависимости от ваших потребностей и частоты копинга.Теперь, когда у вас есть постоянная таблица, вы можете выполнить какую-то другую обработку этих данных или сгенерировать отчет и т. Д. Недостатком выше является то, что у вас могут быть какие-то запоздалые данные в любом случае, вы должны извлекать / копировать и дедуплицировать разумное окно данных в постоянную таблицу, чтобы гарантировать наиболеепоследние данные

Я предполагаю, что потоковую передачу в вашу таблицу можно запускать снова и снова, поэтому теоретически вы никогда не сможете запустить свой DML, поскольку потоковый буфер никогда не будет пустым.

В любом случае, если вывсе еще нужно запустить какой-нибудь механизм повтора, попробуйте использовать что-то вроде https://github.com/awaitility/awaitility

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...