Está en la página 1de 35

Big Data

Big Data SQL


Definición ETL
Infraestructura ¿Qué es SQL?
Almacenamiento Tipos de operaciones
Procesamiento De origen a tabla
Técnicas y Herramientas sqliteonline.com
Ejemplos

Docente: Iván Carlos Barrio Herreros


Big Data
El problema: La cantidad de datos que generamos a nivel global crece sin parar y
debemos recurrir a técnicas ‘no convencionales’ para analizarlos. Estos análisis han
demostrado ser, además, esenciales para las empresas.

La infraestructura: Empresas tecnológicas como Microsoft, Amazon y Google han


democratizado el almacenamiento y la capacidad de cómputo, de manera que
cualquiera puede hacer análisis sin invertir ‘en hierro’.

Las técnicas: Como solución, se desarrollan métodos basados principalmente en el


paralelizado que permiten tratar con estas ingentes masas de información.
El problema: Habitualmente hablamos de ‘Big Data’ cuando se nos da una o varias
de las siguientes circunstancias (las 3 Vs):
- Volumen: Pesa varios Gigas o Teras, y además crece cada día debido en parte
a réplicas (históricos o de seguridad) y el enriquecimiento con nuevas fuentes.

- Velocidad: Ha de procesarse segundos (RT o NRT) después de su generación


o, de lo contrario, ya no tiene valor de negocio.

- Variedad: No está basado en ‘tablas’ como tradicionalmente, sino que puede


contener textos, audios, vídeos, ‘tablas’ con formato variable (JSON)...
Infraestructura: Las grandes empresas, que tradicionalmente tenían servidores ‘on
premise’, migran paulatinamente a la nube bien de manera total o manteniendo
parte de su infraestructura en sus instalaciones (nube híbrida).

Es entonces cuando contratan a los grandes proveedores Cloud su


almacenamiento, su cómputo y sus herramientas.
- Almacenamiento: Tablas y buckets con garantías de recuperación y sin límites.
- Procesamiento: Máquinas que se levantan y apagan según necesidad con
nuestros requisitos (CPU, GPU, RAM).
- Herramientas: Aplicaciones que permiten desarrollar los procesos que tratarán
nuestros datos.
Almacenamiento: Los datacenters Cloud se estructuran según Regiones, Zonas… y
esto asegura la redundancia (recuperación en caso de desastre), bajas latencias…

DATO
SE PERSISTE
Zona 1 SE SIRVE
EUROPA
CONSUMIDOR 1 Según nuestro presupuesto,
ÁFRICA
SE DUPLICA
podría asegurarse una
disponibilidad de hasta 99.9%
¿SE SATURA?
LO SIRVE OTRO y una durabilidad de hasta
Zona 2 SE TRIPLICA
¿DESASTRE?
SE RECUPERA
99.99999999999999%
ASIA CONSUMIDOR 2
EEUU

SE SIRVE

Zona 3
EEUU

EXTRA: https://datacenters.microsoft.com/globe/
Almacenamiento: Tabla resumen de réplicas zonales
Parámetro LRS ZRS GRS/RA-GRS GZRS/RA-GZRS

Durabilidad (a lo > 99,999999999% > 99,9999999999 % > 99,99999999999999% > 99,99999999999999%


largo de un año) (11 nueves) (12 nueves) (16 nueves) (16 nueves)

Disponibilidad de
las solicitudes de > 99.9%
lectura y escritura

Número de copias Tres copias dentro de una Tres copias en zonas de Seis copias en total, tres en Seis copias en total, tres en
de datos única región disponibilidad la región primaria y tres en zonas de disponibilidad
mantenidas en independientes dentro de la región secundaria independientes en la región
nodos una única región primaria y tres copias con
independientes redundancia local en la
región secundaria

¿Cuánto costaría un sistema así ‘on premise’?


¿Quién necesita estos parámetros?
Fuente: https://learn.microsoft.com/es-es/azure/storage/common/storage-redundancy
Extra: https://www.site24x7.com/es/tools/sla-uptime.html
Procesamiento: los servidores Cloud permiten desplegar varias instancias
(máquinas virtuales, contenedores…) en cuestión de segundos tanto a demanda
como de forma programática.

