11. Framework de ETL
Planificación de la ejecución
• Latencia de información
• Agenda de ejecución
• Grafo de dependencias
• Ejecución en paralelo/serie
18. Tablas de hechos
• Relación 1 a 1 de eventos real con entrada en la
tabla
• Columnas numéricas
• Relaciones con las tablas de dimensiones
• No registrar las no ocurrencias
19. Tablas de dimensiones
• Contienen el contexto asociado al evento medido
• Describen el “Qué, Quién, Cómo, Cuándo…”
• Normalmente poseen una clave única
• Fuente principal de los filtros, grupos y etiquetas
en las consultas
24. Análisis con SQL
id Name
1 Montevideo
2 Buenos Aires
date units amount region_id
2014-10-01 2 30 1
2014-10-02 1 20 2
2014-10-02 3 15 1
Sales Regions
25. Análisis con SQL
Consultas básicas
SELECT !
SUM(sales.units) AS `Total Units`!
FROM !
sales
Total Units!
-------------!
189593!
SELECT !
sales.units, COUNT(sales.units) AS `Sales Count`!
FROM !
sales!
GROUP BY!
sales.units
Units | Sales Count!
-------+-------------!
1 | 53323!
2 | 2343!
3 | 23
26. Análisis con SQL
Consultas básicas
SELECT !
regions.name AS `Region Name`, SUM(sales.units) AS
`Sales Total`!
FROM sales!
JOIN regions ON sales.region_id = regions.id!
GROUP BY!
regions.name
Region Name | Sales Total!
---------------+-------------!
Buenos Aires | 323!
Montevideo | 53323!
27. Análisis con SQL
Consultas de series de tiempo
select date(created_at) as day, count(1)!
from sales!
where created_at > now() - interval '30 day'!
group by day order by day;
day | count!
------------+-------!
2014-03-12 | 5!
2014-03-13 | 1!
2014-03-19 | 6!
2014-03-20 | 4!
2014-03-21 | 1!
2014-03-24 | 1!
2014-04-08 | 2!
2014-04-09 | 3!
(8 rows)!
28. Análisis con SQL
Consultas de series de tiempo
select date(d) as day,
count(sales.id) !
from generate_series(!
current_date - interval '30 day', !
current_date, '1 day'!
) d !
left join sales on
date(sales.created_at) = d !
group by day order by day;
day | count!
------------+-------!
2014-03-12 | 5!
2014-03-13 | 1!
2014-03-14 | 0!
2014-03-15 | 0!
2014-03-16 | 0!
2014-03-17 | 0!
2014-03-18 | 0!
2014-03-19 | 6!
2014-03-20 | 4!
2014-03-21 | 1!
2014-03-22 | 0!
2014-03-23 | 0!
2014-03-24 | 1!
...!
(31 rows)!
select dates.date as day,
count(sales.id) !
from dates!
left join sales on
date(sales.created_at) = date!
group by day order by day;
29. Análisis con SQL
Window functions
!
SELECT function() OVER ( !
[ PARTITION BY ... ]!
[ ROWS|RANGE BETWEEN ... ] !
)!
30. Análisis con SQL
SELECT !
regions.name, !
SUM(sales.units),!
SUM(sales.units) / (SUM(sales.units) over ())::float AS "% of sales"!
FROM sales!
INNER JOIN regions ON sales.region_id = regions.id!
GROUP BY 1!
Region Name | Sales Total | % of sales!
---------------+-------------+-----------!
Buenos Aires | 323 | 0.006!
Montevideo | 53323 | 99.994
Window functions
31. Análisis con SQL
CTE - Common Table Expresions
• CTEs son optimizadas por separado de la consulta
• Simplifican el armado de consultas en “etapas”
32.
33. Más a hacer con SQL…
• Promedios acumulados
• Análisis de funnels
• Análisis de cohort
• Consultas sobre JSON data con HStore