Что лучше, ETL или ELT?
Проведя некоторое время, работая над хранилищем данных, я создал как ETL (извлечение трансформирования), так и ELT (преобразование нагрузки извлечения). Похоже, ELT - это более новый подход к заполнению хранилищ данных, которые могут более легко использовать преимущества вычислительных ресурсов кластера. Я хотел бы услышать, что другие люди считают преимущества ETL и ELT друг над другом, и когда вы должны использовать один или другой.
Ответы
Ответ 1
Итак, после того, как я тщательно сыграл с ETL и ELT, я пришел к выводу, что вы должны избегать ELT любой ценой. ETL готовит данные для вашего склада, прежде чем вы его загрузите. Однако ELT загружает необработанные данные на склад и преобразует их на место. Это проблематично, если у вас есть загруженный хранилище данных. Если в таблице, которую вы пытаетесь обновить, выполняется отчетный запрос, ваш запрос будет заблокирован. Следовательно, можно сообщать запросы о задержке или блокировании обновлений.
Теперь некоторые из вас могут сказать, что запросам отчетов не нужно блокировать обновление, и вы можете установить уровень изоляции, чтобы разрешить грязные чтения. Однако запросы на отчетность не выполняются разработчиками программного обеспечения. Они выполняются бизнес-пользователями, поэтому вы не можете полагаться на них, чтобы правильно установить уровни изоляции. Кроме того, не все отчеты могут терпеть грязные чтения.
Есть случаи, когда ELT может работать, однако, внедряя его в хранилище данных, является опасным и, следовательно, я рекомендую для вашего здравомыслия и для ремонтопригодности, избегайте его.
Ответ 2
Лучше ответить сложно - зависит от проблемы.
Я предпочитаю многоэтапный ETL-ECCD (извлечение, очистка, согласование, доставка), когда это возможно. Я также сохраняю промежуточные файлы csv после каждого извлечения, очистки и соответствия шагу; занимает некоторое дисковое пространство, но весьма полезна. Всякий раз, когда DW необходимо перезагрузить из-за ошибок в etl или изменениях схемы DW, нет необходимости снова запрашивать исходные системы - она уже находится в плоских файлах. Также очень удобно иметь возможность grep, sed и awk через плоские файлы в промежуточной области, когда это необходимо. В случае, когда имеется несколько исходных систем, которые питаются в один и тот же DW, для каждой из исходных систем необходимо разрабатывать (и поддерживать) только этапы извлечения - простые, согласованные и выполняемые шаги.
Ответ 3
Я использую оба. Это просто вопрос удобства и функциональности. Все зависит от случая. Иногда я делаю TEL - т.е. Преобразование выполняется в исходной базе данных (в хранимой процедуре или представлении), а затем непосредственно извлекается и загружается.
Ответ 4
Я предпочитаю ELT. Можно сказать, что это против Нормы. Это требует изменения менталитета и подхода к разработке традиционных методов. Но он использует существующие аппаратные средства и наборы навыков, что еще больше снижает стоимость и риск в процессе разработки.
Если мы хотим обеспечить ссылочную целостность в подходе ETL, данные должны быть загружены с целевого сервера ETL (Engine). Но нам не нужно делать это с помощью ETL.
Чтобы получить лучшее от подхода ELT, требуется открытый ум.