Как запросить разнородные данные JSON в S3? - PullRequest
0 голосов
/ 09 мая 2018

У нас есть корзина 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, но он не может справиться с проблемами пробелов или несовместимой структурой.

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

1 Ответ

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

Я бы, вероятно, предложил 2 типа решений

  1. Я считаю, что MongoDB / DynamoDB / Cassandra хороши в обработке гетерогенной структуры JSON. Я не уверен насчет несоответствия в вашем JSON, но до тех пор, пока это допустимый JSON, я считаю, что он должен приниматься в одной из указанных выше БД. Пожалуйста, предоставьте образец JSON, если это возможно. Но эти инструменты имеют свои преимущества и недостатки. Моделирование данных для этих No SQL совершенно отличается от традиционных SQL.
  2. Я не уверен, почему ваша лямбда не может выполнить очистку. Я полагаю, что вы попытались бы вызвать лямбда, когда S3 PUT происходит в ведре. Это должно быть в состоянии очистить JSON, если не задействованы сложные процессы.

Если JSON не находится в надлежащем формате, ни один инструмент не сможет обработать его идеально, я думаю, что больше, чем Athena или Spectrum, MongoDB / DyanoDB / Cassandra будут подходить для этого варианта использования

Было бы замечательно, если бы вы могли поделиться ограничениями, с которыми вы столкнулись, когда создали много разделов?

...