У нас есть корзина Amazon S3, которая содержит около миллиона JSON-файлов, каждый из которых сжат примерно на 500 КБ. Эти файлы помещаются в AWS Kinesis Firehose, а новый записывается каждые 5 минут. Все эти файлы описывают похожие события, и поэтому логически все одинаковы, и все они являются допустимыми JSON, но имеют разные структуры / иерархии. Кроме того, их формат и окончание строк несовместимы: некоторые объекты находятся на одной строке, некоторые на многих строках, а иногда конец одного объекта находится на той же строке, что и начало другого объекта (т. Е. }{
).
Нам необходимо проанализировать / запросить / уничтожить эти объекты и затем импортировать результаты в нашу локальную базу данных SQL Server хранилища данных.
Amazon Athena не может справиться с непоследовательным интервалом / структурой. Я подумал о создании лямбда-функции, которая очистит пространство, но все еще оставляет проблему с другими структурами. Поскольку файлы устанавливаются Kinesis, что заставляет вас помещать файлы в папки, вложенные по годам, месяцам, дням и часам, нам придется создавать тысячи разделов каждый год. Ограничение на количество разделов в Афине не очень известно, но исследования показывают, что мы быстро исчерпаем этот предел, если создадим один в час.
Я сначала посмотрел на закачку данных в Redshift, а затем потянул их вниз. Внешние таблицы Amazon Redshift могут иметь дело с пробелами, но не могут работать с вложенным JSON, который есть почти во всех этих файлах. COPY
Команды могут работать с вложенным JSON, но требуют, чтобы мы заранее знали структуру JSON и не позволяли нам получить доступ к имени файла, которое нам потребуется для полного импорта (это единственный способ получить дату) , В целом Redshift имеет ту же проблему, что и Athena: несовместимая структура затрудняет определение схемы.
Я рассмотрел использование таких инструментов, как AWS Glue, но они просто перемещают данные, и они не могут перемещать данные на наш локальный сервер, поэтому нам нужно найти своего рода посредника, который увеличивает стоимость, задержку, и накладные расходы на техническое обслуживание.
Я пытался исключить посредника и использовать задачу ZappySys S3 JSON SSIS для непосредственного извлечения файлов и их объединения в пакет служб SSIS, но он не может справиться с проблемами пробелов или несовместимой структурой.
Я не могу быть первым человеком, столкнувшимся с этой проблемой, но я просто продолжаю крутить колеса.