Bienvenido a la tercera y última semana de este curso. En las semanas anteriores, aprendimos sobre el almacenamiento de datos en sistemas como bases de datos y almacenamiento óptico, así como las abstracciones que añaden capas de administración a estos sistemas. Esta semana, nos enfocaremos en cómo el almacenamiento y la gestión de datos impactan la velocidad de recuperación de datos y el rendimiento de las consultas.
Acompáñame en el siguiente vídeo para examinar la vida útil de una consulta y profundizar en estos conceptos.
La ejecución de una consulta en un sistema de administración de bases de datos (SGBD) es un proceso complejo que involucra varios componentes trabajando en conjunto. Este documento resume el proceso de ejecución de una consulta, desde su envío hasta la obtención de resultados, y detalla los roles de los diferentes componentes involucrados.
La consulta es enviada a través del sistema de transporte al procesador de consultas.
Procesador de Consultas
Componentes Principales:
Motor de Ejecución
EXPLAIN en SQL para mostrar el plan de ejecución.Supongamos que tenemos una tabla de clientes en una base de datos de alquiler de DVD. A continuación, se presentan dos ejemplos de consultas:
| Consulta SQL | Descripción |
|---|---|
SELECT * FROM clientes; |
Selecciona todos los registros de la tabla de clientes. |
EXPLAIN SELECT * FROM clientes; |
Muestra el plan de ejecución para la consulta anterior. |
Filas devueltas: 599.
Consulta con Filtro:
SELECT * FROM clientes WHERE id_cliente = 3;EXPLAIN es útil para entender el rendimiento de las consultas en diferentes tipos de bases de datos, no solo en bases de datos relacionales.Acompáñame en el siguiente video para una introducción rápida al primer laboratorio de esta semana.
En este laboratorio, se revisan las operaciones básicas y avanzadas en SQL aplicadas a una base de datos relacional. Se abordan conceptos como la creación, lectura, actualización y eliminación de registros, así como el uso de funciones avanzadas para manipular datos.
WHERE para aplicar predicados.En el siguiente laboratorio, se trabajará con sentencias SQL más avanzadas, que incluyen:
El laboratorio utiliza un esquema estelar basado en la base de datos de alquiler de DVD. La tabla intermedia Fact Rental contiene información sobre cada transacción de alquiler, incluyendo:
| Campo | Descripción |
|---|---|
| Fecha de Alquiler | Fecha en que se realizó el alquiler |
| Fecha de Devolución | Fecha en que se devolvió el DVD |
| Importe Pagado | Monto pagado por el alquiler |
| Identificador de Empresa | ID de la empresa alquilada |
| Identificador de Categoría | ID de la categoría de la película |
| ID del Personal | ID del personal que atendió al cliente |
Para obtener información sobre qué miembro del personal atendió a qué cliente, se puede realizar la siguiente consulta:
SELECT DISTINCT
r.ID_Personal,
r.ID_Cliente
FROM
Fact_Rental r;
Para incluir el nombre y apellidos del personal, se puede unir la tabla de alquiler con la tabla de personal:
SELECT
r.ID_Personal,
CONCAT(p.Nombre, ' ', p.Apellido) AS Nombre_Personal
FROM
Fact_Rental r
JOIN
Dim_Personal p ON r.ID_Personal = p.ID_Personal;
Se pueden aplicar funciones de manipulación de cadenas, como:
CONCAT para unir cadenas.Para verificar si un cliente realizó un pago puntual, se puede usar la sentencia CASE:
SELECT
r.ID_Cliente,
r.ID_Alquiler,
CASE
WHEN r.Fecha_Pago < r.Fecha_Devolucion THEN 1
ELSE 0
END AS Pago_Puntual
FROM
Fact_Rental r;
Para filtrar los resultados por país y fecha, se puede usar la cláusula WHERE:
SELECT
r.ID_Cliente,
r.ID_Alquiler
FROM
Fact_Rental r
JOIN
Dim_Cliente c ON r.ID_Cliente = c.ID_Cliente
WHERE
c.Pais IN ('Estados Unidos', 'Canadá')
AND r.Fecha_Alquiler BETWEEN '2005-05-24' AND '2005-07-26';
Este laboratorio proporciona una base sólida en el uso de SQL para manipular y consultar datos en bases de datos relacionales. Se revisan tanto las operaciones básicas como las avanzadas, preparando a los estudiantes para el siguiente nivel en el manejo de datos.
En este curso, se exploran técnicas avanzadas de SQL, incluyendo expresiones de tabla comunes (CTE), subconsultas, funciones de ventana y funciones de fecha. Se presentan ejemplos prácticos para calcular datos temporales sin necesidad de almacenar resultados en tablas separadas.
sql
WITH nombre_CTE AS (
consulta
)sql
WITH pares_clientes_empleado AS (
SELECT DISTINCT empleado_id, cliente_id
FROM alquiler
)
SELECT nombre_empleado, COUNT(cliente_id) AS total_clientes
FROM pares_clientes_empleado
GROUP BY nombre_empleado;sql
WITH informacion_pago_cliente AS (
SELECT cliente_id, AVG(indicador_pago_puntual) AS porcentaje_pago
FROM pagos
GROUP BY cliente_id
)
SELECT cliente_id, MAX(porcentaje_pago) AS max_pago_puntual
FROM informacion_pago_cliente;sql
SELECT id_pelicula, duracion
FROM peliculas
WHERE duracion > (
SELECT AVG(duracion) FROM peliculas
);sql
SELECT columna1, columna2,
RANK() OVER (PARTITION BY columna1 ORDER BY columna2 DESC) AS ranking
FROM tabla;sql
WITH informacion_cliente AS (
SELECT cliente_id, nombre_categoria,
AVG(DATEDIFF(fecha_devolucion, fecha_alquiler)) AS promedio_dias
FROM alquiler
JOIN categorias ON alquiler.categoria_id = categorias.id
GROUP BY cliente_id, nombre_categoria
)
SELECT cliente_id, nombre_categoria, promedio_dias,
RANK() OVER (PARTITION BY cliente_id ORDER BY promedio_dias DESC) AS categoria_clasificacion
FROM informacion_cliente
ORDER BY cliente_id, categoria_clasificacion;LEAD() y LAG() para obtener información adicional sobre los datos.En este documento se resumen los conceptos clave sobre la implementación y el uso de índices en bases de datos relacionales, así como su impacto en el rendimiento de las consultas SQL. Se explican las estructuras de datos que componen los índices y se presentan ejemplos prácticos para ilustrar su funcionamiento.
rental_id.| Concepto | Descripción |
|---|---|
| Índice | Estructura de datos que acelera las consultas en bases de datos. |
| Árbol B | Estructura que organiza los bloques de índice en nodos hoja y nodos internos. |
| Nodos Hoja | Bloques de índice que contienen los datos ordenados. |
| Nodos Internos | Agrupan nodos hoja y facilitan la búsqueda. |
| Clave de Clasificación | Método de ordenación de filas en almacenamiento en columnas. |
Este documento proporciona una visión general sobre la importancia de los índices en bases de datos relacionales y su implementación efectiva para optimizar el rendimiento de las consultas SQL.
En este documento se resumen las mejores prácticas para optimizar consultas en bases de datos, evitando el uso ineficiente de recursos y mejorando el rendimiento general. Se discuten técnicas de poda y la importancia de filtrar datos relevantes.
SELECT *: SELECT * sin condiciones de filtrado provoca un escaneo completo de la tabla, lo que puede ser costoso en términos de tiempo y recursos.Ejemplo: Un analista ejecutó SELECT * en una base de datos de producción, lo que causó una interrupción de tres días en el servicio.
Costos en la Nube:
WHERE para limitar los resultados.Consulta solo los datos que realmente necesitas.
Técnicas de Poda:
ID de alquiler cumpla con ciertos criterios.SELECT *, usar SELECT ID de cliente, ID de alquiler.| Columna | Descripción |
|---|---|
| ID de Cliente | Identificador único del cliente |
| ID de Alquiler | Identificador único del alquiler |
| Fecha de Pedido | Fecha en que se realizó el pedido |
| País | País del cliente |
SELECT ID_cliente, ID_alquiler
FROM pagos
WHERE ID_alquiler IN (1, 2, 3);
El rendimiento de las consultas también se ve afectado por la forma en que se unen los datos de diferentes tablas. En el siguiente video se abordarán los desafíos relacionados con la unión de tablas.
Para evitar gastos inesperados y mejorar el rendimiento de las consultas en bases de datos, es crucial leer solo los datos necesarios y aplicar técnicas de poda adecuadas.
Las uniones son una técnica fundamental en la combinación de conjuntos de datos, permitiendo la transformación y creación de nuevos conjuntos dentro de una canalización de datos. Este documento resume los conceptos clave sobre el uso de uniones, su funcionamiento, y los métodos comunes para implementarlas.
| Tabla de Pedidos | Tabla de Clientes |
|---|---|
| ID_Pedido | ID_Cliente |
| ID_Cliente | Nombre |
| Fecha | Dirección |
| Monto |
Para combinar las tablas de pedidos y clientes, se utiliza una instrucción SQL JOIN que une las filas basándose en el ID_Cliente.
SELECT *
FROM Pedidos
JOIN Clientes ON Pedidos.ID_Cliente = Clientes.ID_Cliente;
Escanea cada fila de la tabla de pedidos y busca coincidencias en la tabla de clientes.
Bucle Anidado Basado en Índices:
Permite localizar filas coincidentes más rápidamente.
Método Hash Join:
| ID_Pago | ID_Cliente | ID_Pedido |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 2 | 1 | 1 |
| 2 | 1 | 2 |
| 2 | 1 | 3 |
Comprender cómo funcionan las uniones y los métodos para implementarlas es crucial para diseñar consultas eficientes y modelar datos de manera efectiva para los usuarios finales. En el próximo curso, se explorarán más detalles sobre el modelado de datos y sus implicaciones.
Este documento resume los conceptos clave sobre la creación de sistemas para cargas de trabajo analíticas, centrándose en la agregación de grandes conjuntos de datos y la eficiencia de las consultas en bases de datos orientadas a filas y columnas.
Las consultas agregadas permiten calcular valores de resumen de una columna, tales como: - Suma - Promedio - Máximo - Mínimo - Recuento
Ejemplo de Consulta Agregada:
SELECT MIN(precio) FROM pedidos;
Se escanean todas las filas para encontrar el valor mínimo.
Uso de Índices:
GROUP BY para agrupar resultados por columnas específicas.Ejemplo de Agrupación:
SELECT MIN(precio) FROM pedidos GROUP BY país;
Para obtener un valor, se transfieren todas las filas, lo que puede ser ineficiente con grandes conjuntos de datos.
Bases de Datos Orientadas a Columnas:
En el próximo laboratorio, se comparará el rendimiento de las consultas entre: - Base de Datos Orientada a Filas: Amazon RDS - Base de Datos Orientada a Columnas: Amazon Redshift
El almacenamiento en columnas ofrece ventajas significativas para consultas analíticas, especialmente con grandes conjuntos de datos. En el siguiente video, se explorarán más detalles sobre Amazon Redshift y se dará un recorrido por el laboratorio.
Este documento proporciona una visión general de los conceptos discutidos en el curso sobre sistemas para cargas de trabajo analíticas, destacando la importancia de las consultas agregadas y la eficiencia del almacenamiento en columnas.
Este documento resume los conceptos clave sobre la creación de sistemas para cargas de trabajo analíticas, centrándose en la agregación de grandes conjuntos de datos y la eficiencia de las consultas en bases de datos orientadas a filas y columnas.
Las consultas agregadas permiten calcular valores de resumen de una columna, tales como: - Suma - Promedio - Máximo - Mínimo - Recuento
Ejemplo de Consulta Agregada:
SELECT MIN(precio) FROM pedidos;
Se escanean todas las filas para encontrar el valor mínimo.
Uso de Índices:
GROUP BY para agrupar resultados por columnas específicas.Ejemplo de Agrupación:
SELECT MIN(precio) FROM pedidos GROUP BY país;
Requieren transferir todas las filas del disco a la memoria, lo que puede ser ineficiente con grandes conjuntos de datos.
Almacenamiento en Columnas:
En el próximo laboratorio, se comparará el rendimiento de las consultas entre: - Base de Datos Orientada a Filas (Amazon RDS) - Almacenamiento en Columnas (Amazon Redshift)
El almacenamiento en columnas ofrece ventajas significativas para consultas analíticas, especialmente con grandes conjuntos de datos. En el siguiente video, se explorarán más detalles sobre Amazon Redshift y se proporcionará un recorrido por el laboratorio.
Este documento resume los conceptos clave sobre la optimización del rendimiento de las consultas en Amazon Redshift, centrándose en factores arquitectónicos, estrategias de diseño de tablas y consideraciones para mejorar la eficiencia en el almacenamiento de datos.
Amazon Redshift es una solución de almacenamiento de datos altamente eficiente que utiliza varias funciones arquitectónicas internas:
Cuando se envía una consulta a Redshift:
Para optimizar el rendimiento de las consultas, es crucial considerar el diseño de las tablas. Dos aspectos importantes son:
Existen varios estilos de distribución que se pueden elegir al crear una tabla:
| Estilo de Distribución | Descripción |
|---|---|
| Automático | Redshift elige el estilo óptimo. |
| Clave | Distribuye filas basadas en una columna específica. |
| Uniforme | Distribuye filas de manera uniforme entre nodos. |
| Todos | Copia completa de la tabla en cada nodo. |
La clave de clasificación afecta el rendimiento de las consultas al determinar cómo se organizan los datos en el disco. Elegir una clave adecuada puede:
Ejemplo: Si se consulta frecuentemente por fecha de pedido, establecer la fecha como clave de clasificación optimiza el acceso a esos datos.
Para maximizar el rendimiento de las consultas en Amazon Redshift, es fundamental:
En el próximo laboratorio, se comparará el rendimiento entre bases de datos de fila y columna, proporcionando una comprensión más profunda de las ventajas de cada enfoque.
Este documento proporciona una visión general de cómo optimizar consultas en Amazon Redshift, destacando la importancia de la arquitectura, el diseño de tablas y las estrategias de distribución y clasificación.
En este laboratorio, se explorarán las diferencias de rendimiento entre bases de datos basadas en filas y en columnas a través de la ejecución de consultas analíticas, así como la actualización y eliminación de datos en ambos tipos de almacenamiento. Se compararán los tiempos de ejecución de estas operaciones para evaluar el rendimiento de cada tipo de base de datos.
Los datos utilizados en este laboratorio provienen de un conjunto de evaluación comparativa que se basa en un diagrama de relaciones entre entidades. Este conjunto de datos incluye información sobre:
Los datos se almacenan en dos tipos de bases de datos: - PostgreSQL: Base de datos basada en filas. - Redshift: Almacén de datos basado en columnas.
Se ejecutarán cinco consultas analíticas, conocidas como el punto de referencia TPCH, que simulan escenarios básicos para examinar un conjunto de datos grande y responder a preguntas empresariales. El objetivo es evaluar el rendimiento de varios sistemas de bases de datos en la ejecución de consultas complejas.
Los resultados de las consultas analíticas en ambas bases de datos son los siguientes:
| Tipo de Base de Datos | Tiempo de Ejecución (Consultas Analíticas) | Tiempo de Ejecución (Escritura/Eliminación) |
|---|---|---|
| PostgreSQL (Filas) | Minutos | Rápido |
| Redshift (Columnas) | Milisegundos a Segundos | Más Lento |
Este laboratorio demuestra que, aunque las bases de datos basadas en columnas son más eficientes para consultas analíticas, las bases de datos basadas en filas son más rápidas para operaciones de escritura y eliminación. Se recomienda realizar pruebas adicionales para obtener un promedio de los resultados y validar las observaciones.
Se invita a los participantes a ejecutar los experimentos en las bases de datos PostgreSQL y Redshift. En el siguiente video, se explorarán más estrategias para trabajar con consultas complejas.
Este documento resume las estrategias y técnicas para mejorar el rendimiento de las consultas en bases de datos, centrándose en el uso de almacenamiento en caché, expresiones de tablas comunes (CTE) y el proceso de aspiración para mantener la eficiencia en el manejo de datos.
Supongamos que trabajamos con una base de datos de alquiler de DVD y queremos calcular el total gastado en tres categorías de películas: familia, drama y comedia.
rental_id).inventory_id).film_id).film_id).category_id).Para obtener los nombres de los actores de la película "Rocky War":
1. Crear un CTE llamado selected_film para seleccionar el film_id.
2. Crear otro CTE llamado film_actors_id para seleccionar los actor_ids.
3. Escribir una consulta principal para seleccionar los nombres y apellidos de los actores.
Con estas estrategias, se puede optimizar el rendimiento de las consultas en bases de datos, asegurando un manejo eficiente de los datos y mejorando la experiencia del usuario. En la próxima lección, se abordará cómo consultar y transmitir datos.
En este curso, se exploran las técnicas y patrones necesarios para consultar y procesar datos de streaming en tiempo real. Se discuten diferentes tipos de ventanas para agregar y unir datos, así como el uso de sistemas de procesamiento como Apache Flink y Spark Streaming.
Las ventanas permiten agrupar y procesar datos en intervalos de tiempo específicos. Existen tres tipos comunes:
| Tipo de Ventana | Descripción |
|---|---|
| Ventanas de Sesión | Agrupan eventos que ocurren en momentos similares, filtrando períodos de inactividad. |
| Ventanas de Tiempo Fijo | Ventanas de tamaño fijo que procesan datos en intervalos regulares (ej. cada 20 segundos). |
| Ventanas Deslizantes | Ventanas de duración fija que pueden superponerse, útiles para cálculos como medias móviles. |
El procesamiento de datos de streaming es esencial para manejar la creciente cantidad de datos en tiempo real. Con el uso de ventanas y uniones, se pueden realizar análisis significativos y enriquecer los datos para obtener información valiosa.
En este documento se presenta un resumen sobre el uso de Apache Flink en Amazon Web Services (AWS), incluyendo las opciones de implementación y una demostración de cómo configurar el servicio gestionado de Amazon para Apache Flink.
Apache Flink es una herramienta poderosa para el procesamiento de datos en streaming. En el contexto de AWS, existen varias maneras de implementar Flink, desde opciones de "hágalo usted mismo" hasta servicios gestionados que simplifican la infraestructura y la administración.
| Opción de Implementación | Descripción |
|---|---|
| Amazon EMR | Ejecuta Flink como una aplicación YARN. |
| Amazon Elastic Kubernetes Service (EKS) | Hospeda Flink en un entorno contenerizado. |
| Amazon Elastic Container Service (ECS) | Otra opción para ejecutar Flink en contenedores. |
| Servicio gestionado de Amazon para Apache Flink | Proporciona un entorno hospedado y sin servidor, gestionando la infraestructura y la escalabilidad. |
El servicio gestionado de Amazon para Apache Flink permite a los usuarios ejecutar aplicaciones de Flink sin preocuparse por la infraestructura subyacente. Este servicio se encarga de:
La aplicación de demostración envía datos de cotizaciones bursátiles a través de Kinesis, realiza transformaciones y almacena los resultados en S3. El código de la aplicación incluye:
En el panel de control de Apache Flink, se puede observar el flujo de datos y el procesamiento en tiempo real. Se pueden ver detalles como:
Apache Flink en AWS ofrece una solución robusta para el procesamiento de datos en streaming, con múltiples opciones de implementación y un servicio gestionado que simplifica la experiencia del usuario. En el próximo laboratorio, se explorará la creación de cuadernos de estudio para análisis de datos ad hoc.
Acompáñame en el siguiente video para implementar un cuaderno de estudio con el servicio gestionado de Amazon para Apache Flink.
Este documento resume los aspectos clave del tercer curso de la especialización en ingeniería de datos, donde se abordaron temas relacionados con el almacenamiento de datos, sus jerarquías y técnicas avanzadas de consulta.
Sistemas de almacenamiento derivados de materias primas.
Laboratorios:
Creación de almacenes de lagos de datos.
Actividades Prácticas:
Procesos de filtrado, unión y agregación de consultas.
Experiencia Práctica:
Con la finalización de tres cursos, los participantes han adquirido habilidades fundamentales para convertirse en ingenieros de datos exitosos. El curso final se centrará en el modelado y servicio de datos para análisis y aprendizaje automático.
¡Enhorabuena por completar este curso y mucho éxito en el siguiente!