Včera odpoledne pod taktovkou Felipe Hoffa proběhl workshop na téma “Google BigQuery”. Sešlo se tam asi 15 lidí, které na CZ trhu BigQuery láká. Felipe, jako Google Developer Advocate stručně proskákal historii zpracování velkých dat v Google - počínaje MapReduce v roce 2004, přes white paper Dremelu, konče dnešním BigQuery.
- Nová cenová politka - jak objem zpracovaných dat, tak samotné úložiště masivně zlevnilo
- Vysvětlení, jak fungují JOIN EACH a GROUP EACH BY (Shuffler nody zpětnovazebně zapojují zpracovaná data zpět na Leaf nody)
- Možnost v reálném čase dělat dotazy na data, která se do BigQuery streamují. Limit na stream je 100.000 řádků / sec proti jedné tabulce. Google to řeší oddělením streamovaných dat od standardně naloadovaných CSV/JSON (které se musejí přeparsovat pro sloupcové uložení)
- Překvapila me nativní podpora pro dělání kartézských součinů. Nevím proč, ale jsem zvyklý, že se jim chce člověk vyhnout. BigQuery má na to nově CROSS JOIN.
- Konektory k BigQuery. Co si nejsem jistý, jestli spojení BigQuery a Hadoopu implikuje kopírování dat “pryč” nebo se MapReduce joby spouští přímo v BQ. Super mi přijde, že v případě že si platíte Google Analytics Premium, můžete traffic data exportovat v jejich nejnižší granularitě do BigQuery a dotazovat se jich jako SQL databáze.
- BigQuery bude brzo podporovat uživatelské funkce, napsané v Javascriptu!
- Felipe aktivně skáče kolem Reddit skupiny, kam dává cokoliv zajímavého kolem něj projde. Jiný jeho kámoš provozuje http://bigqueri.es/, kde jsou příklady dotazů a sample data.
- Pěkný příklad korelace: Které letiště umí lépe předpovědět lety z NY
SELECT a.departure_state, b.departure_state, corr(a.avg, b.avg) corr, COUNT(*) c FROM (SELECT date, departure_state, AVG(departure_delay) avg , COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] WHERE departure_state = 'NY' GROUP BY 1,2 HAVING c > 5 ) a JOIN (SELECT DATE(DATE_ADD(timestamp(date), 1, 'DAY')) date, departure_state , AVG(departure_delay) avg, COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] GROUP BY 1,2 HAVING c > 5 ) b ON a.date=b.date GROUP EACH BY 1, 2 HAVING c > 5 ORDER BY corr DESC;
- Existuje projekt http://gdeltproject.org/, který od roku 1979 denně mapuje všechny země na světě (broadcastované zprávy, tištěné média, online deníky,…). Sleduje tak vztahy ve společnosti (s podporou 100 jazyků). V BigQuery je jako public dataset o objemu 90GB. Dataset najdete tady: https://bigquery.cloud.google.com/table/gdelt-bq:full.events. Je skvěle anotovaný a výborně se hodí na hraní. Tady je příklad, který ukazuje rok za rokem vztahy čechů a okolních států, podle zaznamenaných událostí:
SELECT Year, Actor1Name, Actor2Name, c FROM (SELECT Actor1Name, Actor2Name, Year, COUNT(*) c, RANK() OVER(PARTITION BY YEAR ORDER BY c DESC) rank FROM (SELECT REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor2Name, Year FROM [gdelt-bq:full.events] WHERE Actor1Name < Actor2Name), (SELECT REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor2Name, Year FROM [gdelt-bq:full.events] WHERE Actor1Name > Actor2Name), WHERE Actor1Name IS NOT null AND Actor2Name IS NOT null AND (REGEXP_MATCH(Actor1Name+Actor2Name, 'CZECH')) AND Actor1Name != Actor2Name GROUP EACH BY 1, 2, 3 HAVING c > 100) WHERE rank=1 ORDER BY Year;
- Existuje rozšíření do Chrome, které umožnuje výsledky rychle vykreslit do grafů, počítá cenu dotazu, konvertuje timestampy, apod.
- V kanclu Google jsou na záchodě kartáčky na zuby
Na závěr se nejaktivnější účastníci z Netmailu vyfotili
a rozproudila se diskuse. V podvečer měl pak Felipe přednášku na FELu. Na to, že akorát přiletěl a měl jetlag, je dost hustej! :-)