Преобразуването, превеждането и картографирането на данни по никакъв начин не е ракетна наука, но в никакъв случай е досадно. Дори една проста задача за преобразуване на данни (напр. Четене на CSV файл в списък с екземпляри от клас) може да изисква нетривиално количество код. Въпреки че всички тези задачи имат много общо, всички те са „просто достатъчно различни“, за да изискват свои собствени методи за преобразуване на данни.
На практика във всяка система, която изграждаме, в един момент ще се окажем нужда да трансформираме данни от една форма в друга, независимо дали за импортиране на данни от съществуващо хранилище за данни, обработка на данни от входящ поток, превеждане от един формат в друг за вътрешен обработка или трансформиране на данни в желания изходен формат.
И всеки път, когато го правим, задачата изглежда толкова разочароващо подобна на това, което сме правили толкова пъти преди, но има точно толкова разлики, че да изискваме от нас да правим процеса на картографиране на данни отначало, до голяма степен от нулата.
Освен това, тъй като най-популярните формати и технологии за достъп до тях продължават да се развиват, а новите се въвеждат и придобиват популярност, програмистите са задължени постоянно да усвояват нови техники за преобразуване на данни и картографиране, библиотеки, API и рамки. Като услуги за наука за данни продължават да се развиват и развиват, търсенето на специализирани инструменти също се разширява.
Въпреки че можете да използвате инструменти като AutoMapper (за картографиране на данни от един обект на друг) или Презареждане (за рефакториране на съществуващ код), без значение какво правите, кодът ще бъде досаден за писане и винаги ще трябва да се поддържа. И тогава трябва да излезете с решение за междудомейна обработка на превод - като преобразуване на вътрешни кодове и ключови стойности в стойности за друг слой или система, нулеви стойности в стойности по подразбиране, преобразуване на типа и т.н.
Проверката има подобни проблеми, които се разглеждат от технологии като Анотации на данни и jQuery приставка за проверка и от купчини персонализиран код за валидиране. И нюансите при всяка от тези технологии могат да бъдат доста фини.
Като напреднал учен за данни , казвате си „Трябва да има по-добър начин.“ Е, всъщност има. И за това е този урок за картографиране на данни.
MetaDapper е .NET библиотека, която се стреми да опрости и оптимизира процеса на преобразуване на данни във възможно най-голяма степен.
MetaDapper улеснява преобразуването на данни чрез:
MetaDapper разделя логическото картографиране (схема, превод на данни и валидиране) от физическо картографиране на данни (преобразуване в и от различни файлови формати и API). Логическото картографиране разполага с мощен набор от функции и ви позволява да включите собствените си методи, за да се справите с много специфични нужди. Физическото картографиране включва богат набор от поддържани формати, които се разширяват постоянно. За да конфигурирате картографиране, се предоставя MetaDapper Configurator; лесен за използване изпълним файл на Windows за създаване и редактиране на съпоставяния и за изпълнението им за тестване или за еднократни преобразувания.
Преобразуването на списък с екземпляри от клас в XML или CSV файлове, попълване на записи на база данни на SQL, генериране на SQL скриптове за попълване на таблици, създаване на електронни таблици и много други, се извършва с помощта на един и същ конфигурационен файл, който често може да бъде създаден за секунди.
За да включите MetaDapper във вашия .NET програма , просто трябва да:
При успех писателят ще изведе преобразуваните данни. При грешка изключение ще даде подробна информация за грешка, за да можете да отхвърлите данните или да настроите конфигурацията.
Ето кратък пример за картографиране на данни:
List result; try { // Instantiate the MetaDapper library. var log = new Log(); var cultureInfo = new CultureInfo('en-US'); var md = new MetaDapper.Engine.MetaDapper(log, cultureInfo); using (var inputStream = new StreamReader(@'C:myfile.csv')) { md.MapData( new CsvReaderParameters { Log = log, CultureInfo = cultureInfo, InputStream = inputStream.BaseStream, InputEncoding = Encoding.ASCII, FirstRecordIsHeader = false }, new PublicPropertiesWriterParameters { Log = log, CultureInfo = cultureInfo }, @'C:MyMetaDapperConfiguration.xml', false, out result); } } catch (Exception) { throw; }
MetaDapper Configurator предоставя начин за визуално преминаване през стъпките за определяне на вашата структура на данни и правила за преобразуване / картографиране. Конфигураторът ви позволява да създавате, редактирате и изпълнявате конфигурации (т.е. за тестване или еднократни преобразувания).
Конфигураторът на MetaDapper се стреми да автоматизира възможно най-много от процеса. Например, когато се посочва картографиране на полета, полетата източник и местоназначение се съчетават автоматично, когато е възможно, като се използва съвпадение на имената. Също така, когато създавате дефиниции на записи за източници на данни, които съдържат метаданни, дефинициите на полета могат да се попълват автоматично, като сочат към източника на данни.
След като бъде създадена, определението на записа поддържа връзката си към източника на данни, от който е създаден (ако има такъв), за да може автоматично да се актуализира, ако схемата на източника на данни впоследствие се промени. Когато конфигурирате дефиниция на запис за източник на данни с малко или никакви налични метаданни, ако е наличен друг подобен източник на данни, който съдържа метаданни, тази дефиниция на записа може да бъде копирана (с нейните метаданни), за да служи като основа за новата дефиниция на запис и след това може да се редактира, за да отрази всякакви разлики, които могат да съществуват между двата източника на данни. И в случаите, когато схемата и метаданните са идентични за множество източници на данни, може да се използва една дефиниция на записа за всички тях.
Нека разгледаме по-подробно някои от предизвикателствата, присъщи на процеса на преобразуване на данни и начините, по които MetaDapper ги улеснява и опростява за разработчика.
Когато вътрешна или външна структура се промени в хода на поддръжката, може да се наложи да се коригира и всеки картографски код, който разчита на тези структури. Това е област, в която често се изисква поддръжка, така че каквото и решение да използвате, разходите за поддръжка трябва да бъдат оценени. Например, ако свойство TotalSale е премахнато от клас Sale, всички свързани назначения за картографиране трябва да бъдат коригирани съответно.
С MetaDapper актуализирането на картографирането може да отнеме само няколко секунди. За тип клас, например, просто щракнете върху бутона „Импортиране на дефиниции на полета от клас“, за да опресните полетата до новокомпилираната дефиниция:
Някои преобразувания на типове, като например преобразуване на тип дата / час и число, са чувствителни към международните настройки на хост средата (освен ако не е изрично посочено в кода). Следователно разполагането на приложение на нов сървър с различни международни настройки може да наруши кода, който не отчита това. Стойността на датата, например „1-2-2014“, ще се тълкува като 2 януари 2014 г. в машина с настройки в САЩ, но като 1 февруари 2014 г. в машина с настройки в Обединеното кралство. MetaDapper поддържа всички неявни .NET преобразувания и позволява сложно преформатиране на стойности като част от превода. Освен това, отделни (т.е. независими) международни настройки могат да бъдат посочени в четците, писателите и механизма за картографиране на MetaDapper.
Понякога са необходими специфични бизнес правила, които изискват достъп до други системи или изискват сложно кодиране, за да се определи стойност по подразбиране. MetaDapper позволява произволен брой персонализирани методи за делегиране да бъдат регистрирани в двигателя и използвани за предоставяне на стойности по подразбиране, извършване на персонализирано преобразуване на данни и за предоставяне на валидиране на персонализирано поле.
Не е необичайно стойностите на полетата да се изискват условно (или дори валидните им стойности да зависят от стойностите на други полета). Например може да се случи, че полетата Име на партньора и Код за социално осигуряване на партньора могат да останат празни, но ако е посочено име на партньор, тогава трябва да се предостави кодът за социално осигуряване на партньора (и евентуално други полета). Този тип условно валидиране е сложен и е лесно да се обърка в персонализирания код. За разлика от това, MetaDapper позволява лесно да се конфигурира този вид връзка на картографиране на данни. По-конкретно, списък с полета в определението на записа може да бъде включен в групата на условните задължителни полета:
Тогава в картографиране групата може да бъде свързана с всяко поле, което, ако не е null, от своя страна ще изисква всички полета в групата да бъдат предоставени. Например:
Данните в източника могат да съдържат противоречиви стойности. Например, полето за поздрав може да съдържа „Mr.“, „Mr“, „MR.“, „Mister“ или „M“, както и всички женски еквиваленти. Или полето за валута може да съдържа стойност като „$“, докато целевият ви формат изисква „USD“. Кодовете на продуктите са друг пример за стойности, които може да се наложи да бъдат преобразувани от една система в друга. MetaDapper дава възможност за спецификация на многократно използвани „списъци със синоними“, които могат да се използват за превод на стойности по време на картографиране.
Веднъж дефинирани, можете да посочите групата на синонимите, за да го използвате във всяко съответно картографиране на полето:
Може да се наложи да се използват стойности от едно или повече полета за форматиране на нова стойност. Например стойността на източника може да се нуждае от декориране с константи (например sale.PriceEach = '$' + priceEach;
) или може да се наложи да се използват няколко полета за генериране на стойност (например sale.Code = code1 + “_” + code2;
).
MetaDapper предоставя възможност за форматиране / шаблониране, която ви позволява да изграждате стойности, използвайки което и да е от полетата в текущия запис, включително части от поднизове от полета или постоянни стойности. След форматирането стойността ще бъде преобразувана в посочения тип дестинация (който между другото не е необходимо да бъде низ).
По същия начин, сложни изчисления могат да се извършват по време на картографиране, като се използва пълен набор от математически оператори и функции върху всяка комбинация от стойности на полета и константи.
Делегирани персонализирани валидации могат да бъдат регистрирани и използвани в картографиране. Ето пример за персонализиран метод за проверка, че стойността на полето е цяло число (без да се прави типът данни за полето цяло число):
private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }
Методът ще бъде регистриран при създаване на инстанция на MetaDapper. Тогава той може лесно да се приложи във всяка дефиниция на картографиране на полето:
Операциите за групиране и сортиране често могат да се обработват в заявка за база данни, но не всички източници на данни са бази данни. Следователно MetaDapper поддържа конфигурация на сложни операции за групиране и сортиране, които могат да се извършват в паметта.
В случаите, когато може да е необходима само част от изходните данни, филтрирането от източници, които не са бази данни, може да бъде много сложно за изпълнение и поддръжка. MetaDapper поддържа конфигуриране на сложни филтри с логически оператори за произволен брой оценки на полета на запис, с произволно дълбоко влагане на операции, ако е необходимо. Например:
Горният филтър е еквивалентен на следния код на C #:
if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)
Някои картографирания изискват множество проходи за завършване на процеса на преобразуване на данни. Някои примери включват данни, които изискват записи с префикс или сумиране, данни, които трябва да бъдат картографирани по различен начин в зависимост от стойностите на полетата или структурата на документа, или просто за изолиране на различни етапи на сложно картографиране (т.е. превод на имена, преобразуване на типове и т.н.). За тази цел MetaDapper поддържа вложени съпоставяния на всяко ниво на дълбочина.
Като инструмент за картографиране и преобразуване на данни, MetaDapper е конструиран така, че да позволява почти всеки формат на данните да се чете или записва с помощта на вътрешни интерфейси на четец и запис. Това позволява създаването на класове за четец / писател, които са изключително леки и фокусирани само върху специфичните за формата нюанси.
Читателите и писателите също се държат възможно най-интелигентно и гъвкаво. Например XML четецът и писателят използват XPaths, за да посочат къде да се извличат или записват данни в XML файл. Същата конфигурация може да се използва и за четене и писане, например от не-XML формати (като CSV файлове), в който случай стойностите на XPath просто ще бъдат игнорирани. По същия начин, ако конфигурация, която не включва настройки на XPath, се използва с XML четец или записващо устройство, ще се генерира грешка.
Скептични сте. И не те обвинявам. Софтуерните инструменти рядко са всичко, за което се твърдят, че са. Ето няколко примера от реалния свят, когато MetaDapper вече е използван за осигуряване на оперативна полза.
Фирма, която предоставя софтуер за управление на медицинска застраховка, имаше клиенти, които не искаха да попълват уеб формуляри, но искаха да предоставят своите данни в електронни таблици. Използвайки MetaDapper, качените електронни таблици се четат в паметта, почистват се данни, валидират се записи и резултатите се съхраняват в тяхната база данни. Те могат да приемат файлове на Excel от своите клиенти без никаква проверка от човека, използвайки MetaDapper с лесен за създаване конфигурационен файл за всеки шаблон за електронна таблица, който публикуват.
Голяма газова компания има вътрешно приложение и искаше техните потребители за управление да могат да изтеглят отчети във формат Excel. Форматите на докладите вероятно ще се променят редовно. MetaDapper улесни генерирането на листове на Excel от тяхната база данни. Актуализирането на форматите на Excel изискваше само актуализиране на конфигурационните файлове на MetaDapper без промяна на кода или прекомпилиране.
Фирма, която предоставя софтуер за управление на активи, се нуждае от решение за генериране на финансови данни в зависими от клиента формати на счетоводни пакети за внос в тези системи. Разработена е обща заявка за счетоводни данни с помощта на ORM обвивка и MetaDapper е използван за сортиране, филтриране и картографиране на данни в желаната схема и формат за всеки клиент. За всеки клиент се правят една или повече конфигурации на MetaDapper и това се превърна в основна функция за продажба за нови клиенти. Продуктът може да бъде конфигуриран (с помощта на MetaDapper) за минути, за да поддържа какъвто и да е персонализиран или стандартен формат на счетоводния пакет, така че интеграцията с основни и съществуващи системи е включена при всяка нова продажба. Същата компания използва MetaDapper в различни проекти за интеграция на софтуер, картографиране и преобразуване на данни и преобразуване на вътрешни кодове между техните системи.
Основен дистрибутор на автомобили трябваше да добави някои отчети за продажби във формат Excel към едно от техните приложения. Отчетите бяха добавени към приложението за по-малко от час - започнете да завършвате.
Разработчик се нуждае от таблица на щатите в САЩ, идентична на набора, използван на друг уебсайт. MetaDapper беше използван за добив на данни от сайта и генериране на SQL скрипт за попълване на таблицата му за няколко минути.
Това са само няколко примера за доказаната полезност и стойност на MetaDapper като инструмент за картографиране на данни.
Необходим е умствен скок, за да започнете да мислите за преобразуването на данни по-общо и да започнете да мислите за набори от данни с бизнес правила и неограничена полезност. MetaDapper е рамка, която насърчава и улеснява тази перспектива.
Независимо дали използвате MetaDapper, друга технология или въведете свои собствени решения за картографиране на данни, това е въведение в някои от сложността и скритите разходи в проектите за преобразуване на данни. Надявам се да ви е информативен.
(За повече информация относно MetaDapper се свържете с екипа на MetaDapper на адрес [имейл защитен] )