Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
ETL one to many relationship from CSV to XML
#19
Posted 02 March 2024 - 18:54
cralin, on 02 martie 2024 - 14:16, said:
Pentru transformarea din CSV in XML, in afara ca trebuie sa extinzi etl.sh cu cite valori/coloane are o linie citita din csv si sa construiesti corect output-ul XML in rest nu cred ca se schimba nimic daca ai mai multe detalii despre o masina. Legatura intre datele din cele doua csv-uri o faci pe baza valorii din primul field al fiecarei linii din cele doua fisiere si nu pe baza UUID-ului din reportedCaseId Uite: main.csv 1,John,RO,The complete address 1 2,David,AT,The complete address 2 3,Helen,DE,The complete address 3 222,Gigel,RO,The complete address 222 reportedCarsData.csv 1,Dacia,2021,Cancelled,2c4c231b-f612-4725-876d-8a32c674d2eb 3,Porche,2024,Completed,c3e59825-81d2-47bd-b385-d0f587c2c434 2,Mercedes,2020,Clearing,e65752276a19d7fabfab98f71514cb77 1,Audi,2023,Completed,8a63217e-d019-46b9-ae23-1e52c4e57ffe 2,Ford,2021,Execution,e6ac636eb7c1a8fc1c460d5ad4add487 222,Lastun,1960,In approval,e1c76251-1721-4454-b35c-6657e42b8552 |
#20
Posted 02 March 2024 - 18:59
cralin, on 02 martie 2024 - 18:34, said:
@dani.user, Nu stii apriori cit de multe date ai si cel mai probabil ca o sa-ti crape excelul cind il pui sa-ti incarce un csv de citeva sute de MB si citeva milioane de linii in el. Cine a zis ceva de Excel? Excel e in poza doar pentru a arata structura datelor din CSV intr-un mod mai usor. Edited by dani.user, 02 March 2024 - 19:11. |
#21
Posted 02 March 2024 - 19:15
dani.user, on 02 martie 2024 - 18:59, said:
Cine a zis ceva de Excel? Excel e in poza doar pentru a arata structura datelor din CSV intr-un mod mai usor. Id,Name,Country,Address,Model,Year 1,John,RO,address1,, ,,,,Dacia,2021 ,,,,Ford,2023 Daca-i asa, problema este (cel putin asa vad) ca liniile au coloane goale. Iti complici viata, trebuie un algoritm pus la cale care sa nu le interpreteze ca errori si care sa stie de care group ele apartin. Plus ca sunt greu de citit daca le printezi in consola. Edited by fabian23, 02 March 2024 - 19:26. |
#22
Posted 02 March 2024 - 23:53
fabian23, on 02 martie 2024 - 19:15, said: Iti complici viata, trebuie un algoritm pus la cale care sa nu le interpreteze ca errori si care sa stie de care group ele apartin. E vorba de un singur if. Mai simplu si mult mai rapid decat cautarea in alt fisier. Untitled.png 77.53K 6 downloads |
#23
Posted 03 March 2024 - 10:12
dani.user, on 02 martie 2024 - 23:53, said:
Nu este atat de simplu, desi mi-ar placea. Pot/vor fi esantioane de date, neconsistente si ele trebuie raportate ca errori pentru reconcilieri/raportari ulterioare. Nu ma pot baza pe faptul ca daca prima coloana este empty atunci tot ce vine dupa trebuie pus pe nivelul 2 in raportare. Poti primi un csv cu o linie unde primul element lipseste (putin probabil ca-i id) dar trebuie tratat cazul. Apoi unele coloane sunt optionale, deci pot fi empty. Ce a sugerat @cralin mi se pare mult mai clean: un file unde sunt cuprinsi cei raportati iar unul unde sunt cuprinse toate caseId-urile asociate lor. Edited by fabian23, 03 March 2024 - 10:13. |
#24
Posted 03 March 2024 - 13:11
fabian23, on 03 martie 2024 - 10:12, said: Poti primi un csv cu o linie unde primul element lipseste (putin probabil ca-i id) dar trebuie tratat cazul. De ce n-ar fi id? Nu tu definesti cum trebuie sa arate CSVul? fabian23, on 03 martie 2024 - 10:12, said:
Ce a sugerat @cralin mi se pare mult mai clean: un file unde sunt cuprinsi cei raportati iar unul unde sunt cuprinse toate caseId-urile asociate lor. Si mult mai lent. Dar poate nu-i asta o problema. |
#25
Posted 03 March 2024 - 14:12
Ambele functioneaza si ambele se bazaeaza pe niste presupuneri legate de cum poti sa primesti datele din DWH (ordonate sau neordonate), thread-uri/job-uri paralele sau nu si/sau daca mai trebuie sa faci in ETL si alte conversii/manipulari de date inainte sa le arunci in XML.
E clar ca scriptul in BASH e mai lent/ineficient decit codul scris cam in orice limbaj de programare. Edited by cralin, 03 March 2024 - 14:20. |
#26
Posted 03 March 2024 - 16:25
dani.user, on 03 martie 2024 - 13:11, said:
De ce n-ar fi id? Nu tu definesti cum trebuie sa arate CSVul? Extractia nu-i facuta de mine si nu-i sub controlul meu. Eu cel mult pot da "contractul", adica cum astept datele de intrare. dani.user, on 03 martie 2024 - 13:11, said:
Si mult mai lent. Dar poate nu-i asta o problema. Da, nu este o problema. ETL-ul poate fi mai lent atata timp cat ruleaza intr-un timp rezonabil: 1-2h. Edited by fabian23, 03 March 2024 - 16:33. |
#27
Posted 03 March 2024 - 23:47
Cu un Intel® Core i5-3360M CPU @ 2.80GHz si cu un set de date mai reprezentativ, la codul ala din BASH ii trebuie cam 2.5 ore sa termine de generat XML-ul
$ wc -l *synthetic.csv 250000 main_synthetic.csv 1374909 reportedCarsData_synthetic.csv $ time ./etl.sh main_synthetic.csv reportedCarsData_synthetic.csv > result.xml real 143m23.160s user 113m33.760s sys 80m48.694s |
#29
Posted 04 March 2024 - 01:18
Am generat 250000 de ID-uri in main_synthetic.csv si un numar aleator intre 1 si 10 masini pentru fiecare ID.
Sincer, nu am calculat citi KB/s face asta dar oricum XML-ul ala e mare fata de dimensiunea totala a CSV-urilor cu date raw. Uite aici dimensiunea fisiereor: ls -lh total 232M -rwxr-xr-x 1 cralin cralin 979 Mar 2 19:54 etl.sh -rwxr-xr-x 1 cralin cralin 1003 Mar 3 21:16 etl_v2.sh -rw-r--r-- 1 cralin cralin 139 Mar 1 21:23 main.csv -rw-r--r-- 1 cralin cralin 15M Mar 3 19:04 main_synthetic.csv -rw-r--r-- 1 cralin cralin 358 Mar 2 13:03 reportedCarsData.csv -rw-r--r-- 1 cralin cralin 29M Mar 3 19:36 reportedCarsData_synthetic.csv -rw-r--r-- 1 cralin cralin 189M Mar 3 22:02 result.xml E clar ineficient sa pornesti de 250000 grep-ul (se vede ca 80 de minute sint consumate in "sys"). Nici nu ma asteptam sa fie rapid tocmai din cauza fork-ului pentru grep. Si inca ceva, scriptul BASH a folosit doar un core din cele 4 cite le avea la dispozitie pe masina respectiva. Probabil ca fara fork-uri de grep si cu mai multe thread-uri care sa foloseasca la maxim numarul de core-uri care sint disponibile poti sa-l faci sa termine mai repede. Edited by cralin, 04 March 2024 - 01:20. |
#30
Posted 04 March 2024 - 02:39
Si cu ce a propus @dani.user (sper ca am inteles bine codul din screenshot)
etl_dani.user.sh: #!/bin/bash echo '<?xml version="1.0" encoding="UTF-8"?>' echo '<dataBody xmlns="urn:ro:test:car:report:v1" xmlns:ns2="urn:ro:test:car:report:commontypes:v1" version="4.0">' FIRST_ELEMENT=1 while IFS="," read -r _ID_ _NAME_ _COUNTRY_ _ADDRESS_ _CARDATA_MODEL_ _CARDATA_YEAR_ do if [ -n "$_ID_" ] then if [ $FIRST_ELEMENT -ne 1 ] then echo '</report>' fi FIRST_ELEMENT=0 echo '<report Id="'$_ID_'">' echo '<Name>'$_NAME_'</Name>' echo '<Address>' echo '<Country>'$_COUNTRY_'</Country>' echo '<AddressFree>'$_ADDRESS_'</AddressFree>' echo '</Address>' else echo '<reportedCar>' echo '<model>'$_CARDATA_MODEL_'</model>' echo '<year>'$_CARDATA_YEAR_'</year>' #echo '<reportedCaseId type="'$_CARDATA_REPORTED_CASEID_TYPE_'">'$_CARDATA_REPORTED_CASEID_UUID_'</reportedCaseId>' echo '</reportedCar>' fi done < $1 echo '</report>' echo '</dataBody>' Asa arata continutul fisierului dani.user__reportedCarsData_synthetic.csv 1,Name_1,Country_1,The complete address 1,, ,,,,Model_1,Year_1 ,,,,Model_2,Year_2 ,,,,Model_3,Year_3 ,,,,Model_4,Year_4 ,,,,Model_5,Year_5 ,,,,Model_6,Year_6 ,,,,Model_7,Year_7 2,Name_2,Country_2,The complete address 2,, ,,,,Model_1,Year_1 ,,,,Model_2,Year_2 ,,,,Model_3,Year_3 ,,,,Model_4,Year_4 ,,,,Model_5,Year_5 ,,,,Model_6,Year_6 ,,,,Model_7,Year_7 ,,,,Model_8,Year_8 3,Name_3,Country_3,The complete address 3,, ,,,,Model_1,Year_1 ,,,,Model_2,Year_2 ,,,,Model_3,Year_3 ,,,,Model_4,Year_4 ,,,,Model_5,Year_5 ,,,,Model_6,Year_6 4,Name_4,Country_4,The complete address 4,, ,,,,Model_1,Year_1 ,,,,Model_2,Year_2 ,,,,Model_3,Year_3 ,,,,Model_4,Year_4 $ ls -lh *dani.user*.csv -rw-r--r-- 1 cralin cralin 40M Mar 4 00:55 dani.user__reportedCarsData_synthetic.csv $ wc -l dani.user__reportedCarsData_synthetic.csv 1623658 dani.user__reportedCarsData_synthetic.csv $ time ./etl_dani.user.sh dani.user__reportedCarsData_synthetic.csv > result.xml real 1m34.322s user 1m9.695s sys 0m24.192s Edited by cralin, 04 March 2024 - 02:42. |
#31
Posted 04 March 2024 - 17:50
cralin, on 04 martie 2024 - 02:39, said: $ ls -lh *dani.user*.csv -rw-r--r-- 1 cralin cralin 40M Mar 4 00:55 dani.user__reportedCarsData_synthetic.csv $ wc -l dani.user__reportedCarsData_synthetic.csv 1623658 dani.user__reportedCarsData_synthetic.csv $ time ./etl_dani.user.sh dani.user__reportedCarsData_synthetic.csv > result.xml real 1m34.322s user 1m9.695s sys 0m24.192s Imi place ca ai facut profiling. Offtopic, cu ce ai generat datele dummy? Multumesc. Edited by fabian23, 04 March 2024 - 17:50. |
#32
Posted 04 March 2024 - 19:02
fabian23, on 04 martie 2024 - 17:50, said:
Offtopic, cu ce ai generat datele dummy? Cu BASH (sint sarac si nu imi permit altceva). for i in $(seq 1 250000); do echo "${i},Name_${i},Country_$i,The complete address ${i},,"; for j in $(seq 1 $(echo $((1 + RANDOM % 10)))); do echo ",,,,Model_${j},Year_${j}"; done; done | tee dani.user__reportedCarsData.csv Edited by cralin, 04 March 2024 - 19:13. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users