Ofrecen también soluciones ‘sin infraestructura’ que permiten ejecutar códigos sin
determinar dónde tendrá lugar dicha ejecución, y soluciones SaaS (Software como
Servicio) que paralelizan determinados procesos de manera ‘transparente’ al
usuario.
SE EJECUTA SE EJECUTA PROCESAMIENTO
UN SCRIPT UN SCRIPT PARALELO

PROCESAMIENTO
SERIAL

NODO NODO NODO NODO

NODO RECUPERAMOS
Procesamiento: Hay muchas alternativas para llevar a cabo ejecuciones en paralelo
y, en general, en Cloud. Algunas son:

Cloud Functions (lambdas) Kubernetes + Docker (container) Máquinas Virtuales (EC2, VM)
Un disparador (tiempo o evento) ejecuta Cientos de máquinas se levantan, hacen Máquina, con o sin entorno visual, por la
un script corto (<15 mins) su trabajo, y se apagan. que pagas por minuto.
TIEMPO O EVENTO DISPARA CLOUD FUNCTION
CREAS UN PROCEDIMIENTO
DETECTAMOS
EJECUTA NUESTRO CAPTURO DATOS (BBDD, API…)
SCRIPT:
UN CAMBIO:
.TRANSFORMA DATOS
. BBDD
. FICHERO
.ENVÍA ALERTAS
MODELO 1 MODELO 2 MODELO 3
LANZAS EN LOCAL
.MUEVE TABLAS PERO TARDA DEMASIADO
. API

… (POCA RAM, CPU, GPU…)
GUARDA MODELO, PARÁMETROS Y RESULTADOS

CRONTAB PERSISTE (GUARDA)


54*** EL RESULTADO ‘ALQUILAS’ una MV en Cloud
PREDICE

Ej: Llega un EXCEL a nuestro bucket. C.F. se Ej: Lanzas 3 entrenamientos de ML, o Ej: Necesitas puntualmente una máquina con
enciende, lo procesa y se apaga. hiperparametrizaciones del mismo. 240 Gb de RAM para tu proceso.

Extra: https://crontab.guru/
Extra: https://cloud.google.com/functions/pricing?hl=es
Técnicas y Herramientas: Se han desarrollado tanto lenguajes y frameworks como
herramientas que hacen cómodo el tratamiento de datos en paralelo para los
desarrolladores.

LENGUAJES FRAMEWORKS HERRAMIENTAS

SQL CosmosDB

… … … COLAB*
ETL/ELT: Con los lenguajes, frameworks, arquitecturas… vistos hasta ahora, estamos
preparados para resolver procesos de Extracción, Transformación y Carga de datos.
Esta es una operación que responde a la necesidad de ‘limpiar y colocar’ los datos para
que estos sean consumidos por procesos de Machine Learning, Visualización…

ORÍGENES CONSUMO
CAPA CAPA CAPA
BRONZE SILVER GOLD

- PROCESOS - VISUALIZACIÓN
- IoT FILTRADO
- ML / IA
NIVEL NEGOCIO
- OpenData RAW AUMENTADO
AGREGADO
- API
LIMPIO
- API …

ETL ETL ETL ETL

Los indispensables para una ETL: Python y SQL.


¿Un descanso?

Nos vemos a las XX:XX


SQL: son las siglas de "Structured Query Language" (Lenguaje de Consulta
Estructurada en español), es un lenguaje de programación utilizado para
gestionar y manipular bases de datos relacionales.

Es un estándar que tiene diferentes ‘dialectos’. SQLite


SQL Server
MySQL
Oracle
MariaDB
SQL PostgreSQL

¿Cuál escogemos?
SQL: Tipos de operaciones
Creación, consulta y borrado Seguridad y Operaciones

DDL TCL
Definición de Datos Control Transaccional
CREATE, ALTER, DROP… COMMIT, ROLLBACK…

SQL
SQLite

DML DCL
Manipulación de Datos Control de Accesos
SELECT, INSERT, GRANT, REVOKE…
UPDATE, DELETE…
Ejemplo: SQL en tienda de electrodomésticos

