sfpug lightning talk
DESCRIPTION
SFPUG Lightning TalkTRANSCRIPT
![Page 1: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/1.jpg)
Retroactive Analytics With Distributed PostgreSQL
Dan RobinsonHeap
![Page 2: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/2.jpg)
● Heap: web/iOS analytics that captures everything
![Page 3: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/3.jpg)
![Page 4: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/4.jpg)
![Page 5: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/5.jpg)
![Page 6: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/6.jpg)
![Page 7: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/7.jpg)
● Heap: web/iOS analytics that captures everything
● Making this interactive is hard!
![Page 8: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/8.jpg)
app_id user_id
properties HSTORE events HSTORE[]
12345 102756 email=>’[email protected]’, ab_test_grp=>’A’ ...
12345 300732 ab_test_grp=>’B’ ...
67890 628537 ...
49964 368868 utm_campaign=>’social’ ...
![Page 9: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/9.jpg)
app_id user_id properties HSTORE events HSTORE[]
12345 102756 email=>’[email protected]’, ab_test_grp=>’A’
...
12345 300732 ab_test_grp=>’B’ ...
67890 628537 ...
49964 368868 utm_campaign=>’social’ ...
app_id user_id
properties HSTORE events HSTORE[]
75632 257186 ... ...
75632 120554 ... ...
app_id user_id
properties HSTORE
events HSTORE[]
……
users_001
users_002
users
![Page 10: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/10.jpg)
app_id user_id properties HSTORE events HSTORE[]
12345 102756 email=>’[email protected]’, ab_test_grp=>’A’
...
12345 300732 ab_test_grp=>’B’ ...
67890 628537 ...
49964 368868 utm_campaign=>’social’ ...
……
users_001
users_002
users
app_id user_id
properties HSTORE events HSTORE[]
75632 257186 ... ...
75632 120554 ... ...
SELECT COUNT(*)FROM usersWHERE app_id = 12345GROUP BY events[1]->'path'
![Page 11: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/11.jpg)
users_001
users
SELECT COUNT(*)FROM usersWHERE app_id = 12345GROUP BY events[1]->'path'
SELECT COUNT(*)FROM users_001WHERE app_id = 12345GROUP BY events[1]->'path'
![Page 12: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/12.jpg)
● Denormalized → fast, no joins.
● Subqueries are just postgres.
● Add UDFs for more expressiveness.
![Page 13: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/13.jpg)
funnel_events(events hstore[], pattern_array text[]) RETURNS int[]-- Returns an array with 1s corresponding to steps completed-- in the funnel, 0s in the other positions
![Page 14: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/14.jpg)
funnel_events(events hstore[], pattern_array text[]) RETURNS int[]-- Returns an array with 1s corresponding to steps completed-- in the funnel, 0s in the other positions
SELECT sum( funnel_events( events, ARRAY['"path"=>"/","object"=>"pageview"', '"type"=>"submit","hierarchy"=>like "%@form;#signup;%"'] )) AS "funnel_results"FROM usersWHERE app_id = 12345
![Page 15: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/15.jpg)
● Denormalized schema. (No joins.)
● CitusDB to distribute queries.
● Express any analysis with UDFs.
![Page 16: SFPUG Lightning Talk](https://reader036.vdocuments.site/reader036/viewer/2022082804/5499348cb4795923778b45f2/html5/thumbnails/16.jpg)
Questions?