У меня есть данные, записываемые в AWS S3 через kafka, поэтому сообщение может быть записано более одного раза. Я использую Spectrum Redshift для его запроса.
Поскольку данные вложены, я столкнулся с некоторыми ограничениями, описанными в документация, но я не могу найти способ ее дедупликации.
Сначала я попытался избавиться от дубликатов с помощью group by, а затем выполнил обычную агрегацию
with rid_of_duplicates as (
select table.field_1, table.struct_1.field_2, table.struct_1.field_3
from table
group by 1,2,3
)
select field_1 || field_2, count(field_3)
from rid_of_duplicates
group by field_1, field_2
Но я получаю следующую ошибку
ОШИБКА: Ошибка вложенного запроса Spectrum Подробно: ------------------------------------------ ----- ошибка: код ошибки вложенного запроса Spectrum: 8001 контекст: элементы в предложении FROM подзапросов агрегирования должны ссылаться на вложенные таблицы предложений FROM более высокого уровня. запрос: 0 расположение: nested_query_rewriter.cpp: 814 процесс: padbmaster [pid = 6630] ----------
Если я избавлюсь от GROUP BY
в подзапросе, запрос будет работать нормально, но его результат будет неправильным.
Читая документы, кажется, что я не предполагалось выбирать определенные поля в подзапросе. Но поскольку я использую вложенные данные, я не могу использовать SELECT *
.
Я также попытался создать представление без привязки к схеме, но это тоже не удалось. SELECT Distinct
тоже не работает
Если возможно, я бы не хотел создавать для этого таблицу, поскольку данные хранятся в S3. Кроме того, счетчик (отдельное поле_3) не работает из-за бизнес-логики