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
А что, если я собираюсь дать вам неизвестное устройство?Как холодильник.Или тостер.Или что-нибудь?Вам нужно было бы заранее написать «коннекторы» или потом написать синтаксический анализатор для некоторого необработанного поля, которое вы сохранили ранее.Возможно, в случае этих очень ограниченных примеров альтернативы нет.Там нет пути к будущему.Вам просто нужно понять новое устройство и проанализировать его при сборе или разобрать после факта (ваш сохраненный блоб / объект / документ).
Я думал, что все эти системы управляются текстом, поэтому, возможно, вы могли бы создатьслой абстракции типа итератора строки, который просто требует, чтобы устройство разделяло строки.Тогда у вас может быть фрагмент обработки текста, который анализирует на основе правил.Для устройства банкомата вам нужно написать что-то, что «говорит на банкомате» и превратит его в строки, о которых итератор позаботится.На данный момент, надеюсь, вы сможете сказать: «Я могу обработать все, что имеет строки текста».
Но тогда как вы назовете эти правила для разбора текста?«Правила принтера» можно также назвать «синтаксический анализатор принтера», что для меня то же самое, что «преобразование принтера».Есть ли лучший термин для всего этого?
Я прошу прощения за этот вопрос, который был настолько открытым.:)