ORÍGENES raw_ventas
raw_ventas id_venta
Procede de los TPV o ventas online (Near Real Time - IoT). id_producto
Se ingesta programáticamente. id_cliente
Incluye datos de las operaciones, y es la tabla que relaciona el id_empleado
resto. datetime
raw_productos canal raw_empleados
raw_productos cantidad
Procede del Departamento Comercial (Batch). precio
Se ingesta mediante un software de gestión de stock o CSV. id_producto metodo_pago id_empleado
Incluye datos del catálogo de productos de la empresa, nombre_producto nombre
incluyendo aspectos variables como el stock. descripcion_producto apellido
precio categoria
raw_clientes categoria horario
Procede de un programa CRM o un registro de usuarios. eficiencia_energetica raw_clientes fecha_alta
Por su volumen, se ingesta programáticamente. stock fecha_baja
id_cliente
raw_empleados
nombre
Procede del Departamento de RRHH.
apellido
Se ingesta mediante software de gestión de RRHH o CSV.
email
Incluye datos de los trabajadores.
telefono
direccion
ETL, ¿por qué? antiguedad
Subida a sqliteonline.com
Del Origen a RAW. Validaciones de la ingesta

ORÍGENES CONSUMO
CAPA CAPA CAPA
BRONZE SILVER GOLD

- PROCESOS - VISUALIZACIÓN
- IoT FILTRADO
- ML / IA
NIVEL NEGOCIO
- OpenData RAW AUMENTADO
AGREGADO
- API
LIMPIO
- API …

ETL ETL ETL ETL


DML - Obtenemos información, la filtramos y la ordenamos

SELECT *
FROM raw_ventas
LIMIT 10;

SELECT: Devuelve una o más columnas de la tabla que


SELECT id_empleado, cantidad consultemos. También puede escoger todas (*)
FROM: Determina qué tabla exploraremos.
FROM raw_ventas WHERE: Filtra según el valor de una o más columnas
(AND, OR…).
WHERE metodo_pago = 'Tarjeta' ORDER BY: Ordena los resultados según una o varias
LIMIT 10; columnas (DESC , ASC)

SELECT id_empleado, cantidad


FROM raw_ventas
ORDER BY cantidad DESC
LIMIT 10;
AVG: Calcula el promedio de los valores en una columna.
COUNT: Cuenta el número de filas en una columna.
DML - Funciones agregadas DISTINCT: Devuelve los distintos (únicos).
SUM: Suma todos los valores en una columna.
MAX: Devuelve el valor máximo en una columna.
MIN: Devuelve el valor mínimo en una columna.
SELECT id_empleado, —
GROUP_CONCAT: Concatena los valores en una columna,
SUM(CANTIDAD) as suma_cantidad, utilizando un separador especificado.
AVG(CANTIDAD) AS media_cantidad TOTAL: Similar a SUM, pero siempre devuelve un float.
VAR_POP: Calcula la varianza poblacional de la columna.
FROM raw_ventas VAR_SAMP: Calcula la varianza muestral de una columna.
STDEV: Calcula la desviación estándar de una columna.
GROUP BY id_empleado
HAVING suma_cantidad > 700;

SELECT id_empleado,
GROUP_CONCAT(id_producto, ',') AS lista_productos
FROM raw_ventas
GROUP BY id_empleado;
DML - Diferencia entre WHERE y HAVING

WHERE HAVING

Se utiliza para filtrar filas individuales antes Se utiliza para filtrar grupos de filas
de que se realice cualquier operación de después de que se hayan realizado
agregación. operaciones de agregación, como SUM,
AVG, COUNT, etc.

Ejemplo: Ejemplo:

SELECT id_empleado, SELECT id_empleado,


SUM(CANTIDAD) as suma_cantidad SUM(CANTIDAD) as suma_cantidad
FROM raw_ventas FROM raw_ventas
WHERE id_empleado in (1,2) GROUP BY id_empleado
GROUP BY id_empleado; HAVING suma_cantidad > 700;
AND: Combina dos o más condiciones y devuelve
registros cuando todas las condiciones son verdaderas.
DML - Cláusulas de WHERE y HAVING OR: Combina dos o más condiciones y devuelve registros
cuando al menos una de las condiciones es verdadera.
NOT: Niega una condición.
SELECT * FROM raw_ventas IN: Permite especificar múltiples valores en una cláusula
WHERE.
WHERE (metodo_pago = 'Tarjeta' BETWEEN: Filtra valores dentro de un rango especificado
OR metodo_pago = 'Efectivo') (inclusivo).
LIKE: Se utiliza para buscar un patrón específico en una
AND datetime BETWEEN '2023-10-01 10:00:00' columna.
IS NULL y IS NOT NULL: Se utilizan para filtrar registros
AND '2023-10-01 13:00:00'; con valores NULL o sin ellos.
EXISTS: Se utiliza para probar la existencia de cualquier
registro en una subconsulta.
ANY y ALL: Se utilizan con subconsultas y operadores
SELECT * FROM raw_ventas para comparar un valor con valores en una lista o
subconsulta.
WHERE cantidad > (
SELECT MAX(cantidad)
FROM raw_ventas
WHERE id_producto = 3)
AND metodo_pago LIKE '%Tar%';
Capa RAW validada. ¡Buen trabajo!
Puntos clave:

