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
Activo importante: Información
2 usos:
Registro de operaciones
Análisis para la toma de decisiones
Enfocados en
procesar de manera rápida y eficiente
No mantienen historia
enfocados en:
observar como está operando
evaluar rendimiento
Ejemplos…
Necesitan:
historico
preciso
contexto completo
Mi experiencia…
Proyecto faraónico
pero, con un poco de guía y algunos tips
Arquitectura simple pero que cubre las necesidades más comunes
Fuentes => ETLs -> DW <- Apps de BI
Muchas ETLS
Necesidades y problemas similares => FW ETL
Existentes o Construir una a medida
Qué esperamos del FW?
Planificación: (+ que cuándo corren)
Latencia
Agenda
Grafo de dependencias
Ejecución paralelo o serie
Shit happen
Necesitamos seguridad de que podemos reprocesar
Idempotencia
Reinicio desde checkpoint
Multiples funetes y destinos…
Algunas de nuestras fuentes son…
bullets
Our case
RDBMS:
bajo costo
solución conocida
gran soporte de apps BI
Escalarlas por arriba de TB $$
OJO no usar DB de App
MPP, amplia variedad
Complejidad de Devops
Escalamiento horizontal
Ideal p/ TB
FW de ETL
Ntro caso
Clave del éxito del DW
Entendible por usuarios
Explicar la frase
Múltiples opciones
Mod dimensional aplica en la gran mayoría de casos
* Relación 1 a 1 de eventos real con entrada en la tabla
* Columnas numéricas
(raramente existen hechos que sean realmente texto, los hechos suelen ser se vendió n unidades del item X al precio $)
* Relaciones con las tablas de dimensiones
* No se registran las no ocurrencias
(es decir, no llenar filas con ceros)
* Contienen el contexto asociado al evento medido
* Describen el Qué, Quién, y Cómo
* Normalmente poseen una clave única
(a través de la cual son referenciados desde las tablas de hechos)
* Fuente principal de los filtros, grupos y etiquetas en las consultas
Obtenemos estrella
Como para completar el recorrido, quería mencionar algunas opciones de herramientas de BI.