Ответ 1
Я написал код для экспорта данных из Mixpanel в Redshift для клиента. Первоначально клиент экспортировал в Mongo, но мы обнаружили, что Redshift предлагает очень большие улучшения производительности для запроса. Итак, в первую очередь мы перенесли данные из Mongo в Redshift, а затем придумали прямое решение, которое передает данные из Mixpanel в Redshift.
Чтобы сначала сохранить данные JSON в Redshift, вам нужно создать SQL DDL для хранения схемы в Redshift, т.е. CREATE TABLE
script.
Вы можете использовать инструмент, например Variety, чтобы он мог дать вам некоторое представление о вашей схеме Mongo. Однако он борется с большими наборами данных - вам может понадобиться подзапрос вашего набора данных.
В качестве альтернативы DDLgenerator может генерировать DDL из разных источников, включая CSV или JSON. Это также связано с большими наборами данных (ну, набор данных, с которыми я имел дело, составлял 120 ГБ).
Итак, в теории вы можете использовать MongoExport для создания CSV или JSON из Mongo, а затем запустить его через генератор DDL для получения DDL.
На практике я нашел использование экспорта JSON немного проще, потому что вам не нужно указывать поля, которые вы хотите извлечь. Вам нужно выбрать формат массива JSON. В частности:
mongoexport --db <your db> --collection <your_collection> --jsonArray > data.json
head data.json > sample.json
ddlgenerator postgresql sample.json
Здесь - потому что я использую head
- я использую образец данных, чтобы показать, что процесс работает. Однако, если ваша база данных имеет изменение схемы, вы хотите вычислить схему на основе всей базы данных, которая может занять несколько часов.
Затем вы загрузите данные в Redshift.
Если вы экспортировали JSON, вам нужно использовать функцию Redshift Копировать из JSON. Для этого вам необходимо определить JSONpath.
Для получения дополнительной информации просмотрите Snowplow блог - они используют JSONpath для сопоставления JSON с реляционной схемой. См. Их сообщение в блоге о том, почему люди могут захотеть прочитать JSON для Redshift.
Включение JSON в столбцы позволяет гораздо быстрее запрашивать другие подходы, такие как использование JSON EXTRACT PATH TEXT
.
Для инкрементных резервных копий это зависит от того, добавляются ли данные или данные меняются. Для аналитики это обычно первое. Подход, который я использовал, состоит в том, чтобы экспортировать аналитические данные один раз в день, а затем копировать его в Redshift поэтапно.
Вот некоторые связанные ресурсы, хотя в конце я их не использовал:
- Spotify имеет проект с открытым исходным кодом под названием Luigi - этот код утверждает, что загружает JSON в Redshift, но я его не использовал, поэтому я не Не знаю, работает ли это.
- Amiato есть веб-страница, в которой говорится, что они предлагают коммерческое решение для загрузки данных JSON в Redshift - но там не так много информации, кроме этого.
- В этом сообщении в блоге обсуждается выполнение ETL на источниках данных JSON, таких как Mixpanel, в Redshift.
- Связанный Redit вопрос
- Сообщение в блоге о работе с массивами JSON в Redshift