Fabric’as ne visagalis

Prisimenate, kaip prieš porą mėnesių džiaugiausi pradėjęs dirbti Microsoft Fabric aplinkoje? Tada ten kūriau savo pirmąjį projektą ir viskas ėjosi kaip per sviestą… na, kol neužlaužiau viso mūsų įmonei skirto „capacity”! 😂

Tuo metu jaučiausi lyg turėčiau neribotus galios resursus. Bet kai teko ištrinti visą projektą ir pradėti iš naujo, ėmiau atidžiau stebėti, kiek resursų sunaudoja kiekvienas paleistas skriptas. Ir pasirodo, kad tie resursai – toli gražu ne begaliniai! Dirbant su dideliais duomenų kiekiais, jie naudojami labai greitai.

Dabar susidūriau su nauja problema – mūsų turimo „capacity” resursų neužtenka, kai noriu „notebook’e” paleisti skaičiavimus su duomenų šaltiniu, kuris turi daugiau nei 63 milijardus eilučių! 🤯

Dirbant su nedideliais duomenų kiekiais ir naudojant Python Pandas, galima rinktis, kur atlikti skaičiavimus. Pavyzdžiui, galima parašyti sudėtingesnę SQL užklausą ir dalį skaičiavimų perduoti serveriui, kuriame yra duomenys, o likusias transformacijas daryti kompiuteryje. Arba galima naudoti paprastą užklausą ir tada jau viską skaičiuoti savo kompiuteryje.

Bet Fabric’o „notebook’uose” viskas kitaip. Pirmiausia bandžiau tiesiog į „notebook’ą” įkelti visus tuos milijardus eilučių ir prie jų prijungti kitus duomenis, bet tai sunaudojo labai daug resursų. Tada pamėginau parašyti SQL užklausą su agregacijomis, kad į „notebook’ą” būtų įkeliamas mažesnis duomenų kiekis. Bet stebint Sparko „job’us” pamačiau, kad skaičiavimuose vis tiek naudojami tie patys milijardai eilučių! Maniau, kad naudojant užklausą su agregacijomis, dalis skaičiavimų bus atliekama duomenų šaltinio „capacity”, bet pasirodo, viskas vyksta tame „capacity”, kuriame ir vykdomi skaičiavimai.

Pabandžiau ir kitą būdą – pakeičiau lentų jungimo tvarką, kai FROM sąlygoje pasirenki mažiausią lentą, ir didžiausią prijungi tik pačioje pabaigoje. Deja, rezultatas nepasikeitė. Greičiausiai PySpark pats viską optimizuoja, todėl realių pokyčių nesijaučia.

Kažkiek nuvylė ir „shortcut’ų” naudojimas. Tikėjausi, kad naudojant juos skaičiavimai bus atliekami originaliame jo „capacity”, tačiau, pasirodo, duomenys yra persiunčiami į tą, kuriame kuri „notebook’ą”, ir tada jame pilnai atliekami skaičiavimai…

Taigi, nors Fabric ir turi daug privalumų, dirbant su labai dideliais duomenų kiekiais, vis tiek susiduriama su resursų apribojimais.

Parašykite komentarą