Удалить строки, которые не находятся в потоковом буфере BigQuery - PullRequest
0 голосов
/ 27 мая 2018

Мне нужно удалить строки, соответствующие заданному условию WHERE, из секционированной таблицы BigQuery.Таблица всегда имеет потоковый буфер, добавляющий к ней больше данных.Меня не интересует удаление из того, что передается, только исторических данных во вчерашнем разделе.

Какова правильная стратегия удаления данных, когда в таблице BigQuery существует потоковый буфер, в идеале без простоев?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

С этой страницы Язык манипулирования данными

"Строки, которые были недавно записаны в таблицу с помощью потоковой передачи (с использованием метода tabledata.insertall), не могут быть изменены с использованием UPDATE, DELETE или MERGEоператоры. Последние записи обычно выполняются в течение последних 30 минут. Обратите внимание, что все остальные строки в таблице остаются изменяемыми с помощью операторов UPDATE, DELETE или MERGE. "

Это означает, что вы должны ограничить свой DMLсо временем, в идеале у вас должен быть столбец даты создания, чтобы вы могли использовать это ИЛИ, если есть встроенный столбец метаданных, который вы можете использовать, но я не знаю такого столбца

0 голосов
/ 28 мая 2018

Вы можете использовать оператор языка манипулирования данными DELETE.Однако имейте в виду следующее (из DML docs ):

Поддержка использования операторов языка манипулирования данными для изменения данных многораздельных таблиц в настоящее время в бета-версии.

Но вы всегда можете выбрать с фильтрацией записей, которые вы хотите удалить, и записать результаты обратно в тот же раздел.Там не будет простоев.Стоимость будет равна стоимости полного сканирования одного раздела.

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