Как преобразовать данные из корзины S3 перед записью в Redshift DW? - PullRequest
1 голос
/ 12 февраля 2020

Я создаю (современное) хранилище данных в красном смещении. Вся наша инфраструктура размещена на Amazon. До сих пор я настроил DMS для приема данных (включая измененные) из некоторых таблиц нашей бизнес-базы данных (SQL Сервер на EC2, а не RDS) и сохранения их непосредственно на S3.

Теперь я должен преобразовать и обогатить эти данные с S3, прежде чем я смогу записать их в Redshift. В нашем DW есть несколько таблиц для фактов и измерений (звездообразная схема), поэтому представьте себе измерение Customer, которое должно содержать не только информацию о клиенте c, но и информацию об адресе, городе, штате и т. Д. c. Эти данные распределены по нескольким таблицам в нашей бизнес-базе данных.

Итак, вот моя проблема, у меня нет четкого представления о том, как запросить область подготовки S3, чтобы объединить эти таблицы и записать их в мое красное смещение DW. Я хочу сделать это с помощью AWS сервисов, таких как Glue, Kinesis и др. c. т.е. полностью без сервера.

Может ли Kinesis выполнить sh эту задачу? Было бы легче, если бы я переместил свою промежуточную область с S3 на Redshift, так как все наши данные в любом случае носят реляционный характер? Если это так, остается вопрос, как преобразовать / обогатить данные перед их сохранением в наших схемах DW? Я везде искал этот топи c, но информации о нем мало.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Есть много способов сделать это, но одна идея состоит в том, чтобы запрашивать данные, используя Redshift Spectrum. Spectrum - это способ запроса S3 (называемый внешней базой данных) с использованием кластера Redshift.

Действительно высокоуровневый, один из способов сделать это - создать задание Glue Crawler для сканирования вашего сегмента S3, которое создает Внешняя база данных, которую Redshift Spectrum может запросить.

Таким образом, вам не нужно перемещать данные в сам Redshift. Скорее всего, вы захотите сохранить свою «промежуточную» область в S3 и перенести в Redshift только те данные, которые готовы для использования в отчетах или аналитике, которые будут вашей таблицей Customer Dim.

Вот документация чтобы сделать это: https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum.html

Чтобы запланировать ETL SQL: я не верю, что в Redshift встроен инструмент планирования, но вы можете сделать это несколькими способами:

1) Получить инструмент ETL или настроить задания CRON на сервере или Glue, который планирует запуск сценариев SQL. Я делаю это с помощью скрипта Python, который подключается к базе данных, а затем запускает текст SQL. Это было бы немного больше массовой операции. Вы также можете сделать это в лямбда-функции и настроить ее на триггер Cloudwatch, который может быть в расписании cron

2) Использовать лямбда-функцию, которая запускает скрипт SQL, который вы хотите, чтобы триггеры S3 ставит в это ведро. Таким образом, скрипт будет работать сразу после удаления файла. Это будет в основном операция в реальном времени. DMS сбрасывает файлы очень быстро, поэтому файлы будут сбрасываться несколько раз в минуту, что может затруднить их обработку.

1 голос
/ 12 февраля 2020

Один из вариантов - загрузить «сырые» данные в Redshift в качестве «промежуточных» таблиц. Затем выполните команды SQL, чтобы манипулировать данными (JOIN, et c) в нужном формате.

Наконец, скопируйте полученные данные в таблицы 'publi c', которые запрашивают пользователи.

Это обычный Извлечение-загрузка-преобразование (немного отличается от ETL), которое использует возможности Redshift для преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...