MetaDapper: cartografierea și conversia datelor ușoare cu instrumentele potrivite
Publicat: 2022-03-11Conversia datelor, traducerea și cartografierea nu sunt în niciun caz știință rachetă, dar sunt obositoare. Chiar și o sarcină simplă de conversie a datelor (de exemplu, citirea unui fișier CSV într-o listă de instanțe de clasă) poate necesita o cantitate netrivială de cod. Deși toate aceste sarcini au multe în comun, toate sunt „suficient de diferite” pentru a necesita propriile metode de conversie a datelor.
Practic, în fiecare sistem pe care îl construim, la un moment dat ne vom trezi nevoiți să transformăm datele dintr-o formă în alta, fie pentru a importa date dintr-un depozit de date existent, pentru a procesa date dintr-un flux primit, pentru a traduce dintr-un format în altul pentru scopuri interne. procesarea sau transformarea datelor într-un format de ieșire dorit.
Și de fiecare dată când facem acest lucru, sarcina pare atât de frustrant de asemănătoare cu ceea ce am făcut de atâtea ori înainte, dar are doar suficiente diferențe încât să ne obligă să facem din nou procesul de mapare a datelor, în mare parte de la zero.
Mai mult, pe măsură ce cele mai populare formate și tehnologii pentru accesarea acestora continuă să evolueze, iar altele noi sunt introduse și câștigă popularitate, programatorii sunt obligați să învețe constant noi tehnici de conversie și mapare a datelor, biblioteci, API-uri și cadre. Pe măsură ce serviciile de știință a datelor continuă să se dezvolte și să evolueze, cererea pentru instrumente specializate se extinde, de asemenea.
Deși puteți folosi instrumente precum AutoMapper (pentru a mapa datele de la un obiect la altul) sau Resharper (pentru a refactoriza codul existent), indiferent de ceea ce faceți, codul va fi plictisitor de scris și va trebui întotdeauna menținut. Și apoi trebuie să veniți cu o soluție pentru gestionarea traducerii pe mai multe domenii - cum ar fi conversia codurilor interne și a valorilor cheie în valori pentru un alt strat sau sistem, valorile nule în valori implicite, conversia tipului etc.
Validarea are probleme similare, care sunt abordate de tehnologii precum DataAnnotations și pluginul jQuery Validation și de multe coduri de validare personalizate. Și nuanțele cu fiecare dintre aceste tehnologii pot fi destul de subtile.
Ca om de știință de date avansat, îți spui „Trebuie să existe o cale mai bună”. Ei bine, de fapt, există. Și despre asta este acest tutorial de cartografiere a datelor.
Vă prezentăm Instrumentul de cartografiere a datelor MetaDapper
MetaDapper este o bibliotecă .NET care se străduiește să simplifice și să eficientizeze procesul de conversie a datelor în cea mai mare măsură posibilă.
MetaDapper facilitează conversia datelor prin:
- Decuplarea porțiunilor standard repetabile ale procesului de conversie a datelor de acele aspecte care sunt unice pentru fiecare sarcină de transformare a datelor.
- Oferă o interfață de utilizator intuitivă și ușor de utilizat pentru specificarea regulilor de mapare și traducere de complexitate arbitrară.
MetaDapper separă maparea logică (schemă, traducerea datelor și validarea) de maparea fizică a datelor (conversia către și din diferite formate de fișiere și API-uri). Maparea logică are un set puternic de funcții și vă permite să vă conectați propriile metode pentru a gestiona nevoi foarte specifice. Maparea fizică include un set bogat de formate acceptate care sunt extinse în mod constant. Pentru a configura o mapare, este furnizat MetaDapper Configurator; un executabil Windows simplu de utilizat pentru a crea și edita mapări și pentru a le executa pentru testare sau pentru conversii unice.
Convertirea unei liste de instanțe de clasă în fișiere XML sau CSV, popularea înregistrărilor bazei de date SQL, generarea de scripturi SQL pentru popularea tabelelor, crearea foilor de calcul și multe altele, toate se fac folosind același fișier de configurare care poate fi adesea creat în câteva secunde.
Pentru a include MetaDapper în programul dvs. .NET, trebuie doar să:
- Adăugați o referință la bibliotecă
- Instanciați motorul MetaDapper
- Executați maparea, specificând cititorul sursă (și orice parametri), scriitorul de destinație (și orice parametri) și fișierul dvs. de configurare.
La succes, scriitorul va scoate datele transformate. În caz de eroare, o excepție va oferi informații detaliate despre eroare, astfel încât să puteți respinge datele sau să reglați configurația.
Iată un scurt exemplu de cartografiere a datelor:
List<MyClass> 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; }
„Configuratorul” MetaDapper
Configuratorul MetaDapper oferă o modalitate de a parcurge vizual pașii de definire a structurii datelor și a regulilor de conversie/cartare. Configuratorul vă permite să creați, să editați și să executați configurații (de exemplu, pentru testare sau conversii unice).
Configuratorul MetaDapper se străduiește să automatizeze cât mai mult proces posibil. De exemplu, când se specifică o mapare a câmpului, câmpurile sursă și destinație sunt asociate automat, atunci când este posibil, folosind potrivirea numelui. De asemenea, atunci când se creează definiții de înregistrare pentru sursele de date care conțin metadate, definițiile câmpurilor pot fi populate automat, arătând spre sursa de date.
Odată creată, o definiție de înregistrare își menține legătura cu sursa de date din care a fost creată (dacă există), astfel încât să poată fi actualizată automat dacă schema sursei de date se modifică ulterior. Când configurați o definiție de înregistrare pentru o sursă de date cu metadate puține sau deloc disponibile, dacă este disponibilă o altă sursă de date similară care conține metadate, acea definiție de înregistrare poate fi copiată (cu metadatele sale) pentru a servi drept bază pentru noua definiție de înregistrare și poate fi apoi editat pentru a reflecta orice diferențe care pot exista între cele două surse de date. Și în cazurile în care schema și metadatele sunt identice pentru mai multe surse de date, o singură definiție de înregistrare poate fi utilizată pentru toate.
Simplificarea procesului de conversie a datelor
Să ne uităm mai detaliat la unele dintre provocările inerente procesului de conversie a datelor și la modurile în care MetaDapper le facilitează și le simplifică pentru dezvoltator.
Maparea sursă la datele de destinație
Atunci când o structură internă sau externă este schimbată în cursul întreținerii, orice cod de mapare care se bazează pe aceste structuri poate fi necesar să fie, de asemenea, ajustat. Acesta este un domeniu în care sunt adesea necesare lucrări de întreținere, așa că indiferent de soluția pe care o utilizați, costurile de întreținere trebuie evaluate. De exemplu, dacă o proprietate TotalSale este eliminată dintr-o clasă de vânzare, orice atribuire de mapare aferentă trebuie ajustată în consecință.
Cu MetaDapper, actualizarea unei mapări poate dura doar câteva secunde. Pentru un tip de clasă, de exemplu, faceți clic pe butonul „Importați definițiile câmpurilor din clasă” pentru a reîmprospăta câmpurile la definiția nou compilată:
Conversie de tip
Unele conversii de tip, cum ar fi conversiile de tip Data/Ora și Număr, de exemplu, sunt sensibile la setările internaționale ale mediului gazdă (cu excepția cazului în care este specificat explicit în cod). Prin urmare, implementarea unei aplicații pe un server nou cu setări internaționale diferite poate sparge codul care nu ia în considerare acest lucru. O valoare a datei „1-2-2014”, de exemplu, va fi interpretată ca 2 ianuarie 2014 într-o mașină cu setări din SUA, dar ca 1 februarie 2014 pe o mașină cu setări din Marea Britanie. MetaDapper acceptă toate conversiile implicite .NET și permite reformatarea complexă a valorilor, de asemenea, ca parte a traducerii. În plus, setările internaționale separate (adică independente) pot fi specificate în cititorii, scriitorii și motorul de cartografiere MetaDapper.
Valori implicite complexe
Uneori, sunt necesare reguli de afaceri specifice care necesită acces la alte sisteme sau necesită codare complexă pentru a determina o valoare implicită. MetaDapper permite înregistrarea în motor a oricărui număr de metode de delegare personalizate și utilizate pentru a furniza valori implicite, pentru a efectua conversie de date personalizate și pentru a oferi validarea câmpului personalizat.
Reguli de validare condiționată
Nu este neobișnuit ca valorile câmpurilor să fie cerute condiționat (sau chiar ca valorile lor valide să fie dependente de valorile altor câmpuri). De exemplu, este posibil ca câmpurile Nume partener și Cod de securitate socială partener să fie lăsate necompletate, dar dacă este furnizat un Nume partener, atunci trebuie furnizat Codul de securitate socială a partenerului (și posibil alte câmpuri). Acest tip de validare condiționată este complex și este ușor de greșit în codul personalizat. În schimb, MetaDapper permite configurarea cu ușurință a acestui tip de relație de cartografiere a datelor. Mai exact, o listă de câmpuri dintr-o definiție de înregistrare poate fi listată într-un grup de câmpuri obligatorii condiționate:

Apoi, într-o mapare, grupul poate fi asociat cu orice câmp care, dacă nu este nul, ar necesita, la rândul său, furnizarea tuturor câmpurilor din grup. De exemplu:
Conversia valorilor mapate între domenii
Datele sursă pot conține valori inconsistente. De exemplu, un câmp de salut poate conține „Mr.”, „Mr”, „MR.”, „Mister” sau „M”, precum și toate echivalentele feminine. Sau un câmp valutar poate conține o valoare precum „$”, în timp ce formatul dvs. de destinație necesită „USD”. Codurile de produs sunt un alt exemplu de valori care ar putea trebui convertite de la un sistem la altul. MetaDapper permite specificarea de „liste de sinonime” reutilizabile care pot fi folosite pentru a traduce valori în timpul mapărilor.
Odată definit, puteți specifica grupul de sinonime pentru a-l folosi în orice mapare relevantă a câmpului:
Mapări bazate pe formatarea valorii și calcule complexe
Valorile dintr-unul sau mai multe câmpuri pot fi utilizate pentru a formata o nouă valoare. De exemplu, valoarea sursă poate avea nevoie de decorare cu constante (de exemplu, sale.PriceEach = "$" + priceEach;
) sau pot fi necesare mai multe câmpuri pentru a genera o valoare (de exemplu, sale.Code = code1 + “_” + code2;
).
MetaDapper oferă o capacitate de formatare/șabloane care vă permite să construiți valori folosind oricare dintre câmpurile din înregistrarea curentă, inclusiv porțiuni de subșir de câmpuri sau valori constante. După formatare, valoarea va fi convertită la tipul de destinație specificat (care, de altfel, nu trebuie să fie un șir).
În mod similar, calculele complexe pot fi efectuate în timpul mapărilor, utilizând un set complet de operatori și funcții matematice pe orice combinație de valori de câmp și constante.
Reguli de validare
Delegații de validare personalizați pot fi înregistrați și utilizați în mapări. Iată un exemplu de metodă personalizată pentru a valida faptul că valoarea unui câmp este un număr întreg (fără a face tipul de date pentru câmp un număr întreg):
private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List<ErrorInfo> errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }
Metoda va fi înregistrată la instanțierea MetaDapper. Apoi ar putea fi aplicat cu ușurință în orice definiție de cartografiere a câmpului:
Grupare, sortare și filtrare
Operațiunile de grupare și sortare pot fi adesea gestionate într-o interogare de bază de date, dar nu toate sursele de date sunt baze de date. Prin urmare, MetaDapper acceptă configurarea operațiunilor complexe de grupare și sortare care pot fi efectuate în memorie.
În cazurile în care poate fi necesară doar o parte din datele sursă, filtrarea din surse care nu sunt bazate de date poate fi foarte complex de implementat și întreținut. MetaDapper acceptă configurarea filtrelor complexe cu operatori booleeni pentru orice număr de evaluări de câmp per înregistrare, cu imbricarea profundă a operațiunilor, după cum este necesar. De exemplu:
Filtrul de mai sus este echivalent cu următorul cod C#:
if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)
Mapări imbricate
Unele mapări necesită mai multe treceri pentru a finaliza procesul de conversie a datelor. Unele exemple includ date care necesită înregistrări de prefix sau sumare, date care trebuie mapate diferit în funcție de valorile câmpului sau de structura documentului sau pur și simplu pentru a izola diferitele etape ale unei mapări complexe (adică traducerea numelor, conversiile tipurilor etc.). În acest scop, MetaDapper acceptă mapări imbricate la orice nivel de adâncime.
Format vs structura
Ca instrument de cartografiere și conversie a datelor, MetaDapper este construit pentru a permite practic orice format de date să fie citit sau scris folosind interfețele interne de citire și scriere. Acest lucru permite crearea de clase de cititor/scriitor care sunt extrem de ușoare și se concentrează numai pe nuanțe specifice formatului.
De asemenea, cititorii și scriitorii se comportă cât mai inteligent și flexibil posibil. De exemplu, cititorul și scriitorul XML folosesc XPaths pentru a specifica unde să recupereze sau să scrie datele într-un fișier XML. Aceeași configurație poate fi folosită și pentru a citi și scrie, de exemplu, din formate non-XML (cum ar fi fișierele CSV), caz în care valorile XPath vor fi pur și simplu ignorate. De asemenea, dacă o configurație care nu include setările XPath este utilizată cu un cititor sau un scriitor XML, va fi generată o eroare.
Da. Dreapta. Sigur. (Câteva exemple de cartografiere a datelor reale)
Ești sceptic. Și nu te învinovățesc. Instrumentele software sunt rareori tot ce pretind a fi. Așadar, iată câteva exemple din lumea reală în care MetaDapper a fost deja folosit pentru a oferi beneficii operaționale.
O companie care furnizează software de management al asigurărilor medicale a avut clienți care nu doreau să completeze formulare web, dar doreau să-și furnizeze datele în foi de calcul. Folosind MetaDapper, foile de calcul încărcate sunt citite în memorie, datele curățate, înregistrările validate și rezultatele stocate în baza lor de date. Aceștia pot accepta fișiere Excel de la clienții lor fără nicio validare umană folosind MetaDapper cu un fișier de configurare ușor de creat pentru fiecare șablon de foaie de calcul pe care îl publică.
O mare companie de gaze are o aplicație internă și a dorit ca utilizatorii lor de management să poată descărca rapoarte în format Excel. Formatele de raport ar fi probabil schimbate în mod regulat. MetaDapper a facilitat ca foile Excel să fie generate din baza lor de date. Actualizarea formatelor Excel a necesitat doar actualizarea fișierelor de configurare MetaDapper fără nicio modificare sau recompilare a codului.
O companie care furnizează software de gestionare a activelor avea nevoie de o soluție pentru generarea de date financiare în formate de pachete de contabilitate dependente de client pentru import în acele sisteme. A fost dezvoltată o interogare generică de date contabile folosind un înveliș ORM și MetaDapper a fost folosit pentru a sorta, filtra și mapa datele în schema și formatul dorit pentru fiecare client. Una sau mai multe configurații MetaDapper sunt realizate pentru fiecare client și aceasta a devenit o caracteristică majoră de vânzare pentru clienții noi. Produsul poate fi configurat (folosind MetaDapper) în câteva minute pentru a suporta orice format de pachet de contabilitate personalizat sau standard, astfel încât integrarea cu sistemele esențiale și existente este inclusă la fiecare vânzare nouă. Aceeași companie folosește MetaDapper în diferite proiecte de integrare software, cartografiere și conversie a datelor și conversia codurilor interne între sistemele lor.
Un important reseller auto trebuia să adauge niște rapoarte de vânzări în format Excel la una dintre aplicațiile sale. Rapoartele au fost adăugate în aplicație în mai puțin de o oră – de la început până la sfârșit.
Un dezvoltator avea nevoie de un tabel de state americane identic cu setul folosit pe un alt site web. MetaDapper a fost folosit pentru a extrage datele de pe site și pentru a genera un script SQL pentru a-și popula tabelul în câteva minute.
Acestea sunt doar câteva exemple ale utilității și valorii dovedite ale MetaDapper ca instrument de cartografiere a datelor.
Învelire
Este nevoie de un salt mental pentru a începe să te gândești la conversia datelor în mod mai generic și pentru a începe să te gândești la seturi de date cu reguli de afaceri și utilitate nelimitată. MetaDapper este un cadru care promovează și facilitează această perspectivă.
Indiferent dacă utilizați MetaDapper, o altă tehnologie, sau utilizați propriile soluții de cartografiere a datelor, aceasta a fost o introducere în unele dintre complexitatea și costurile ascunse ale proiectelor de conversie a datelor. Sper sa gasesti informativ.
(Pentru mai multe informații despre MetaDapper, contactați echipa MetaDapper la [email protected].)