- Hemos comprobado que la copia de nuestros


ficheros TXT es idéntica a nuestros datos en la
capa RAW.
ORÍGENES - Si existe un NULL o un error CONSUMO
en orígen, RAW
CAPA CAPA tendrá el mismo error.
CAPA
BRONZE SILVER GOLD
- Esta réplica exacta se hace para tener control
- PROCESOS sobre los datos incluso una - VISUALIZACIÓN
vez desaparezcan
- IoT FILTRADO del origen.
- ML / IA
NIVEL NEGOCIO
- OpenData RAW
- Pueden existir
AUMENTADO
AGREGADOdatos
- APIen RAW
históricos
LIMPIO
- API incongruentes entre sí; RAW guarda…una foto de
… cuál era la realidad en ese momento… si se
corrige más adelante, persistimos ambas
copias.
ETL ETL - Existen
ETLservicios (Glacier)ETL
que persisten datos a
bajo costo para conservar ficheros tras su TTL.
De BRONZE a SILVER. Estructurando nuestros datos.

ORÍGENES CONSUMO
CAPA CAPA CAPA
BRONZE SILVER GOLD

- PROCESOS - VISUALIZACIÓN
- IoT FILTRADO
- ML / IA
NIVEL NEGOCIO
- OpenData RAW AUMENTADO
AGREGADO
- API
LIMPIO
- API …

ETL ETL ETL ETL


raw_ventas slv_ventas
DDL y DML - Limpiando el dato. raw_clientes slv_clientes
raw_productos slv_productos
raw_empleados slv_empleados

Imputación de Eliminación de
faltantes duplicados Detección de
outliers

Casteo de
variables
Estandarización Enriquecimiento
de textos del dato


Comprobación y Eliminación de duplicados
Comprobación

SELECT id_cliente, COUNT(*) SELECT id_cliente, nombre, apellido, COUNT(*)


FROM raw_clientes FROM raw_clientes
GROUP BY id_cliente GROUP BY id_cliente, nombre, apellido
HAVING COUNT(*) > 1; HAVING COUNT(*) > 1;

Eliminación
DELETE FROM raw_clientes SELECT * FROM raw_clientes
WHERE ROWID NOT IN ( WHERE ROWID IN (
A NUEVA TABLA
SELECT MIN(ROWID) SELECT MIN(ROWID)
slv_clientes
FROM raw_clientes FROM raw_clientes
GROUP BY id_cliente); GROUP BY id_cliente, nombre, apellido);
Imputación de faltantes
Comprobación
SELECT
SUM(CASE WHEN nombre IS NULL THEN 1 ELSE 0 END) AS null_nombres,
SUM(CASE WHEN apellido IS NULL THEN 1 ELSE 0 END) AS null_apellidos,
SUM(CASE WHEN direccion IS NULL THEN 1 ELSE 0 END) AS null_direcciones,
SUM(CASE WHEN antiguedad is NULL THEN 1 ELSE 0 END) AS null_antiguedad
FROM raw_clientes;

Imputación SELECT id_cliente, nombre, apellido, direccion, ciudad,


