dimensional data model data warehouse tutorial with examples
Acest tutorial explică avantajele și miturile modelului de date dimensionale în Data Warehouse. De asemenea, aflați despre tabelele de dimensiuni și tabelele de informații cu exemple:
Testarea depozitului de date a fost explicat în tutorialul nostru anterior, în acest Seria de instruire pentru depozitul de date pentru toți .
Date imense sunt organizate în Data Warehouse (DW) cu tehnici de modelare dimensională a datelor. Aceste tehnici de modelare dimensională a datelor facilitează sarcina utilizatorilor finali de a întreba despre datele de afaceri. Acest tutorial explică totul despre modelele de date dimensionale din DW.
Public țintă
- Depozite de date / dezvoltatori și testeri ETL.
- Profesioniști în baze de date cu cunoștințe de bază despre conceptele bazelor de date.
- Administratori de baze de date / experți în big data care doresc să înțeleagă conceptele de depozit de date / ETL.
- Absolvenți de colegiu / Freshers care caută locuri de muncă în depozit de date.
Ce veți învăța:
Modele de date dimensionale
Modelele de date dimensionale sunt structurile de date disponibile utilizatorilor finali în fluxul ETL, pentru a interoga și analiza datele. Procesul ETL se termină cu încărcarea datelor în modelele de date dimensionale țintă. Fiecare model de date dimensionale este construit cu un tabel de date înconjurat de mai multe tabele de dimensiuni.
Pașii care trebuie urmați în timpul proiectării unui model de date dimensionale:
Avantajele modelării dimensionale a datelor
Mai jos sunt enumerate diferitele avantaje ale modelării dimensionale a datelor.
- Acestea sunt securizate pentru a utiliza mediile DW în continuă schimbare.
- Datele uriașe pot fi construite cu ușurință cu ajutorul modelelor de date dimensionale.
- Datele din modelele de date dimensionale sunt ușor de înțeles și de analizat.
- Acestea sunt accesibile rapid de către utilizatorii finali pentru interogări cu performanțe ridicate.
- Modelele de date dimensionale ne permit să analizăm (sau) să derulăm datele ierarhic.
Modelarea ER Vs Modelarea dimensională a datelor
- Modelarea ER este potrivită pentru sistemele operaționale, în timp ce modelarea dimensională este potrivită pentru depozitul de date.
- Modelarea ER menține date tranzacționale curente detaliate, în timp ce modelarea dimensională menține rezumatul atât al datelor tranzacționale curente, cât și istorice.
- Modelarea ER are date normalizate, în timp ce modelarea dimensională are date normalizate.
- Modelarea ER utilizează mai multe îmbinări în timpul recuperării interogării, în timp ce modelarea dimensională utilizează un număr mai mic de îmbinări, prin urmare performanța interogării este mai rapidă în modelarea dimensională.
Mituri de modelare a datelor dimensionale
Mai jos sunt prezentate câteva dintre miturile de modelare a datelor dimensionale existente.
- Modelele de date dimensionale sunt utilizate numai pentru a reprezenta rezumatul datelor.
- Acestea sunt specifice departamentului într-o organizație.
- Nu acceptă scalabilitatea.
- Acestea sunt concepute pentru a îndeplini scopul rapoartelor și interogărilor utilizatorilor finali.
- Nu putem integra modelele de date dimensionale.
Tabelele de dimensiuni
Tabelele de dimensiuni joacă un rol cheie în sistemul DW prin stocarea tuturor valorilor metrice analizate. Aceste valori sunt stocate sub atribute dimensionale (coloane) ușor de selectat în tabel. Calitatea unui sistem DW depinde în principal de adâncimea atributelor de dimensiune.
Prin urmare, ar trebui să încercăm să furnizăm multe atribute împreună cu valorile lor respective în tabelele de dimensiuni.
Să explorăm structura tabelelor de dimensiuni !!
# 1) Cheia tabelului de dimensiuni: Fiecare tabel de dimensiuni va avea oricare dintre atributele sale de dimensiune ca cheie principală pentru a identifica în mod unic fiecare rând. Prin urmare, valorile numerice distincte ale acelui atribut pot acționa ca chei primare.
Dacă valorile atributelor nu sunt unice în niciun caz, atunci puteți considera numerele de sistem generate secvențial ca chei principale. Acestea sunt, de asemenea, numite chei surogate.
Modelele de date dimensionale trebuie să aibă constrângerea referențială de integritate pentru fiecare cheie dintre dimensiuni și fapte. Astfel, tabelele de date vor avea o referință de cheie străină pentru fiecare cheie primară / surogat din tabelul de dimensiuni pentru a menține integritatea referențială.
Dacă nu reușește, atunci datele respective din tabelul de date nu pot fi recuperate pentru acea cheie de dimensiune.
# 2) Tabelul este larg: Putem spune că tabelele de dimensiuni sunt largi, deoarece putem adăuga orice număr de atribute unui tabel de dimensiuni în orice moment al ciclului DW. Arhitectul DW va solicita echipei ETL să adauge respectivele atribute noi la schemă.
În scenarii în timp real, puteți vedea tabele de dimensiuni cu 50 (sau) mai multe atribute.
# 3) Atribute textuale: Atributele dimensionale pot fi de orice tip, de preferință text (sau) numeric. Atributele textuale vor avea cuvinte de afaceri reale mai degrabă decât coduri. Tabelele de cote nu sunt destinate calculelor, prin urmare valorile numerice sunt rareori utilizate pentru atributele dimensionale.
# 4) Atributele nu pot fi legate direct: Este posibil ca toate atributele dintr-un tabel de dimensiuni să nu fie legate între ele.
# 5) Nu normalizat: Normalizarea unui tabel de dimensiuni aduce mai multe tabele intermediare în imagine, ceea ce nu este eficient. Astfel, tabelele de dimensiuni nu sunt normalizate.
Atributele dimensionale pot acționa ca sursă pentru constrângeri în interogări și pot fi afișate și ca etichete în rapoarte. Interogările vor funcționa eficient dacă alegeți direct un atribut din tabelul de dimensiuni și vă referiți direct la tabelul de fapt respectiv fără a atinge alte tabele intermediare.
# 6) Găurirea și rularea: Atributele de dimensiune au capacitatea de a detalia (sau) înfășura datele ori de câte ori este necesar.
# 7) Ierarhii multiple: Un tabel cu dimensiuni unice având ierarhii multiple este foarte comun. Un tabel de dimensiuni va avea o ierarhie simplă dacă există o singură cale de la nivelul inferior până la partea de sus. În mod similar, va avea mai multe ierarhii dacă există mai multe căi prezente pentru a ajunge de la nivelul inferior până la partea de sus.
# 8) Puține înregistrări: Tabelele de dimensiuni vor avea un număr mai mic de înregistrări (în sute) decât tabelele de date (în milioane). Deși sunt mai mici decât faptele, ele furnizează toate elementele de intrare în tabelele de date.
Iată un exemplu de tabel de dimensiuni pentru clienți:
Înțelegând conceptele de mai sus, puteți decide dacă un câmp de date poate acționa ca un atribut de dimensiune (sau) nu în timp ce extrageți datele din sursa însăși.
Planul de încărcare de bază pentru o dimensiune
Dimensiunile pot fi create în două moduri, adică prin extragerea datelor de dimensiune din sistemele sursă externe (sau) Sistemul ETL poate construi dimensiunile din etapă fără a implica surse externe. Cu toate acestea, un sistem ETL fără nicio procesare externă este mai potrivit pentru a crea tabele de dimensiuni.
Mai jos sunt pașii implicați în acest proces:
java trece matricea la metodă prin referință
- Curățarea datelor: Datele sunt curățate, validate și regulile de afaceri sunt aplicate înainte de încărcare în tabelul de dimensiuni pentru a menține coerența.
- Conformarea datelor: Datele din alte părți ale depozitului de date ar trebui să fie agregate în mod corespunzător ca o singură valoare, în raport cu fiecare câmp al tabelului de dimensiuni.
- Distribuiți aceleași domenii: Odată confirmate datele, acestea sunt stocate din nou în tabelele de etapizare.
- Livrarea datelor: În cele din urmă, toate valorile atributului dimensional sunt încărcate cu cheile primare / surogate atribuite.
Tipuri de dimensiuni
Diferitele tipuri de dimensiuni sunt enumerate mai jos pentru referință.
Să începem!!
# 1) Dimensiuni mici
Dimensiunile mici din depozitul de date acționează ca tabele de căutare cu un număr mai mic de rânduri și coloane. Datele în dimensiuni mici pot fi încărcate cu ușurință din foi de calcul. Dacă este necesar, dimensiunile mici pot fi combinate ca super dimensiune.
# 2) Dimensiune conformă
O dimensiune conformă este o dimensiune care poate fi menționată în același mod cu fiecare tabel de date cu care este legată.
Dimensiunea de dată este cel mai bun exemplu de dimensiune conformă, deoarece atributele dimensiunii de dată, cum ar fi anul, luna, săptămâna, zilele etc. comunică aceleași date în același mod în orice număr de fapte.
Un exemplu de dimensiune conformă.
# 3) Dimensiunea junk
Puține atribute dintr-un tabel de date, cum ar fi steaguri și indicatori, pot fi mutate într-un tabel de dimensiuni nedorite separat. Aceste atribute nu aparțin niciunei alte tabele de dimensiuni existente. În general, valorile acestor atribute sunt pur și simplu un „da / nu” (sau) „adevărat / fals”.
Crearea unei noi dimensiuni pentru fiecare atribut de semnalizare individuală o face complexă prin crearea unui număr mai mare de chei străine în tabelul de informații. În același timp, păstrarea tuturor acestor steaguri și informații despre indicatori în tabele de fapt crește și cantitatea de date stocate în fapte, ceea ce degradează performanța.
Prin urmare, cea mai bună soluție pentru aceasta este crearea unei singure dimensiuni junk, deoarece o dimensiune junk este capabilă să dețină orice număr de indicatori „da / nu” sau „adevărat / fals”. Cu toate acestea, dimensiunile nedorite stochează valori descriptive pentru acești indicatori (da / nu (sau) adevărat / fals), cum ar fi activ și în așteptare etc.
Pe baza complexității unui tabel de fapte și a indicatorilor săi, un tabel de fapte poate avea una sau mai multe dimensiuni nedorite.
Un exemplu de Dimensiune Junk.
# 4) Dimensiune de rol
O singură dimensiune care poate fi menționată în mai multe scopuri într-un tabel de date este cunoscută sub numele de dimensiune Role-playing.
Cel mai bun exemplu pentru o dimensiune de joc de rol este din nou un tabel de dimensiuni de dată, deoarece același atribut de dată într-o dimensiune poate fi utilizat în scopuri diferite într-un fapt, cum ar fi data comenzii, data livrării, data tranzacției, data anulării, etc.
Dacă este necesar, puteți crea patru vizualizări diferite pe tabelul cu dimensiuni de dată cu privire la patru atribute de dată diferite ale unui tabel de date.
Un exemplu de dimensiune de rol.
# 5) Dimensiuni degenerate
Pot exista puține atribute care nu pot fi nici dimensiuni (valori), nici fapte (măsuri), dar acestea trebuie analizate. Toate aceste atribute pot fi mutate în dimensiuni degenerate.
De exemplu, puteți considera numărul comenzii, numărul facturii etc. ca atribute de dimensiune degenerate.
Un exemplu de dimensiune degenerată.
# 6) Modificarea lentă a dimensiunilor
O dimensiune care se schimbă încet este un tip în care datele se pot schimba lent în orice moment, mai degrabă decât la intervale regulate periodice. Datele modificate în tabelele de dimensiuni pot fi tratate în moduri diferite, după cum se explică mai jos.
Puteți selecta tipul SCD pentru a răspunde la o modificare individuală pentru fiecare atribut dintr-un tabel dimensional.
(i) SCD de tip 1
- În tipul 1, când există o modificare a valorilor atributelor dimensionale, valorile existente sunt suprascrise cu valorile nou modificate, care nu este altceva decât o actualizare.
- Datele vechi nu sunt păstrate pentru referință istorică.
- Rapoartele anterioare nu pot fi regenerate din cauza inexistenței datelor vechi.
- Ușor de întreținut.
- Impactul asupra tabelelor de fapt este mai mare.
Exemplu de tip 1 SCD:
(Ii) SCD de tip 2
- În tipul 2, când există o modificare a valorilor atributelor dimensionale, va fi inserat un rând nou cu valorile modificate, fără a modifica datele vechi ale rândului.
- Dacă există vreo referință de cheie străină care există la vechea înregistrare în oricare dintre tabelele de informații, atunci vechea cheie surogat se actualizează oriunde cu o nouă cheie surogat automat.
- Impactul asupra modificărilor din tabelul de fapt este foarte redus cu pasul de mai sus.
- Datele vechi nu sunt luate în considerare nicăieri după modificări.
- În tipul 2, putem urmări toate modificările care se întâmplă la atributele dimensionale.
- Nu există nicio limită pentru stocarea datelor istorice.
- În tipul 2, adăugarea câtorva atribute la fiecare rând, cum ar fi data modificată, data-oră efectivă, data-ora de încheiere, motivul modificării și semnalizatorul curent este opțională. Dar acest lucru este semnificativ dacă afacerea dorește să cunoască numărul de modificări efectuate într-o anumită perioadă de timp.
Exemplu de tip 2 SCD:
(Iii) SCD de tip 3
- În tipul 3, când există o modificare a valorilor atributelor dimensionale, valorile noi sunt actualizate, dar valorile vechi rămân valabile ca a doua opțiune.
- În loc să adăugați un rând nou pentru fiecare modificare, va fi adăugată o nouă coloană dacă nu există anterior.
- Valorile vechi sunt plasate în atributele adăugate mai sus, iar datele atributului principal sunt suprascrise cu valoarea modificată ca la tipul 1.
- Există o limită pentru stocarea datelor istorice.
- Impactul asupra tabelelor de fapt este mai mare.
Exemplu de tip 3 SCD:
(iv) SCD de tip 4
- În tipul 4, datele curente sunt stocate într-un singur tabel.
- Toate datele istorice sunt păstrate într-un alt tabel.
Exemplu de tip 4 SCD:
(v) SCD de tip 6
- Un tabel dimensional poate avea, de asemenea, o combinație a tuturor celor trei tipuri SCD 1, 2 și 3, cunoscută sub numele de dimensiune hibridă de tip 6 (sau) care se schimbă lent.
Tabelele de date
Tabelele de date stochează un set de valori măsurate cantitativ care sunt utilizate pentru calcule. Valorile tabelului de informații sunt afișate în rapoartele comerciale. Spre deosebire de tipul de date textuale al tabelelor de dimensiuni, tipul de date al tabelelor de date este semnificativ numeric.
Tabelele de date sunt profunde, în timp ce tabelele de dimensiuni sunt largi, deoarece tabelele de date vor avea un număr mai mare de rânduri și un număr mai mic de coloane. O cheie principală definită în tabelul de fapt este în primul rând identificarea fiecărui rând separat. Cheia primară se mai numește și tabel de fapt cheie compusă.
Dacă cheia compusă lipsește într-un tabel de date și dacă oricare două înregistrări au aceleași date, este foarte greu să diferențiem datele și să le trimitem în tabelele de dimensiuni.
Prin urmare, dacă există o cheie unică adecvată ca cheie compusă, atunci este bine să generați un număr de secvență pentru fiecare înregistrare a tabelului de fapte. O altă alternativă este formarea unei chei primare concatenate. Acest lucru va fi generat prin concatenarea tuturor cheilor primare referite ale tabelelor de dimensiuni în rând.
Un singur tabel de date poate fi înconjurat de tabele cu mai multe dimensiuni. Cu ajutorul cheilor străine care există în tabele de fapt, contextul respectiv (date detaliate) ale valorilor măsurate poate fi menționat în tabelele de dimensiuni. Cu ajutorul interogărilor, utilizatorii vor efectua drill down și roll up eficient.
Cel mai scăzut nivel de date care poate fi stocat într-un tabel de date este cunoscut sub numele de Granularitate. Numărul tabelelor de dimensiuni asociate cu un tabel de fapte este invers proporțional cu granularitatea datelor din tabelul de fapte. Adică cea mai mică valoare a măsurării necesită mai multe tabele de dimensiuni pentru a fi trimise.
Într-un model dimensional, tabelele de fapt mențin relația mai multe la multe cu tabelele de dimensiuni.
Un exemplu de tabel cu informații despre vânzări:
Plan de încărcare pentru tabele de date
Puteți încărca datele unui tabel de date în mod eficient luând în considerare următoarele indicații:
# 1) Eliminați și restaurați indexurile
Tabelele de fapt, indexuri, sunt stimulatoare de performanță bune în timpul interogării datelor, dar demolează performanța în timp ce se încarcă datele. Prin urmare, înainte de a încărca orice date uriașe în tabelele de date, aruncați în primul rând toți indexurile de pe acel tabel, încărcați datele și restaurați indexurile.
# 2) Separați inserțiile de actualizări
Nu îmbinați înregistrările inserate și actualizate în timp ce încărcați într-un tabel de date. Dacă numărul de actualizări este mai mic, atunci procesează inserțiile și actualizările separat. Dacă numărul actualizărilor este mai mare, atunci este recomandabil să tăiați și să reîncărcați tabelul de informații pentru rezultate rapide.
# 3) Partiționare
Realizați partiționarea fizică pe o tabelă de date în mini tabele pentru o performanță mai bună a interogării pe datele tabelului de date în bloc. Cu excepția DBA-urilor și a echipei ETL, nimeni nu va fi la curent cu partițiile despre fapte.
Ca un exemplu , puteți partiționa un tabel lunar, trimestrial, anual etc. În timpul interogării, sunt luate în considerare numai datele partiționate în loc să scaneze întregul tabel.
# 4) Încărcare în paralel
cum se inițializează o listă legată în java
Acum avem o idee despre partițiile de pe tabelele de informații. Partițiile pe fapte sunt, de asemenea, benefice în timp ce încărcă date imense în fapte. Pentru a face acest lucru, mai întâi, rupeți datele logic în fișiere de date diferite și rulați joburile ETL pentru a încărca toate aceste porțiuni logice de date în paralel.
# 5) Utilitar de încărcare în vrac
Spre deosebire de alte sisteme RDBMS, sistemul ETL nu are nevoie să mențină în mod explicit jurnalele de revenire pentru eșecurile tranzacției medii. Aici „încărcări în bloc” se întâmplă în fapte în loc de „inserții SQL” pentru a încărca date imense. Dacă în cazul în care o singură încărcare eșuează, toate datele pot fi reîncărcate cu ușurință (sau) pot fi continuate de unde sunt lăsate cu încărcarea în bloc.
# 6) Ștergerea unei înregistrări de fapt
Ștergerea unei înregistrări a tabelului de fapt se întâmplă numai dacă compania dorește în mod explicit. Dacă există date de tabel de date care nu mai există în sistemele sursă, atunci datele respective pot fi șterse fie fizic (fie) logic.
- Ștergere fizică: Înregistrările nedorite sunt eliminate definitiv din tabelul de informații.
- Ștergere logică: O nouă coloană va fi adăugată la tabelul de informații, cum ar fi „ștearsă” de tip Bit (sau) boolean. Acesta acționează ca un steag pentru a reprezenta înregistrările șterse. Trebuie să vă asigurați că nu selectați înregistrările șterse în timpul interogării datelor din tabelul de date.
# 7) Secvență pentru actualizări și ștergeri într-un tabel de informații
Când există date care urmează să fie actualizate, tabelele de dimensiuni ar trebui să fie actualizate mai întâi, urmate de actualizarea cheilor surogate în tabelul de căutare, dacă este necesar și după aceea, tabelul de fapt respectiv se actualizează. Ștergerea se întâmplă invers deoarece ștergerea tuturor datelor nedorite din tabelele de date face ușor să ștergeți datele nedorite legate din tabelele de dimensiuni.
Ar trebui să urmăm secvența de mai sus în ambele cazuri, deoarece tabelele de dimensiuni și tabelele de fapt mențin integritatea referențială tot timpul.
Tipuri de fapte
Pe baza comportamentului datelor tabelelor de fapte, acestea sunt clasificate ca tabele de fapte de tranzacții, tabele de fapte instantanee și tabele de fapte instantanee acumulate. Toate aceste trei tipuri urmează caracteristici diferite cu strategii diferite de încărcare a datelor.
# 1) Tabelele cu informații despre tranzacții
După cum indică numele, tabelele de fapt ale tranzacțiilor stochează date la nivel de tranzacție pentru fiecare eveniment care se întâmplă. Un astfel de tip de date este ușor de analizat chiar la nivelul tabelului de date. Dar pentru o analiză ulterioară, puteți face referire și la dimensiunile asociate.
De exemplu, fiecare vânzare (sau) cumpărare efectuată de pe un site de marketing ar trebui încărcată într-un tabel cu informații despre tranzacții.
Un exemplu de tabel de date privind tranzacțiile este prezentat mai jos.
# 2) Tabelele de informații periodice instantanee
Așa cum denumirea indică datele din tabelul periodic al instantaneelor, este stocat sub formă de instantanee (imagini) la intervale periodice, cum ar fi în fiecare zi, săptămână, lună, trimestru etc., în funcție de nevoile afacerii.
Deci, este clar că aceasta este o agregare de date tot timpul. Prin urmare, datele instantanee sunt mai complexe în comparație cu tabelele de date privind tranzacțiile. De exemplu, orice date privind rapoartele de venituri din performanță pot fi stocate în tabele de informații instantanee pentru o referință ușoară.
Un exemplu de tabel periodic de informații instantanee este prezentat mai jos.
# 3) Acumularea tabelelor de informații instantanee
Acumularea tabelelor de informații instantanee vă permite să stocați date în tabele pentru întreaga durată de viață a unui produs. Aceasta acționează ca o combinație a celor două tipuri de mai sus, în care datele pot fi inserate de orice eveniment în orice moment, ca instantaneu.
În acest tip, coloanele de date suplimentare și datele pentru fiecare rând sunt actualizate cu fiecare etapă a produsului respectiv.
Un exemplu de tabel de date instantanee cumulate.
În plus față de cele trei tipuri de mai sus, iată câteva alte tipuri de tabele de date:
# 4) Tabelele de fapt factless: Un fapt este o colecție de măsuri, în timp ce faptul surprinde mai puțin doar evenimentele (sau) condițiile care nu conțin nicio măsură. Un tabel de date fără date este utilizat în principal pentru a urmări un sistem. Datele din aceste tabele pot fi analizate și utilizate pentru raportare.
De exemplu, puteți căuta detalii despre un angajat care și-a luat concediu și tipul de concediu într-un an etc. Includând toate aceste detalii de fapt neclare într-un fapt, tabelul va crește cu siguranță dimensiunea faptelor.
Un exemplu de tabel de fact factless este prezentat mai jos.
# 5) Tabelele de fapte conforme: Un fapt conform este un fapt care poate fi menționat în același mod cu fiecare martie de date cu care este legat.
Specificațiile unui tabel de informații
Datele de mai jos sunt specificațiile unui tabel de informații.
- Numele faptului: Acesta este un șir care descrie pe scurt funcționalitatea tabelului de informații.
- Procesul de afaceri: Discuțiile despre afacere trebuie să fie îndeplinite de tabelul respectiv.
- Întrebări: Menționează o listă de întrebări de afaceri la care se va răspunde în tabelul respectiv.
- Cereale: Indică cel mai scăzut nivel de detaliu asociat cu datele din tabelul respectiv.
- dimensiuni: Enumerați toate tabelele de dimensiuni asociate cu tabelul respectiv.
- Măsuri: Valorile calculate stocate în tabelul de date.
- Frecvența de încărcare Reprezintă intervalele de timp pentru încărcarea datelor în tabelul de date.
- Rândurile inițiale: Consultați datele inițiale populate în tabelul de informații pentru prima dată.
Exemplu de modelare dimensională a datelor
Puteți face o idee despre modul în care tabelele de dimensiuni și tabelele de date pot fi proiectate pentru un sistem, uitându-vă la diagrama de modelare a datelor dimensionale de mai jos pentru vânzări și comenzi.
Concluzie
Până acum, ar fi trebuit să câștigați cunoștințe excelente despre tehnicile de modelare a datelor dimensionale, beneficiile acestora, miturile, tabelele de dimensiuni, tabelele de informații, împreună cu tipurile și procesele lor.
Consultați următorul nostru tutorial pentru a afla mai multe despre schemele Data Warehouse !!
=> Accesați aici pentru a afla stocarea datelor de la zero.
Lectură recomandată
- Tutorial privind testarea depozitului de date cu exemple | Ghid de testare ETL
- Exemple de minerit de date: cele mai frecvente aplicații ale mineritului de date 2021
- Tutorial Python DateTime cu exemple
- Noțiuni fundamentale privind depozitarea datelor: un ghid final cu exemple
- Tutorial de testare a volumului: exemple și instrumente de testare a volumului
- Top 10 instrumente populare de stocare a datelor și tehnologii de testare
- Data Mining: Proces, tehnici și probleme majore în analiza datelor
- Cum se efectuează teste bazate pe date în SoapUI Pro - Tutorial SoapUI # 14