O jakie chmury piszącemu te słowa się rozchodzi, będzie wiadomo kilka akapitów później. Na ten moment przyjmijmy, że rzecz się rozbija o moje karygodne zaniedbania na niniejszym blogu, czego rzecz jasna nie mogę odżałować, ale ostatnio czasy są dla mnie wielce ciekawe, choć “ciekawe” w sensie zbliżonym do tego z dość znanego chińskiego porzekadła czy tam przekleństwa.
Tak się bowiem składa, że w rezultacie moich poszukiwaniach świętego Graala na rynku pracy, kilka miesięcy temu “przydarzyła” mi się zmiana ówczesnej matki żywicielki na tą obecną. Tym niemniej tym razem była to nieco bardziej fundamentalna wolta niż poprzednio, ponieważ oprócz tego, że zmieniła się nazwa płatnika, który co miesiąc zasila moje konto środkami płatniczymi, to dodatkowo doszło do dość znaczących przeobrażeń w charakterze zadań, z którymi przyszło mi się mierzyć na co dzień.
Tym niemniej wspominam o tym fakcie wyłącznie z tego powodu, iż to wydarzenie miało – czy właściwie cały czas ma – ogromny impact na narzędzia, którymi mam okazję się obecnie posługiwać, zaś w samym centrum tego instrumentarium stoi rozwiązanie “made in Google”. Dokładnie chodzi o hurtownie danych BigQuery, które gigant z Mountain View ma w swojej ofercie dla użytkowników Google Cloud Platform.
Jeśli mam być szczery z mojej perspektywy jest to fundamentalna zmiana i nie idzie tu o sam fakt, że podstawową aplikacją do komunikowania się z bazą danych jest obecnie przeglądarka internetowa. Otóż całe moje dotychczasowe życie zawodowe, a przynajmniej ta jego część, która dotyczy szeroko rozumianego przetwarzania danych, związane było z bazami danych bezpośrednio obsługującymi różnego rodzaju systemy transakcyjnie. Obecnie rzecz jasna z tego rodzaju danymi nadal mam do czynienia, choć są to już tylko mniej lub bardziej przetworzone ekstrakty z systemów źródłowych. Wprawdzie nie jest tak, że nie przyszło mi nigdy wcześniej korzystać z hurtowni danych, ale mimo wszystko pod spodem miałem do czynienia ze starymi dobrymi SZBD, a tylko sposób organizowania danych oraz ich przeznaczenie były inne niż w systemach transakcyjnych.
To co mnie uderzyło nade wszystko to konieczność przestawienia się na zupełnie inny sposób myślenia o interakcji z danymi przy pomocy SQL (swoją drogą googlowski dialekt szalenie mi odpowiada) z dwóch powodów:
- silnik googlowski zupełnie inaczej te dane przetwarza, tak więc redundancja kodu w zapytaniach jest wręcz pożądana (a przynajmniej tak jest w wielu wypadkach) i nie ma co przejmować się optymalizacją zapytania na wzór tego, co ma miejsce w przypadku klasycznych narzędzi od Oracle’a czy Microsoftu. Jedną rzecz chciałbym doprecyzować zanim przejdę do drugiego punktu: pisząc o redundancji miałem na myśli wielokrotne odwoływania się do tej samej tabeli przy pomocy kilku zapytań połączonych “unionami” czy w postaci podzapytań.
- sposób rozliczania się z Google opiera się na innych kryteriach niż te, o których myślimy w przypadku rozwiązań “tradycyjnych”, gdzie “kosztem” jest wielkość użytej pamięci czy czas zajętości procesora. Tutaj ważniejsz jest to, ile danych musi zostać przeczytanych (i nie chodzi nawet o liczbę rekordów), by zobaczyć interesujący nas wynik. Stąd też chociażby wysoce niewskazane jest używanie poleceń w rodzaju ‘SELECT * FROM tabela’.
Te dwie rzeczy stanowiły dla mnie największe wyzwanie na samym początku mojej przygody z BigQuery, ponieważ musiałem zmienić pewne wieloletnie przyzwyczajenia oraz zmodyfikować dość mocno rozumienie tego, co dotychczas uważałem za dobre praktyki związane z tworzeniem optymalnych zapytań.
Tym niemniej kwestii, które “mnie bolą” jest znacznie więcej. Ot chociażby na ten przykład brak możliwość tworzenia triggerów. Oczywiście w przypadku hurtowni danych te ostatnie raczej nie mają większego sensu, a przynajmniej trudno sobie takie zastosowanie wyobrazić w przypadku typowego magazynu danych (choć tutaj ekspertem nie jestem). Tym niemniej dla moich celów możliwość dosztukowania wyzwalacza w kilku wypadkach dość mocno uprościłoby mi pracę. Poza tym BigQuery oferuje dość ograniczona możliwości przy tworzeniu własnych funkcji, ponieważ w ich przypadku możemy używać wyłącznie “czystego” SQL-a, czyli bez programistycznych dodatków jak zmienne czy pętle, które nota bane BigQuery oferuje w przypadku pisania skryptów czy procedur. Oczywiście gwoli sprawiedliwości muszę zaznaczyć, że jest możliwość pisania funkcji w JavaScript, gdzie już można poszaleć na całego, ale to już całkiem nie moja bajka.
Tym niemniej nie chciałbym tylko narzekać – jak to mam w zwyczaju – tym bardziej, że do celów, do których to rozwiązanie zostało stworzone (przetwarzanie ogromnych ilości danych w celach analitycznych), BigQuery nadaje się znakomicie. Poza tym Google obudował tę usługę różnymi narzędziami, które ułatwiają chociażby automatyzację pracy. Mamy tutaj na myśli narzędzia wiersza poleceń (bq command-line tool),a także przygotował API oraz gotowe biblioteki do jego usługi dla wielu najbardziej popularnych języków programowania. Zwłaszcza amatorzy Pythona powinni być szczególnie usatysfakcjonowani, ponieważ Google dostarczył autorski moduł wspierający korzystanie z Pandas w przypadku BigQuery.
Jednakże tym co najbardziej mnie zaskoczyło była – czy właściwie jest – możliwość trenowania najbardziej popularnych modeli uczenia maszynowego bezpośrednio w BigQuerry, tj. w ramach tworzenia “zwykłych” kwerend SQL na podstawie informacji odczytanych bezpośrednio z naszych tabel. Oczywiście nie jest to rozwiązanie tak wyszukane jak chociażby znane z najpopularniejszych bibliotek napisanych na potrzeby ML, ale to otwiera nowe możliwości dla osób, które poza SQL-em świata nie znają, ponieważ nie wymaga znajomości niczego więcej niż SQL-a właśnie i załatwia w tle za użytkownika wszelkie kwestie związane chociażby z normalizacją danych.
Tak po prawdzie to temu rozwiązaniu miał być poświęcony dzisiejszy wpis, ale po raz kolejny włączyło mi się typowe dla mnie “gawędziarstwo”, dlatego – mam nadzieję – temat ten postanowiłem przenieść na kolejny wpis, coby nie stracić całości tego niedzielnego popołudnia (zaiste pogoda dzisiaj cudna i Szanowna Małżonka marudzi coś o spacerze). Tym niemniej co by nie zostawiać czytelnika z zupełnie niczym, poniżej filmik, w którym Google promuje to rozwiązanie.