CASE
SELECT id_cliente, nombre, apellido, direccion, subconsulta
WHEN antiguedad IS NULL THEN (
CASE columna SELECT AVG(antiguedad)
completa
WHEN antiguedad IS NULL THEN ( FROM raw_clientes clientes_alias
SELECT AVG(antiguedad) FROM raw_clientes WHERE clientes_alias.antiguedad IS NOT NULL
WHERE antiguedad IS NOT NULL) AND clientes_alias.ciudad = raw_clientes.ciudad )
ELSE antiguedad subconsulta
ELSE antiguedad
END AS antiguedad columna END AS antiguedad
específica
FROM raw_clientes; FROM raw_clientes;
Resto
Estandarización de textos Detección de outliers
SELECT precio
María Jesús … FROM (
M. Jesús … María Jesús … SELECT precio,
Mª Jesus … ROW_NUMBER() OVER (ORDER BY precio) AS rn,
COUNT(*) OVER () AS total_filas
Calle Alcalá … FROM raw_productos
C. Alcalá … calle alcalá … ) WHERE rn = ROUND(0.9 * total_filas);
cl Alcalá …

Casteo de variables Enriquecimiento del dato


CAST(123.456 AS TEXT) “123.456” Se realiza con códigos fuera de SQL.
CAST(123.456 AS INTEGER) 123 - Indican el clima, latitud y longitud, datos
CAST(“123.456” AS REAL) 123.456 financieros, alertas sanitarias…
Creación de tablas SILVER
Como la capa BRONZE (RAW) no debería alterarse, con los datos filtrados, aumentados y limpios que hemos
conseguido con nuestras consultas escribiremos tablas nuevas en nuestra capa SILVER.
INSERT INTO slv_clientes (id_cliente, nombre, apellido, email, telefono, ciudad, antiguedad)
SELECT
r.id_cliente,
r.nombre,
r.apellido,
r.email, filtro (retiramos la columna dirección)
r.telefono,
- - - r.direccion,
r.ciudad,
CASE imputamos (cambiamos antigüedad por la media de su ciudad)
WHEN r.antiguedad IS NULL THEN (
SELECT AVG(antiguedad)
FROM raw_clientes clientes_alias
WHERE clientes_alias.antiguedad IS NOT NULL
AND clientes_alias.ciudad = r.ciudad )
ELSE r.antiguedad
END AS antiguedad
FROM raw_clientes r
eliminamos duplicados (únicamente retenemos el primer ROWID duplicado)
WHERE r.ROWID IN (
SELECT MIN(ROWID)
FROM raw_clientes
GROUP BY id_cliente, nombre, apellido
);
Creación de tablas SILVER
Hemos actualizado slv_clientes y ahora slv_ventas. Las otras dos las copiaremos ‘tal cual’.

INSERT INTO slv_ventas (id_venta, id_producto, id_cliente, id_empleado, datetime, cantidad, descuento, metodo_pago, year, month, day)
SELECT
id_venta,
id_producto,
id_cliente,
id_empleado,
datetime,
cantidad,
descuento,
metodo_pago,
strftime('%Y', datetime) AS year,
strftime('%m', datetime) AS month,
strftime('%d', datetime) AS day
FROM raw_ventas;
Extraemos características (día, mes y año)

INSERT INTO slv_empleados SELECT * FROM raw_empleados;


INSERT INTO slv_productos SELECT * FROM raw_productos;

Las evolucionamos de capa sin más.


De BRONZE a SILVER. ¡Buen trabajo!
Puntos clave:

- Hacemos NUEVAS TABLAS en la capa SILVER a


base de las RAW, pero nunca aplicamos DELETE,
o UPDATE, o… ¡NADA! sobre RAW, ya que esta
tiene que mantenerse ‘pura’.
S CONSUMO
CAPA CAPA CAPA - Podemos enriquecer el dato mediante fuentes
BRONZE SILVER GOLD
externas; esto es ‘añadir columnas’ basadas en
OS lo que- VISUALIZACIÓN
ha ocurrido ese día (bolsa, clima, …)
- Es raro que los/ datos
- ML IA de RAW estén limpios, por
FILTRADO
a RAW AUMENTADO
NIVEL NEGOCIO
AGREGADO
lo que siempre
- API necesitaremos algún tipo de
LIMPIO limpieza. …
- Los outliers son datos REALES pero aberrantes;
es bueno detectarlos y manejarlos ‘a parte’, pero
no debemos perder la perspectiva de que han
existido.
ETL ETL ETL ETL
- No es lo mismo dato erróneo que dato outlier.
- También filtramos columnas para tener datasets
más manejables.
De SILVER a GOLD. Preparando datos para ‘negocio’.

