Я исследовал базу данных Amazon Redshift как возможную будущую замену нашему хранилищу данных. Мой опыт всегда был в использовании многомерного моделирования и методов Ральфа Кимбалла, поэтому было немного странно видеть, что Redshift не поддерживает такие функции, как последовательный тип данных для автоинкрементных столбцов.
Тем не менее, есть недавнее сообщение в блоге AWS Big Data о том, как оптимизировать Redshift для звездообразной схемы: https://blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas и-Interleaved-сортировка-на-Амазонка-Redshift
Вопрос, который у меня возникает, заключается в том, как лучше всего загружать схему «звезда» в Redshift? Я не могу найти ответ на этот вопрос в документации Redshift.
Я склонен импортировать мои файлы из S3 в промежуточные таблицы, а затем использовать SQL для выполнения преобразований, таких как поиск и генерация суррогатных ключей, перед вставкой в таблицы назначения.
Это то, что в настоящее время делают другие? Есть ли инструмент ETL стоит денег, чтобы сделать это проще?
источник
Для ETL есть клей AWS. Это управляемый серверный ETL-сервис, который загружается в Redshift (помимо прочего).
https://aws.amazon.com/glue/
источник
Я сейчас занимаюсь аналогичной задачей. Это построить процесс ETL и проектировать размерную модель. Я много исследовал, как лучше всего с этим справиться, и нашел удивительный полезный источник техник, которые мы обязательно должны применять при работе с MPP.
Ответить на вопрос
Обязательно загляните в этот ресурс . Бьюсь об заклад, вы найдете это невероятно полезным. Это документ на ~ 35 страницах с мощными методами, позволяющими использовать колоночные хранилища MPP. Он поддерживает комментарии, которые вы видите, как
комментарий Джона Скотта
Надеюсь, вы найдете это так же полезно, как и я
источник
Я думаю, что загрузка из S3 является общей схемой.
Нам нужно было применить ограничения уникальности, поэтому мы решили писать в Postgres, а затем реплицировать новые данные в красное смещение каждые 10 минут.
Мы используем https://github.com/uswitch/blueshift для загрузки в Redshift.
источник
Поскольку Redshift является столбчатой базой данных, производительность хранения и запросов будет отличаться от моделей СУБД. Оптимизация для столбчатой базы данных также отличается. Поскольку обычно меньше дискового ввода-вывода и меньше данных, загружаемых с диска, запросы выполняются быстрее.
Что касается публикации в блоге AWS, на которую вы ссылаетесь, я полагаю, что вы ознакомились с этими рекомендациями и рассмотрели, какие варианты лучше всего подходят для ваших данных при распределении, ключах, курсорах, управлении рабочей нагрузкой и т. Д., И у вас есть хотя бы хорошее представление о подходе. вы бы использовали. Мне проще работать с визуальным представлением, вы можете рассмотреть быструю и грязную диаграмму БД, показывающую, как ваши существующие таблицы будут мигрировать в Redshift. Охватывая основные из них, чтобы почувствовать, сколько данных куда идет. И я бы, конечно, использовал драйверы ODBC / JDBC от Amazon, так как загрузка больших объемов данных может быть хлопотной в любом случае, а тем более переходить на другой тип БД.
Что касается ETL / ELT, то есть AWS Glue, как упоминали другие авторы. И да, есть ряд инструментов, некоторые из которых бесплатны. У Amazon есть Руководство по оптимальной работе с БД , которое также может вам помочь. Один совет, который я видел на других форумах, - это загрузить ваши данные как можно более сырыми и выполнить преобразования в Redshift. Это привело бы вас к процессу ELT. С таким большим количеством вариантов, возможно, поможет сравнение двух методов. Вот статья в блоге Panopoly, объясняющая различия, она может помочь вам выбрать путь.
источник
Amazon недавно опубликовала несколько лучших практик для ETL в Redshift
https://aws.amazon.com/blogs/big-data/top-8-best-practices-for-high-performance-etl-processing-using-amazon-redshift/
В презентации по этой теме Тони Гиббс AWS Solution Architect рекомендует следующий шаблон для нагрузок в стиле UPSERT:
Вставить данные со сцены
Когда это возможно, предпочтите DROP TABLE или TRUNCATE, чтобы DELETE, чтобы избежать призрачных строк
Смотрите видео его выступления и слайды .
В нашей команде мы обычно загружаем данные в Redshift напрямую из S3 с помощью оператора SQL COPY .
И управляйте всеми нашими ETL с помощью превосходного инструмента Apache Airflow .
Мы также используем службы интеграции, такие как Stich, которые пишут непосредственно в Redshift, а затем используют CREATE TABLE LIKE и SELECT INTO для перемещения данных в другую схему.
источник