Возможно ли избежать T в ETL? - PullRequest
1 голос
/ 24 февраля 2011

ETL довольно обычное дело.Данные где-то там, так что вы получите их.После того, как вы его получите, он, вероятно, в странном формате, поэтому вы преобразуете его во что-то, а затем загружаете его куда-нибудь.Единственная проблема, которую я вижу с этим методом, заключается в том, что вы должны написать правила преобразования.Конечно, я не могу придумать ничего лучшего.Я предполагал, что вы можете загрузить все, что попадете в BLOB-объект (sql) или в объект / документ (не SQL-файл), но тогда я думаю, что вы просто откладываете анализ.В конце концов вам придется разбирать его на что-то структурированное (если вы хотите).Так есть что-нибудь лучше?У него есть имя?У этой проблемы есть имя?

Пример

Хорошо, позвольте мне привести пример.У меня есть принтер, банкомат и система голосовой почты.Все они включены по сети, или я могу дать вам возможность подключения.Как бы вы собрали состояние со всех этих устройств?Например, принтер выдает текстовый файл при вводе состояния через порт 9000:

> status
===============
has_paper:true
jobs:0
ink:low

У банкомата есть CLI после подключения к порту независимо от того, что вы можете, и вы можете вводить отдельные команды для получения разных значений:

maint-mode> GET BILLS_1
[$1 bills]: 7
maint-mode> GET BILLS_5
[$5 bills]: 2
etc ...

Система голосовой почты требует определенных последовательностей клавиш для получения любой информации через сетевой порт:

telnet> 7,9*
0 new messages
telnet> 7,0*
2 total messages

Мои мысли

Принтер - так что это довольно простовперед.Вы можете просто захватить все после отправки «статуса», разделить на строки, а затем разделить на двоеточия или что-то еще.Довольно легко.Это почти как получение отформатированного дерьма результата от веб-службы или чего-то еще.Я мог бы избежать синтаксического анализа и просто сбросить весь разговор с порта 9000. Но в конце концов я захочу избавиться от этой линии равенства.На самом деле это ничего не значит.

Банкомат - так что это немного сложнее, потому что он интерактивный.Сейчас я подхожу к ожидаемой или протокольной территории.Было бы лучше, если бы у них был сервис, чтобы я мог запросить эти значения, но это выходит за рамки этого поста.Поэтому я пишу клиент, который получает все значения.Но теперь, если я хочу собрать все данные, я должен определить, что это за вопросы.Например, я знаю, что в банкомате больше счетов, чем 1 и 5 долларов, поэтому у меня будет полный список, например "BILLS_1 BILLS_5 BILLS_10 BILLS_20".Если я задам все вопросы, то у меня есть инвентарь банкомата.Конечно, мне все еще нужно разобрать результаты и очистить текст, если я хочу выяснить, сколько денег осталось в банкомате.Таким образом, я мог бы проанализировать результаты и выяснить итоговые данные во время сбора данных или просто сохранить их в необработанном виде и разобраться в них позже.

Голосовая почта - это похоже на банкомат, где он интерактивный.Это немного страннее, потому что последовательности клавиш / команды не являются «ключами».Но по сути это та же проблема и решение.

Future Proof

А что, если я собираюсь дать вам неизвестное устройство?Как холодильник.Или тостер.Или что-нибудь?Вам нужно было бы заранее написать «коннекторы» или потом написать синтаксический анализатор для некоторого необработанного поля, которое вы сохранили ранее.Возможно, в случае этих очень ограниченных примеров альтернативы нет.Там нет пути к будущему.Вам просто нужно понять новое устройство и проанализировать его при сборе или разобрать после факта (ваш сохраненный блоб / объект / документ).

Я думал, что все эти системы управляются текстом, поэтому, возможно, вы могли бы создатьслой абстракции типа итератора строки, который просто требует, чтобы устройство разделяло строки.Тогда у вас может быть фрагмент обработки текста, который анализирует на основе правил.Для устройства банкомата вам нужно написать что-то, что «говорит на банкомате» и превратит его в строки, о которых итератор позаботится.На данный момент, надеюсь, вы сможете сказать: «Я могу обработать все, что имеет строки текста».

Но тогда как вы назовете эти правила для разбора текста?«Правила принтера» можно также назвать «синтаксический анализатор принтера», что для меня то же самое, что «преобразование принтера».Есть ли лучший термин для всего этого?

Я прошу прощения за этот вопрос, который был настолько открытым.:)

1 Ответ

2 голосов
/ 24 февраля 2011

Когда ваши источники информации столь же несопоставимы с тем, что вы иллюстрируете, у вас нет другого выбора, кроме как реализовать преобразование, чтобы перенести элементы в общее хранилище данных.Обычно ваши источники данных не будут такими экстремальными, все данные будут каким-то образом связаны, но вы можете получать их из разных источников (некоторые могут быть из хорошо структурированной базы данных, другие могут быть из Excel, XML или текстафайл, некоторые другие могут исходить от вызова веб-службы и т. д.).

При кодировании пользовательского приложения ETL обычно используется шаблон Модель провайдера , это позволяет вамнаписать целую кучу пользовательских провайдеров для загрузки / запроса, а затем преобразовать данные.Все провайдеры будут реализовывать общий интерфейс с некоторыми относительно общими определениями функций (например, QueryData(), TransformData()), но реализация этих методов будет сильно отличаться в зависимости от источника данных, с которым приходится иметь дело.- интерфейс просто дает общий способ взаимодействия со всеми различными провайдерами.Затем вы можете использовать файл конфигурации XML, чтобы указать, каких поставщиков следует запускать, и любые другие начальные настройки, которые могут им потребоваться.Такие инструменты, как SSIS , абстрагируют вас от этого, предоставляя вам хорошего визуального дизайнера, но вы все равно можете потерять сознание и написать собственный код, который он вызывает.

ТеперьЧто если я собираюсь дать вам неизвестное устройство?Как холодильник.Или тостер.

Нет проблем, я бы просто написал нового провайдера, который может находиться в своей собственной сборке (dll), чтобы его можно было отправлять (или модифицировать, обновлять и т. Д.) Визоляция от любых других провайдеров у меня уже есть.Или, если бы я использовал SSIS, я бы написал новый пакет DTS.

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

Абсолютно - у вас может быть базовый класс, содержащий общие функциональные возможности, которые могут реализовывать несколько различных поставщиков, и каждый поставщик может использовать свой собственный набор правил, которыеможет быть закодирован в него, или они могут содержаться во внешнем файле конфигурации.

Таким образом, я мог бы проанализировать результаты и выяснить итоговые данные во время сбора данных или просто сохранить их в необработанном виде и разобраться в них.позже.

Используйте тот подход, который имеет смысл для данных, которые вы собираете.Кроме того, процесс ETL довольно часто сбрасывает свои данные в промежуточную область (например, некоторые промежуточные таблицы в базе данных), в то время как все данные собираются и накапливаются, а затем обрабатывает их для связывания связанных данных и выполнения вычислений.В случае вашего банкомата может не потребоваться рассчитывать остаток денежных средств во время ETL, поскольку вы можете легко рассчитать его в любое время в будущем.

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