ORÍGENES CONSUMO
CAPA CAPA CAPA
BRONZE SILVER GOLD

- PROCESOS - VISUALIZACIÓN
- IoT FILTRADO
- ML / IA
NIVEL NEGOCIO
- OpenData RAW AUMENTADO
AGREGADO
- API
LIMPIO
- API …

ETL ETL ETL ETL


Los tipos de UNION. Concatenando tablas.
UNION tabla 1 tabla 2
(Combina los resultados de dos o más consultas
SELECT y elimina los registros duplicados)
SELECT columna1, columna2 FROM tabla1
UNION
SELECT columna1, columna2 FROM tabla2;

UNION ALL
(Combina los resultados de dos o más consultas
SELECT, pero no elimina los registros duplicados)
SELECT columna1, columna2 FROM tabla1 UNION / UNION ALL / EXCEPT
UNION ALL
SELECT columna1, columna2 FROM tabla2;

EXCEPT
(Devuelve los registros de la primera consulta que no
están presentes en la segunda consulta)
SELECT columna1, columna2 FROM tabla1
EXCEPT
SELECT columna1, columna2 FROM tabla2;
Los tipos de JOIN. Mergeando tablas.
INNER JOIN (JOIN) tabla 1 tabla 2
Combina filas de ambas tablas donde la condición del JOIN se cumple.
Sólo devuelve las filas donde hay una coincidencia en ambas tablas.
SELECT tabla1.columna1, tabla2.columna2
FROM tabla1
INNER JOIN tabla2 ON tabla1.columna1 = tabla2.columna1;

LEFT OUTER JOIN (LEFT JOIN)


Devuelve todas las filas de la tabla de la izquierda y las filas coincidentes de la tabla de la derecha.
Si no hay coincidencia, el resultado es NULL en las columnas de la tabla de la derecha.
SELECT tabla1.columna1, tabla2.columna2 JOIN / LEFT JOIN / CROSS JOIN
FROM tabla1
LEFT JOIN tabla2 ON tabla1.columna1 = tabla2.columna1;

EXCEPT
Produce el producto cartesiano de las dos tablas, lo que significa que combina
cada fila de la primera tabla con cada fila de la segunda tabla.
No necesita una condición de JOIN.
SELECT tabla1.columna1, tabla2.columna2
FROM tabla1
CROSS JOIN tabla2;
Creando nuestra capa GOLD.
¡Las consultas están en el fichero ‘DML multitabla.sql’!

Interesante:
Consultas con tablas CTE.
Una tabla CTE, que significa "Common Table Expression" (Tabla
Común en español), es una construcción temporal que se utiliza en
SQL para simplificar las consultas complejas.

Cuando una consulta se hace demasiado larga y compleja de


comprender, dividimos su lógica en CTEs que podemos utilizar en
una o más partes del código, es un ejemplo de programación
modular.
De SILVER a GOLD. ¡Buen trabajo!

Puntos clave:

- La capa GOLD es fácilmente interpretable para


CONSUMO usuarios ‘de negocio’, que no tengan perfiles
CAPA CAPA
SILVER GOLD técnicos especializados en consultar SQL.
- Esta capa supone ‘precálculos’ que hacen más
- VISUALIZACIÓN
rápidas las visualizaciones y los procesos de
- ML / IA
FILTRADO
NIVEL NEGOCIO Machine Learning posteriores.
AUMENTADO - API
LIMPIO
AGREGADO - Consolida en una ‘fuente única’ la información

de la empresa.
- Consiste en un conjunto de agregaciones,
métricas y KPIs.
- Esta capa, como las otras, se reprocesa cada un
ETL ETL ETL número fijo de días, semanas, meses… o en Near
Real Time.
Ciclo de vida del dato finalizado.
De unos orígenes desorganizados y sucios, hemos conseguido unas tablas listas para consumo.

ORÍGENES CONSUMO
CAPA CAPA CAPA
BRONZE SILVER GOLD

- PROCESOS - VISUALIZACIÓN
- IoT FILTRADO
- ML / IA
NIVEL NEGOCIO
- OpenData RAW AUMENTADO
AGREGADO
- API
LIMPIO
- API …

ETL ETL ETL ETL

También podría gustarte