- Koristite SQLite i Python lokalno kako biste ponovo stvorili realistično SQL okruženje za praksu bez potrebe za potpunim skladištem podataka ili Spark klasterom.
- Prvo savladajte osnovne SQL vještine: filtriranje pomoću WHERE, spajanje više tabela i agregiranje podataka pomoću GROUP BY i HAVING.
- Normalizirajte sheme u više tabela s primarnim i stranim ključevima, a zatim koristite JOIN-ove za rekonstrukciju odnosa u vašim analizama.
- Kombinujte lokalnu praksu sa interaktivnim SQL platformama kako biste uvježbali pitanja u stilu intervjua i povratili samopouzdanje uz pomoć modernih alata za obradu podataka.
Ako se pokušavate vratiti SQL-u i Pythonu nakon nekoliko godina pauze, sasvim je normalno da se osjećate izgubljeno. – posebno ako ste na prethodnoj poziciji koristili vlasničke alate i udobne Databricks bilježnice koje više nemate. Moderni oglasi za posao koji zahtijevaju Python, SQL, pa čak i PySpark mogu izgledati zastrašujuće kada svaki vodič počinje nečim poput „učitajte svoj skup podataka o zahtjevima u svoje skladište podataka“ i pomislite: „To je upravo ono što nemam.“
Dobra vijest je da većinu tog iskustva učenja možete rekreirati na vlastitom laptopu. korištenje besplatnih alata, malih uzoraka skupova podataka i strukturiranog skupa vježbenih zadataka. U ovom vodiču ćemo, jednostavnim jezikom, proći kroz to kako izgraditi realistično lokalno okruženje, kako SQL funkcionira (od osnovnih upita do JOIN-ova i agregacije) i kako te SQL upite "obuhvatiti" u Pythonu kako biste mogli vježbati upravo onu vrstu zadataka s kojima ćete se suočiti u modernim poslovima s podacima.
Izgradnja jednostavnog lokalnog okruženja za vježbanje pomoću SQLite-a i Pythona
Ne treba vam potpuno skladište podataka ili Spark klaster da biste vježbali SQL plus PythonZa učenje i pripremu za intervju, lagana ugrađena baza podataka poput SQLite-a je više nego dovoljna. SQLite pohranjuje sve svoje podatke u jednu datoteku na disku, što ga čini savršenim za projekte igračaka, prototipove i edukativne vježbe.
Konceptualno, SQLite baza podataka izgleda kao tabela sa više listova.svaki list je sto, svaki red je rekord, a svaka kolona je PoljeU žargonu relacijskih baza podataka, tabele se ponekad nazivaju „relacije“, redovi „torke“, a kolone „atributi“, ali za praktičan rad možete se slobodno držati svakodnevnih termina tabela, red i kolona.
Python dolazi sa ugrađenim SQLite drajverom pod nazivom sqlite3., što znači da ne morate instalirati zaseban server baze podataka. Vaš Python skript će otvoriti vezu sa .sqlite datoteku (kreiranjem ako ne postoji), nabavite kursor objekt (vrlo sličan deskriptoru datoteke), a zatim poslati SQL naredbe kroz taj kursor koristeći execute(). Pogledajte naše SQLite SELECT i WHERE vodič za praktične primjere čitanja i filtriranja podataka.
Iako se ovaj članak fokusira na upravljanje SQLite-om iz Pythona, postoji i praktičan GUI alat pod nazivom „Preglednik baza podataka za SQLite“. (ponekad se distribuira kao DB Browser za SQLite). Pomoću njega možete vizualno pregledavati tabele, ručno umetati ili uređivati nekoliko redova i pokretati jednostavne SQL naredbe. To je kao tekstualni editor za datoteke baze podataka: brza ručna podešavanja su lakša u GUI-ju, ali sve što se ponavlja ili je složeno je bolje napisati u Pythonu.
Relacijske baze podataka su rigidnije od Python lista ili dictova: one insistiraju na definiranoj shemi.Kada kreirate tabelu, morate deklarisati nazive kolona i tipove podataka koje očekujete (tekst, cijeli broj, datum/vrijeme, itd.). SQLite će zatim pohraniti i indeksirati podatke na način koji održava efikasnu pretragu, čak i kada vaš skup podataka naraste izvan onoga što udobno stane u memoriju. Za praktične putanje učenja i primjere iz prve ruke, konsultujte analiza podataka pomoću SQL-a.
Kreiranje tabela i unos podataka pomoću SQL-a i Pythona
Da biste počeli vježbati, prvo vam je potrebna tabela – zamislite je kao dizajniranje oblika vaših podatakaPretpostavimo da želite malu tabelu muzičke biblioteke. Korištenje Python-ovog sqlite3 Modul vam omogućava da se povežete sa datotekom baze podataka, uklonite bilo koju staru verziju tabele ako postoji, a zatim kreirate novu tabelu sa jasno definisanim kolonama.
Evo kako taj tok konceptualno izgleda u Pythonu: ti zoveš sqlite3.connect('music.sqlite') da biste otvorili ili kreirali datoteku baze podataka, a zatim pozovite conn.cursor() da biste dobili kursor. Pomoću tog kursora možete pokretati SQL naredbe poput DROP TABLE IF EXISTS Songs da obrišete bilo koju prethodnu shemu, nakon čega slijedi CREATE TABLE Songs (title TEXT, plays INTEGER) da biste definisali novu tabelu sa dve kolone.
Kada tabela postoji, prelazite sa DDL-a (Jezik za definiciju podataka) na DML (Jezik za manipulaciju podacima) pomoću INSERT izjaveU Pythonu biste uvijek trebali koristiti parametrizirane upite: napišite INSERT INTO Songs (title, plays) VALUES (?, ?) i proslijediti tuple kao što je ('Thunderstruck', 20) kao drugi argument za execute()Upitnici su rezervirana mjesta koja će Python sigurno zamijeniti, pomažući vam da izbjegnete probleme sa SQL injekcijom i citiranjem grešaka.
Nakon što izvršite umetanje ili ažuriranje, morate pozvati conn.commit() da biste ispraznili promjene na diskDok ne potvrdite promjene, operacije se nalaze samo u međuspremniku transakcija. Ovo se razlikuje od jednostavnog pisanja u datoteke i jedna je od ključnih navika koje treba usvojiti rano: upit, izmjena, pa potvrda (commit).
Da biste pročitali svoje podatke, koristite SELECT naredbu i iteraciju preko kursora. Na primjer, SELECT title, plays FROM Songs će strimovati svaki red kao Python tuple, kao što je ('Thunderstruck', 20)Kursor ne učitava sve rezultate odjednom; umjesto toga, sporo dohvaća redove, što je korisno kada se na kraju susrećete s većim skupovima podataka.
Osnovni elementi SQL upita i filtriranje pomoću WHERE
Svaki SQL upit je izgrađen na malom skupu klauzula koje se pojavljuju u standardnom redoslijedu: SELECT, FROM, WHERE, GROUP BY, HAVING, I ORDER BYMinimalno trebate navesti koje kolone želite (SELECT) i iz koje tabele (FROM). Opcionalne klauzule zatim preciziraju, agregiraju, filtriraju agregirane rezultate i sortiraju izlaz.
The WHERE klauzula filtrira redove prije nego što se izvrši bilo kakvo grupisanje ili agregacijaZa numeričke kolone možete koristiti operatore poređenja kao što su =, != (ili <>), >, <, >=, <=Tekstualne kolone podržavaju ove plus usklađivanje uzoraka putem LIKE i provjere članstva putem INVrijednosti datuma/vremena podržavaju iste relacijske usporedbe, a često se vide rasponi izraženi sa BETWEEN.
Obrada null vrijednosti u SQL-u je dovoljno neobična da zaslužuje posebnu pažnju.Redovna poređenja poput = i != ne ponašaj se onako kako bi očekivao/la NULL, tako da SQL pruža IS NULL i IS NOT NULL za provjeru nedostajućih vrijednosti. Logičke kolone obično rade sa = i !=, ali ti i dalje treba IS NULL kada sama boolean vrijednost može nedostajati.
Kada kombinujete više uslova, imajte na umu da AND i OR slijedi pravila prioritetaAko pišete age < 5 OR age > 10 AND breed = 'Ragdoll', SQL će procijeniti AND Prvo. Da biste izrazili „Ragdoll mačke mlađe od 5 ili starije od 10 godina“, trebali biste koristiti zagrade: (age < 5 OR age > 10) AND breed = 'Ragdoll'Upoznavanje s ovim logičkim kombinacijama ključno je za analitički rad u stvarnom svijetu.
Uspoređivanje uzoraka sa LIKE omogućava vam pretraživanje nizova koji počinju, završavaju ili sadrže određene fragmenteZnak procenta % je džoker za bilo koji niz znakova, tako da breed LIKE 'R%' pronalazi pasmine koje počinju sa slovom "R", fav_toy LIKE 'ball%' pronalazi igračke čija imena počinju sa "lopta" i coloration LIKE '%m' pronalazi uzorke boja koji završavaju na "m". Upareno sa AND/OR, ovo postaje moćan alat za filtriranje teksta.
Vježbanje upita nad jednom tabelom s malim skupom podataka
Koristan način za izgradnju mišićne memorije je fiksiranje male sheme u glavi i rješavanje mnogih upita na osnovu nje.Zamislite cat tabela sa kolonama kao što su id, name, breed, coloration, age, sex, I fav_toyOvo vam daje dovoljno raznolikosti – tekst, brojevi, jednostavne kategorije – za vježbanje većine osnovnih obrazaca upita.
Za provjere boolean stila, često filtrirate na osnovu jedne kolone, a zatim slojevito dodajete uslove.Da biste naveli „dosadne“ mužjake mačaka koji nemaju zabilježenu omiljenu igračku, odabrali biste name gdje sex = 'M' i fav_toy IS NULLOvo ilustruje kako se null provjere uparuju s direktnim poređenjima kako bi se izolovao određeni podskup redova.
Da biste ciljali određene pasmine ili ih isključili, kombinirate jednakost s logičkom negacijomOdabir samo Ragdoll mačaka određene dobi koristi breed = 'Ragdoll'; isključujući Perzijance i Sijamce, moglo bi izgledati ovako breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese'Dok neke baze podataka podržavaju NOT IN ('Persian', 'Siamese')Vježbanje eksplicitnog obrasca pomaže u učvršćivanju vašeg razumijevanja NOT i LIKE.
Vježbe poput „ženke mačaka koje vole igračke za zadirkivanje i nisu perzijske ili sijamske“ prisiljavaju vas da kombinirate tekstualne filtere, jednakost i logičke operatoreOdabrali biste id, name, breed, coloration i ograničite redove koristeći sex = 'F', fav_toy = 'teaser', i složeni uslov koji isključuje neželjene pasmine. Obraćanje pažnje na zagrade osigurava da se svi poduslovi primjenjuju u predviđenoj kombinaciji.
Kada se upoznate s ovim jednostavnim primjerima u sirovom SQL-u, ponovo ih implementirajte putem Pythona koristeći parametrizirane upite.Napišite kratke scenarije koji traže rasu, minimalnu starost ili vrstu igračke od input(), uključite ih u WHERE klauzule i ispisati rezultate. Ovo je upravo most između pisanja upita i stvarnog aplikacijskog koda koji mnogi juniorski podaci u ulogama očekuju.
Razumijevanje i vježbanje SQL JOIN-ova
Čim prevaziđeš probleme s igračkama, stalno ćeš se pridruživati više stolova.JOIN-ovi su način na koji povezujete povezane skupove podataka: kupce s narudžbama, umjetnike s umjetničkim djelima, igre s kompanijama i tako dalje. U SQL-u opisujete koje kolone trebaju odgovarati između tabela, a mehanizam baze podataka spaja redove u kombinovani skup rezultata.
Postoje četiri osnovne vrste spajanja s kojima ćete se susresti na intervjuima i stvarnim projektima.: INNER JOIN (često se piše samo JOIN), LEFT JOIN, RIGHT JOIN, I FULL OUTER JOINUnutrašnje spajanje vraća samo redove gdje obje tabele imaju odgovarajuće ključeve; lijevo spajanje zadržava sve redove iz lijeve tabele, popunjavajući NULLkada desna tabela nema podudaranja; desni spoj radi simetričnu stvar; a potpuni vanjski spoj vraća svaki red sa obje strane, podudarajući se gdje je to moguće i koristeći NULL gdje ne.
misliti o LEFT JOIN i RIGHT JOIN kao operacije „više vjerujte ovoj strani“Kod lijevog spajanja, lijeva tabela je primarni izvor istine: svaki red iz nje se pojavljuje barem jednom u izlazu, čak i kada desna tabela ne doprinosi ništa. Kod potpunog spajanja, nijedna strana nije privilegovana – jednostavno ujedinjujete sve ključeve iz obje tabele i poravnavate ih tamo gdje se preklapaju.
Da bi upiti za više tabela bili čitljivi, uvijek dodajte pseudonime svojim tabelamaUmjesto pisanja SELECT artist.name više puta, pišite FROM artist AS a a zatim referencirajte kolone kao a.name. Slično tome, piece_of_art može postati poa, I museum može biti mKada vaš upit naraste na tri ili više spojeva, dobri aliasi su razlika između jasnoće i haosa.
Klasična postavka treninga koristi tri stola: artist, museum, I piece_of_art. The artist stol bi mogao držati id, name, birth_year, death_year i primarno polje poput akvarela ili skulpture. museum prodavnice stolova id, name i country. The piece_of_art držači za stol id, name, artist_id i museum_idTe posljednje dvije kolone su strani ključevi koji povezuju svako umjetničko djelo s njegovim autorom i lokacijom.
S tom shemom možete vježbati unutrašnje spajanje, lijevo spajanje i uvjetne filtere.Na primjer, da biste naveli umjetnike rođene nakon 1800. godine koji su živjeli više od 50 godina, uz imena njihovih djela, pridružili biste se artist i piece_of_art on artist.id = piece_of_art.artist_id a zatim filtrirajte sa death_year - birth_year > 50 i birth_year > 1800. Dodajte alias odabranim kolonama kao artist_name i piece_name zbog jasnoće.
Da biste vidjeli sva umjetnička djela zajedno s nazivima muzeja i državama - uključujući i "izgubljena" djela koja nemaju muzej – koristili biste LEFT JOIN od piece_of_art to museum on museum_idNa taj način, umjetnička djela bez pridruženog muzeja i dalje se pojavljuju u rezultatu, sa NULL u kolonama muzeja. Filtriranje redova gdje artist_id IS NULL omogućava vam da otkrijete djela nepoznatih umjetnika, a istovremeno se pridružite muzejima koji ih posjeduju.
Naprednije vježbe zahtijevaju da se istovremeno pridružite trima stolovima.Da biste naveli svako umjetničko djelo i ime umjetnika i naziv muzeja, pridružili biste se museum to piece_of_art on museum.id = piece_of_art.museum_id, zatim se pridružite artist on artist.id = piece_of_art.artist_idKorištenje običnog JOIN (unutrašnje spajanje) namjerno izostavlja umjetnička djela kojima nedostaje umjetnik ili muzej, dajući vam osjećaj kako tip spajanja utiče na broj redova.
Agregacija, GROUP BY i HAVING u praksi
Kada jednom uspijete preuzeti i spojiti podatke, sljedeća velika vještina je njihovo sažimanje.Funkcije agregacije kao što su SUM(), AVG(), COUNT(), MAX(), I MIN() izračunati metrike nad skupovima redova. GROUP BY dijeli vaš skup podataka u grupe i primjenjuje te funkcije unutar svake grupe - na primjer, jedna grupa godišnje, po kompaniji ili po umjetniku. Ako preferirate strukturirane kurseve za vježbanje ovih koncepata, pogledajte sveobuhvatni SQL kurs.
Zamislite jednostavno sales_table sa kolonama year, month, I sales. Ravna SELECT SUM(sales) AS total_sales FROM sales_table daje vam ukupan zbir u svim redovima. Sabiranje GROUP BY year mijenja pitanje: sada tražite ukupnu prodaju godišnje, a ne jedan ukupni broj.
Ključno pravilo je da svaka neagregirana kolona u vašem SELECT mora se pojaviti u GROUP BY. Ako odaberete year i SUM(sales), grupišete po year. Ako odaberete year i month zajedno s agregatima, zatim grupirate po oba year i monthKonceptualno, različite kombinacije grupiranih kolona definiraju grupe.
WHERE i HAVING Oba su filteri, ali djeluju u različitim fazama. WHERE filtrira sirove redove prije nego što dođe do bilo kakvog grupiranja ili agregacije. HAVING filtrira grupirane rezultate pomoću agregiranih izraza. Na primjer, mogli biste WHERE production_year BETWEEN 2000 AND 2009 i onda HAVING SUM(revenue) > 4000000 zadržati samo kompanije čije su "dobre igre" generirale više od četiri miliona prihoda.
Realističnija shema prakse je games sto sa kolonama poput id, title, company, type, production_year, system, production_cost, revenue, I ratingPomoću ove jedne tabele možete vježbati prosjeke, brojanja, sumiranja, grupisanje i rangiranje – osnove analitičkog SQL-a.
Na primjer, da bi se izračunala prosječna cijena proizvodnje igara objavljenih od 2010. do 2015. godine s ocjenom većom od 7, odabrali biste AVG(production_cost) i ograničite redove sa WHERE production_year BETWEEN 2010 AND 2015 AND rating > 7To je klasično pitanje u stilu intervjua i možete ga lako ugraditi u Python i ispisati rezultirajući jedan broj.
Također možete generirati statistiku na godišnjem nivou direktno iz istog games stoGrupiraj po production_year, zatim izračunaj COUNT(*) AS count, AVG(production_cost) AS avg_cost, I AVG(revenue) AS avg_revenueOva vrsta upita vam daje kompaktan prikaz vremenskih serija koji je izuzetno uobičajen u BI kontrolnim tablama i alatima za izvještavanje.
Da biste rangirali kompanije po bruto profitu tokom svih godina, možete agregirati podatke na companyPraktičan obrazac je SELECT company, SUM(revenue - production_cost) AS gross_profit_sum FROM games GROUP BY 1 ORDER BY 2 DESC. Evo GROUP BY 1 i ORDER BY 2 koristite pozicije kolona u SELECT lista, koja može održati stvari sažetim, ali se mora koristiti pažljivo kako ne biste prekinuli upite kasnijem promjenom redoslijeda kolona.
Složeniji upiti povezuju filtere, filtere za grupiranje i filtere nakon agregacijePretpostavimo da definirate „dobre igre“ kao one proizvedene između 2000. i 2009. godine, s ocjenom iznad 6 i prihodom većim od troškova proizvodnje. Za svaku kompaniju želite broj takvih igara plus njihov ukupni prihod, ali samo za kompanije čiji prihod od dobrih igara prelazi 4,000,000. Filtrirali biste redove sa WHERE on production_year, rating, i profitabilnost, grupirati po company, izračunaj COUNT(company) i SUM(revenue), zatim primijenite HAVING SUM(revenue) > 4000000Ovaj jedan upit obuhvata većinu stvarnih mentalnih koraka s kojima ćete se susresti u analitičkim zadacima.
Modeliranje podataka s više tabela i ključeva
Dizajni s jednom tabelom vas prilično dovedu daleko, ali relacijske baze podataka zablistaju kada normalizujete podatke u više tabela.Normalizacija je proces eliminacije redundantnog prostora za pohranu i predstavljanja odnosa putem ključeva. To vašu bazu podataka čini manjom, bržom i manje sklonom greškama.
Jednostavan, ali poučan primjer dolazi iz pretraživanja društvenih grafova sličnih Twitteru.Recimo da želite pratiti korisničke račune i odnose "pratioca" između njih. Jedan naivan pristup bi bio jedna tabela u kojoj svaki red duplicira imena i pratioca i osoba koje prati kao tekst. To brzo dovodi do prevelikog ponavljanja i nedosljednog pravopisa.
Umjesto toga, podijelite stvari na People sto i a Follows sto. People može imati cijeli broj id kao primarni ključ, jedinstveni name (ime na ekranu ili nadimak) i retrieved zastavica koja signalizira da li ste već pretražili listu prijatelja tog računa. Follows sadrži parove cijelih brojeva from_id i to_id, što predstavlja usmjerene veze od jednog korisnika do drugog.
Tri ključna koncepta strukturiraju ovaj model: logički ključevi, primarni ključevi i strani ključeviLogički ključ je ono što vanjski svijet koristi za pozivanje na zapis – ovdje, Twitter identifikator u namePrimarni ključ je obično cijeli broj generiran od strane baze podataka (id) koji jedinstveno identificira svaki red i jednostavan je za indeksiranje i poređenje. Strani ključ je cijeli broj koji pokazuje na primarni ključ u drugoj tabeli – from_id i to_id u Follows tabele su strani ključevi koji referenciraju People.id.
Da biste osigurali kvalitet podataka, deklarišete ograničenja u definicijama tabela. Na primjer, name TEXT UNIQUE in People osigurava da slučajno ne možete umetnuti dva reda s istom ručkom. A UNIQUE(from_id, to_id) ograničenje u Follows sprečava vas da pohranite istu follow ivicu više puta. Ova ograničenja služe i kao sigurnosne mreže kada počnete pisati upsert logiku u Pythonu.
U Pythonu sqlite3 modul, uobičajeni obrazac je korištenje INSERT OR IGNORE da dostojanstveno poštuju ta ograničenjaAko pokušate umetnuti name koji već postoji, SQLite će tiho preskočiti operaciju umjesto da prijavi grešku. Zatim možete provjeriti cursor.rowcount da se vidi da li je red zaista dodat i da se osloni na cursor.lastrowid otkriti dodijeljeno id za novounesene korisnike.
Kada vaš kod dobije novo korisničko ime, prvo bi trebao pokušati pronaći odgovarajuće id. Ako a SELECT id FROM People WHERE name = ? vraća red, ponovo koristite taj cijeli broj. Ako ne, ubacujete ime sa retrieved = 0, potvrdi, a zatim pročitaj lastrowidTaj obrazac "pronađi ili ubaci" je u srži mnogih skripti za unos podataka.
Nakon što su poznati ID-ovi i pratioca i osobe koju prati, evidentiranje odnosa u Follows je samo još jedan INSERT OR IGNORE. Tvoj UNIQUE(from_id, to_id) Ograničenje se odnosi na duplikate, a vi se možete koncentrirati na logiku višeg nivoa o tome koje profile sljedeće indeksirati, umjesto na mikroupravljanje deduplikacijom redova.
Korištenje JOIN-a za rekonstrukciju relacija iz normaliziranih tabela
Normalizovane sheme zamenjuju redundanciju indirekcijom: umesto ponovljenih stringova pohranjujete cijele brojeve, ali sada morate spojiti tabele da biste rekonstruisali potpunu sliku.To je upravo ono što SQL JOIN je dizajniran za, i kada se na to naviknete, upiti koji koriste mnogo JOIN-ova djeluju potpuno prirodno.
U primjeru društvenog grafa, ako želite vidjeti s kojim korisnikom id = 2 prati, pridružili biste se Follows to People na ciljnoj strani. Konceptualno, pokrećete SELECT * FROM Follows JOIN People ON Follows.to_id = People.id WHERE Follows.from_id = 2Ovo proizvodi kombinovane redove koji sadrže i numeričku ivicu i ime koje ljudi mogu čitati za svakog pratioca.
Svaki red u tom rezultatu je "meta-red" koji spaja kolone iz obje tabelePrve dvije kolone bi mogle biti (from_id, to_id) od Follows, dok sljedeće kolone pripadaju People - kao (id, name, retrieved). Zbog JOIN uslov nameće Follows.to_id = People.id, taj odnos možete eksplicitno vidjeti: druga i treća kolona svakog reda se podudaraju.
Ovaj isti obrazac se prirodno proširuje na više stolovaVeć si to vidio/la sa artist, piece_of_art, I museuma Twitter pretraživač to ilustruje sa People i FollowsU složenijim analitičkim procesima, možete spojiti tabele činjenica (događaji, narudžbe) sa višestrukim tabelama dimenzija (korisnici, proizvodi, kampanje) kako biste odgovorili na višestruka pitanja.
Prilikom otklanjanja grešaka u kodu ili učenja kako se shema uklapa, tok rada "pokreni Python, a zatim pregledaj pomoću DB Browsera za SQLite" je izuzetno efikasan.Izvršite skriptu da biste popunili bazu podataka, zatvorite sve GUI instance koje zaključavaju datoteku, a zatim otvorite .sqlite datoteku u pregledniku. Odatle možete pregledati sadržaj svake tabele i pokrenuti ad-hoc SELECT upite kako biste provjerili svoje pretpostavke.
Jedna napomena: SQLite nameće zaključavanje datoteka, tako da ako DB Browser ima bazu podataka otvorenu u načinu uređivanja, vaš Python skript možda neće uspjeti uspostaviti vezu ili potvrditi promjene.Rješenje je zatvoriti bazu podataka u GUI-ju (ili potpuno zatvoriti preglednik) prije ponovnog pokretanja Python koda. Stjecanje navike zatvaranja alata koji zaključavaju vašu DB datoteku spasit će vas od misterioznih grešaka „baza podataka je zaključana“.
Spajanjem ovih tehnika – dizajna sheme, ograničenja, parametriziranih upita u Pythonu, JOIN-ova, GROUP BY-a i HAVING-a – dobijate moćnu lokalnu laboratoriju. za vježbanje upravo one vrste SQL i Python posla koju ćete raditi na poslu. Sa samo SQLite-om i nekoliko dobro strukturiranih primjera tabela, možete uvježbavati pitanja u stilu intervjua, prototipirati analitičku logiku i povratiti samopouzdanje uz pomoć modernih alata za obradu podataka.
Gdje se platforme poput DataLemur-a i interaktivni kursevi uklapaju
Pored vaše lokalne prakse, interaktivne platforme vam mogu pružiti vođenije iskustvo s trenutnim povratnim informacijama.Alati nastali iz stvarnog iskustva u industriji – na primjer, platforme koje su kreirali bivši inženjeri podataka Facebooka i Googlea koji su dane provodili pišući SQL i Python te provodeći A/B testove – često svoj sadržaj usmjeravaju na stvarna pitanja za intervjue i analitičke scenarije.
Knjige koje pokrivaju statistiku, mašinsko učenje i poslovnu intuiciju za intervjue sa podacima odlične su za teoriju., ali ne pružaju uvijek praktično SQL igralište koje mnogi učenici žele. Upravo tu prazninu neki moderni alati pokušavaju popuniti: oni prepakiraju stotine upita u stilu intervjua u SQL i analitičko okruženje unutar preglednika tako da možete pokretati, podešavati i ponovo pokretati svoje upite bez brige o lokalnom postavljanju. Također možete isprobati primijenjene primjere poput procjena rizika od odliva kupaca kombinovati SQL sa osnovnim radnim tokovima mašinskog učenja.
Također ćete pronaći interaktivne SQL kurseve koji odražavaju teme koje smo ovdje obradili.upiti za jednu tabelu sa SELECT i WHERE, spajanja dvije ili tri tabele, agregacija i grupiranje, podupiti i još mnogo toga. Mnogi od ovih kurseva oslanjaju se na realistične skupove podataka – zamislite igre, muzeje ili transakcijske prodaje – tako da pitanja djeluju kao stvarni poslovni problemi, a ne kao izmišljene zagonetke.
Ako se osjećate preopterećeno dokumentacijom za alate poput PySpark-a, DuckDB-a ili dbt-a, sasvim je razumno da ih odgodite dok vam osnove SQL-a ne budu čvrste.Fokusiranje prvo na SQLite plus Python omogućava vam da internalizirate osnovne obrasce upita bez borbe s konfiguracijom klastera ili dozvolama u oblaku. Nakon što osnove postanu druga priroda, učenje PySparka postaje više o distribuiranom izvršavanju nego o novim konceptima upita.
U konačnici, kombinacija jednostavne lokalne postavke, strukturiranih vježbenih problema i povremene upotrebe interaktivnih platformi pruža vam najbolje od svih svjetova: potpunu kontrolu nad vašim okruženjem, snažnu konceptualnu osnovu i izloženost stilu pitanja koje vrhunski poslodavci vole. Uz stalnu praksu, nekada zastrašujuća kombinacija SQL-a, Pythona i alata za inženjering podataka postaje poznat, čak i ugodan, set alata koji možete samouvjereno koristiti u novim ulogama.
Kada sve to saberemo, vaš put naprijed je jasan: pokrenite SQLite bazu podataka pomoću Pythona, dizajnirajte nekoliko realističnih tabela, uvježbajte osnovne i srednje SQL obrasce (filteri, spajanja, agregacija, grupisanje, HAVING), umotajte te upite u Python skripte i opcionalno dopunite svoje učenje interaktivnim SQL platformama koje su izgradili praktičari koji su bili upravo tamo gdje ste vi sada.Na taj način ćete obnoviti svoje tehničke instinkte, smanjiti anksioznost oko modernih skupova podataka i biti spremni da se nosite sa SQL i Python zahtjevima današnjih uloga u vezi sa podacima.