Пространственное моделирование и ETL в Redshift

9

Я исследовал базу данных 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 стоит денег, чтобы сделать это проще?

njkroes
источник

Ответы:

9

Вы определенно на правильном пути с Кимбаллом, а не с Redshift.

Для этого есть несколько шаблонов, я использовал их все в разных случаях

  1. Шаблон «ELT» - загрузите исходные таблицы для полного красного смещения, не выполняйте никаких значительных преобразований, пока данные не будут загружены. Для этого вы можете либо загрузить в s3, затем использовать команду копирования redshift, либо я бы порекомендовал использовать «сервисы переноса данных AWS», которые могут синхронизировать источник (например, mysql или postgres) с целью (например, redshift). Затем регулярно запускать sql обрабатывает в пределах красного смещения, чтобы заполнить затемнения фактами. Вы можете использовать сторонние облачные инструменты, чтобы «упростить» этот процесс, если хотите - например, Matillion (я не рекомендую использовать сторонние инструменты)
  2. «Шаблон ETL» - преобразование данных в полете с использованием Apache Spark. и загрузите тусклые факты и факты в красное смещение spark-> s3-> красное смещение. Я использовал EMR для этого, что хорошо. это также подход, если вы используете AWS Glue
  3. Не трансформируйся! - аналогично 1), но просто используйте таблицы, которые были загружены.

Обратите внимание, что Redshift иногда работает ЛУЧШЕ, если у вас широкая таблица с повторяющимися значениями, а не фактами и измерениями. Причина этого заключается в том, что колоночный подход позволяет Redshift сжимать различные значения до уровня, который является довольно эффективным. У меня нет формулы того, когда использовать много измерений против плоской широкой таблицы, единственный способ - это попробовать и посмотреть!

Некоторые ссылки

AWS DMS для Redshift Taret

AWS клей

Джон Скотт
источник
1
Согласитесь с комментарием об использовании широких таблиц вместо звездообразной схемы, если ваши измерения довольно просты (мало атрибутов), рассмотрите возможность объединения всех данных в одну таблицу. Это нелогично для большинства людей, приходящих с традиционных платформ баз данных, таких как SQL Server и Oracle, но это начинает иметь смысл, когда вы думаете о том, как на самом деле работает столбчатая база данных MPP, такая как Redshift.
Натан Гриффитс
Я согласен с этой оценкой влияния на производительность и простотой запросов, но если измерения имеют тенденцию изменяться, разделение их на таблицы измерений может облегчить запутанные результаты.
Мерлин
2

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

https://aws.amazon.com/glue/

Джошуа Гутман
источник
Я бы сказал, прочитайте очень внимательно о том, какие ограничения применяются к клею. Например, если вы хотите использовать скрипты Python, то Pandas и Numpy недоступны. Кроме того, ваши сценарии не могут быть легко запущены из события, поэтому, если вы хотите запустить систему ETL потокового типа, вам также понадобятся лямбды для запуска сценариев и т. Д.
PizzaTheHut
2

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

Ответить на вопрос

Вопрос, который у меня возникает, заключается в том, как лучше всего загружать схему «звезда» в Redshift?

Обязательно загляните в этот ресурс . Бьюсь об заклад, вы найдете это невероятно полезным. Это документ на ~ 35 страницах с мощными методами, позволяющими использовать колоночные хранилища MPP. Он поддерживает комментарии, которые вы видите, как

Обратите внимание, что Redshift иногда работает ЛУЧШЕ, если у вас широкая таблица с повторяющимися значениями, а не фактами и измерениями. Причина этого заключается в том, что колоночный подход позволяет Redshift сжимать различные значения до уровня, который является довольно эффективным. У меня нет формулы того, когда использовать много измерений против плоской широкой таблицы, единственный способ - это попробовать и посмотреть!

комментарий Джона Скотта

Надеюсь, вы найдете это так же полезно, как и я

Жоао Кашиас
источник
1

Я думаю, что загрузка из S3 является общей схемой.

Нам нужно было применить ограничения уникальности, поэтому мы решили писать в Postgres, а затем реплицировать новые данные в красное смещение каждые 10 минут.

Мы используем https://github.com/uswitch/blueshift для загрузки в Redshift.

Сэм
источник
1

Поскольку Redshift является столбчатой ​​базой данных, производительность хранения и запросов будет отличаться от моделей СУБД. Оптимизация для столбчатой ​​базы данных также отличается. Поскольку обычно меньше дискового ввода-вывода и меньше данных, загружаемых с диска, запросы выполняются быстрее.

Что касается публикации в блоге AWS, на которую вы ссылаетесь, я полагаю, что вы ознакомились с этими рекомендациями и рассмотрели, какие варианты лучше всего подходят для ваших данных при распределении, ключах, курсорах, управлении рабочей нагрузкой и т. Д., И у вас есть хотя бы хорошее представление о подходе. вы бы использовали. Мне проще работать с визуальным представлением, вы можете рассмотреть быструю и грязную диаграмму БД, показывающую, как ваши существующие таблицы будут мигрировать в Redshift. Охватывая основные из них, чтобы почувствовать, сколько данных куда идет. И я бы, конечно, использовал драйверы ODBC / JDBC от Amazon, так как загрузка больших объемов данных может быть хлопотной в любом случае, а тем более переходить на другой тип БД.

Что касается ETL / ELT, то есть AWS Glue, как упоминали другие авторы. И да, есть ряд инструментов, некоторые из которых бесплатны. У Amazon есть Руководство по оптимальной работе с БД , которое также может вам помочь. Один совет, который я видел на других форумах, - это загрузить ваши данные как можно более сырыми и выполнить преобразования в Redshift. Это привело бы вас к процессу ELT. С таким большим количеством вариантов, возможно, поможет сравнение двух методов. Вот статья в блоге Panopoly, объясняющая различия, она может помочь вам выбрать путь.

Бен Шмельцер
источник
1

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:

  1. Загрузить данные CSV (из S3) в промежуточную таблицу
  2. Удалить совпадающие строки из таблицы prd
  3. Вставить данные со сцены

    BEGIN;
    CREATE TEMP TABLE staging(LIKE …);  copies dist keys
    copy staging from s3://… COMPUTE OFF;
    DELETE deep_dive d
    USING staging s WHERE d.aid = s.aid;
    INSERT INTO deep_dive SELECT * FROM staging
    DROP table staging;
    COMMIT;
    

Когда это возможно, предпочтите DROP TABLE или TRUNCATE, чтобы DELETE, чтобы избежать призрачных строк

Смотрите видео его выступления и слайды .

В нашей команде мы обычно загружаем данные в Redshift напрямую из S3 с помощью оператора SQL COPY .

И управляйте всеми нашими ETL с помощью превосходного инструмента Apache Airflow .

Мы также используем службы интеграции, такие как Stich, которые пишут непосредственно в Redshift, а затем используют CREATE TABLE LIKE и SELECT INTO для перемещения данных в другую схему.

mthorley
источник