Прежде всего, я думаю, вы должны подумать о том, сколько стоит отсеивать дубликаты, а не о том, как часто Firehose будет доставлять дубликаты.Я думаю, что очень редко вы получаете дубликаты из-за самого Firehose, но если у вас есть продюсеры, которые также могут в конечном итоге посылать дубликаты на ваш Firehose, вы все равно, возможно, захотите их обработать.
Метод, который выСледует использовать, зависит от вашего варианта использования, и если вы предоставили более подробную информацию о нем, может быть проще дать вам более точный ответ.
Если у вас нет много данных, вы можете оплатитьцена на стороне чтения вместо обработки, например, перезаписи данных.SELECT DISTINCT * FROM table
должен удалить дубликаты строк.Если ваши запросы содержат агрегации, вы делаете SELECT column, COUNT(*) FROM (SELECT DISTINCT * FROM table)
- или какой-то вариант SELECT foo, MIN(bar), MIN(baz) GROUP BY 1
, если у вас есть столбец, который должен быть уникальным.Поскольку Athena взимает плату за отсканированные данные, а не за вычислительные ресурсы, это не будет стоить дополнительных затрат, но, конечно, будет медленнее.
Я бы не рекомендовал это решение, если у вас много данных, и в этом случае, я думаю,в любом случае вам нужно иметь дополнительный шаг в конвейере, потому что вам также не следует запрашивать данные, полученные Firehose как есть.Вам нужно создать секционированную таблицу и добавлять каждый час, день или месяц как отдельный раздел (в зависимости от того, сколько именно данных мы говорим).Вы можете сделать это, не перемещая данные, но, поскольку вы все равно должны сделать дополнительный шаг, вы также можете добавить дедупликацию туда же - и если вы посмотрите на использование Glue ETL, это может быть менее затратно для вас, чем EMR.