Formatos de datos para SQL: Avro, TXT, ORC, CSV, JSON, Parquet
¿Por qué son importantes los formatos de datos?
Los formatos de datos son fundamentales porque afectan directamente la eficiencia y el rendimiento de los sistemas de procesamiento y almacenamiento de información.
Si te interesa certificarte en bases de datos, como Microsoft DP-203, o necesitas leer datos de múltiples fuentes en tu trabajo, no puedes ignorar este tema.
En la mayoría de empresas trabajamos con bases de datos que pueden tener cientos de GB y contienen datos muy variados.
Este artículo cubre brevemente los formatos de datos y los sistemas OLTP y OLAP, pero se concentra en los formatos en sí. Al final incluye algunos ejemplos para poner en práctica lo aprendido.
Comparativa de formatos: ventajas y desventajas
| Formato | Tipo | Ventajas | Desventajas | Ideal para | Reemplazo de BD | Procesamiento automatizado | Uso en IA |
|---|---|---|---|---|---|---|---|
| CSV | Basado en filas | ✓ Compatible universalmente ✓ Fácil de leer y escribir ✓ Legible para humanos ✓ Compacto para pocos datos | ✗ Sin compresión ✗ Sin esquema ✗ Lento con muchos datos ✗ Sin tipado de datos | Conjuntos pequeños, importación/exportación, edición manual | ❌ No | ✓ Muy bien | ⚠️ Limitado |
| JSON | Basado en filas | ✓ Datos estructurados ✓ Legible para humanos ✓ Soporta esquema ✓ Compatible con web | ✗ Más grande que CSV ✗ Lento con muchos datos ✗ Complejo para tablas ✗ Redundancia | APIs, configuraciones, servicios web, NoSQL | ⚠️ Parcialmente | ✓ Muy bien | ✓ Excelente |
| Parquet | Basado en columnas | ✓ Alta compresión ✓ Acceso rápido por columna ✓ Evolución de esquema ✓ Optimizado para análisis | ✗ No legible ✗ Configuración compleja ✗ Lento para acceso por fila ✗ Más memoria en datos pequeños | Big Data, análisis, almacenes de datos | ✓ Sí | ⚠️ Especializado | ✓ Excelente |
| Avro | Basado en filas | ✓ Evolución de esquema ✓ Buena compresión ✓ Escritura rápida ✓ Capacidad de streaming | ✗ No legible ✗ Lento para acceso por columna ✗ Complejo para principiantes ✗ Centrado en Java | Streaming, sistemas de eventos, microservicios | ✓ Sí | ✓ Muy bien | ✓ Bien |
| ORC | Basado en columnas | ✓ Mejor compresión ✓ Análisis rápido ✓ Compatible con Hive ✓ Soporte ACID | ✗ Complejo ✗ No legible ✗ Dependencia de Hive ✗ Escritura lenta | Hadoop, Hive, análisis Big Data | ✓ Sí | ⚠️ Especializado | ✓ Bien |
| XML | Basado en filas | ✓ Datos estructurados ✓ Validación (XSD) ✓ Soporta namespaces ✓ Autodescriptivo | ✗ Muy voluminoso ✗ Complejo ✗ Lento ✗ Obsoleto | Sistemas legacy, configuraciones, SOAP | ❌ No | ⚠️ Complejo | ⚠️ Raro |
| YAML | Basado en filas | ✓ Muy legible ✓ Amigable para configuración ✓ Soporta comentarios ✓ Estructurado | ✗ Lento ✗ Complejo para volúmenes grandes ✗ Sensible a errores ✗ Compresión limitada | Archivos de configuración, DevOps, Docker | ❌ No | ✓ Muy bien | ⚠️ Raro |
Explicación de las métricas:
- Reemplazo de BD: ¿Puede usarse para almacenamiento persistente?
- Procesamiento automatizado: ¿Qué tan bien se adapta a procesamiento automático?
- Uso en IA: ¿Es adecuado para Machine Learning y aplicaciones de IA?
Razones clave para elegir el formato correcto:
Estos puntos te ayudarán a entender por qué importa la decisión.
- Rendimiento y eficiencia
Diferentes formatos están optimizados para distintos casos de uso. Elegir el correcto puede mejorar significativamente el rendimiento de consultas, escrituras y lecturas.
- Espacio de almacenamiento
Algunos formatos ofrecen mejor compresión, reduciendo el espacio necesario. Esto es especialmente crítico al almacenar grandes volúmenes.
- Interoperabilidad
El formato elegido afecta cómo se comunican diferentes sistemas y herramientas. Algunos son mejores para integrarse con tecnologías específicas.
- Integridad y evolución de esquema
Formatos como Avro y Parquet permiten almacenar información de esquema junto con los datos, facilitando validación y evolución del esquema.
- Requisitos específicos
Cada aplicación tiene necesidades distintas. La estructura de datos, patrones de acceso y procesamiento varían, y el formato debe adaptarse a estos requisitos.
Diferencia entre almacenamiento por filas y por columnas
Dicho de forma simple: aunque toda tabla tiene filas y columnas, la diferencia radica en cómo se almacenan y procesan los datos. Esto afecta directamente el rendimiento de las operaciones en base de datos.
Aquí está la explicación detallada:
Almacenamiento por filas (Row-based Storage)
Definición
En el almacenamiento por filas, todos los valores de una fila se guardan juntos. Cada fila representa un registro completo.
Ejemplo:
Una tabla con información de clientes:
| ClienteID | Nombre | Edad | Ciudad |
|---|---|---|---|
| 1 | Alice | 30 | Berlín |
| 2 | Bob | 25 | Essen |
| 3 | Charlie | 35 | Dortmund |
En almacenamiento por filas, cada registro completo se guarda junto.
Ventajas:
Eficiencia en transacciones
Ideal para sistemas OLTP, donde la fila completa se lee y escribe frecuentemente. Esto acelera operaciones de inserción, actualización y eliminación.
Gestión simple
Modelo de datos directo que refleja la estructura natural de la mayoría de aplicaciones.
Desventajas:
Menos eficiente para consultas analíticas que solo necesitan columnas específicas, porque se lee información innecesaria.
Almacenamiento por columnas (Column-based Storage)
Definición
En el almacenamiento por columnas, todos los valores de una columna se guardan juntos. Cada columna contiene todos los valores de un atributo a través de muchas filas.
Ejemplo
La misma tabla con información de clientes, almacenada por columnas:
ClienteID: [1, 2, 3] Nombre: [Alice, Bob, Charlie] Edad: [30, 25, 35] Ciudad: [Berlín, Múnich, Hamburgo]
Cada columna se guarda por separado.
Ventajas:
Eficiencia en consultas
Ideal para sistemas OLAP, donde las consultas analíticas frecuentemente acceden solo a columnas específicas. Esto acelera las búsquedas y reduce la carga de I/O.
Mejor compresión
Los valores similares se guardan juntos, mejorando la eficiencia de compresión y ahorrando espacio.
Agregaciones eficientes
Funciones como SUM, AVG, COUNT se ejecutan más rápido.
Desventajas:
Menos eficiente para operaciones transaccionales, porque leer o escribir registros completos requiere múltiples accesos a columnas.
Resumen rápido
Almacenamiento por filas (Row-based Storage)
- Óptimo para: sistemas OLTP, transacciones frecuentes.
- Ventaja: escritura y lectura rápida de registros completos.
- Ejemplos: CSV, JSON, Avro.
Almacenamiento por columnas (Column-based Storage)
- Óptimo para: sistemas OLAP, consultas analíticas.
- Ventaja: consultas rápidas y compresión eficiente.
- Ejemplos: Parquet, ORC.
La decisión entre filas y columnas depende de los requisitos específicos. Los sistemas OLTP se benefician del almacenamiento por filas, mientras que los sistemas OLAP se benefician del almacenamiento por columnas.
OLTP y OLAP: recordatorio
Si aún no los conoces bien, aquí está el resumen:
Sistemas OLTP (Online Transaction Processing)
Sistemas para gestionar y procesar un alto volumen de transacciones cortas en línea, típicamente con muchas operaciones de lectura y escritura.
Comunes en aplicaciones como e-commerce, banca y contabilidad, donde velocidad de transacción e integridad de datos son críticas.
Sistemas OLAP (Online Analytical Processing)
Sistemas para analizar grandes volúmenes de datos y crear consultas y reportes complejos.
Comunes en almacenes de datos y business intelligence, donde se requieren consultas rápidas y agregaciones eficientes.
Almacenamiento por filas (OLTP) vs. por columnas (OLAP)
Para entender las diferencias entre almacenamiento por filas y por columnas, es importante considerar los requisitos y objetivos específicos de sistemas OLTP (Online Transaction Processing) y OLAP (Online Analytical Processing).
Almacenamiento por filas (Row-based Storage)
Definición
Los datos se guardan fila por fila, con todos los valores de una fila almacenados contiguamente. Cada fila es un registro completo.
Uso típico:
Sistemas OLTP (Online Transaction Processing) Aplicaciones transaccionales, como bases de datos para e-commerce, banca, sistemas de contabilidad
Ventajas:
Escritura rápida: Como registros completos se guardan en una fila, las operaciones de inserción y actualización son veloces.
Transacciones eficientes: Sistemas OLTP se benefician porque las filas se leen y escriben rápidamente.
Gestión sencilla: Bases de datos por filas son más simples de diseñar y mantener, ya que la estructura suele coincidir con la organización natural de datos.
Formatos:
CSV: formato textual simple, ampliamente soportado y fácil de leer. JSON: formato textual que maneja bien datos jerárquicos y anidados. Avro: formato binario optimizado para serialización y deserialización rápida.
Almacenamiento por columnas (Column-based Storage)
Definición:
Los datos se guardan columna por columna. Todos los valores de una columna se almacenan contiguamente. Cada columna contiene valores para un atributo específico a través de muchas filas.
Uso típico:
Sistemas OLAP (Online Analytical Processing) Almacenes de datos, análisis Big Data, aplicaciones de business intelligence
Ventajas:
Consultas rápidas: Consultas que acceden solo a columnas específicas son muy veloces, porque solo se leen columnas relevantes.
Alta compresión: Como valores similares se guardan juntos, los formatos por columnas logran altas tasas de compresión, reduciendo espacio.
Agregaciones eficientes: Funciones de agregación (SUM, AVG, COUNT, etc.) se ejecutan más rápido porque los datos se procesan por columna.
Formatos:
Parquet: formato columnar optimizado para alta compresión y consultas eficientes en entornos Big Data. ORC: también columnar, especialmente optimizado para Hadoop con altas tasas de compresión y consultas eficientes.
Comparativa: almacenamiento por filas vs. columnas
| Característica | Almacenamiento por filas (OLTP) | Almacenamiento por columnas (OLAP) |
|---|---|---|
| Estrategia de almacenamiento | Todos los atributos de un registro juntos | Valores de atributos juntos por columna |
| Aplicaciones típicas | Sistemas transaccionales (e-commerce, banca) | Sistemas analíticos (almacenes de datos) |
| Ventajas de rendimiento | Transacciones rápidas y escritura | Consultas y agregaciones rápidas |
| Compresión | Tasas de compresión menores | Tasas de compresión mayores |
| Ejemplos | CSV, JSON, Avro | Parquet, ORC |
Resumen final
Almacenamiento por filas (OLTP):
Ideal para sistemas transaccionales donde registros completos se leen y escriben frecuentemente. Típico en sistemas que necesitan inserción, actualización y eliminación rápida. Soportado por CSV, JSON y Avro.
Almacenamiento por columnas (OLAP):
Ideal para sistemas analíticos que consultan y agregan grandes volúmenes. Típico en almacenes de datos y análisis Big Data, donde rendimiento de consultas y compresión son críticos. Soportado por Parquet y ORC.
Ahora, los formatos en detalle
Para entender completamente los formatos de datos en contextos de SQL y servicios Azure, exploraremos Avro, TXT, ORC, CSV, JSON y Parquet, analizando sus ventajas y desventajas, además de la diferencia entre vistas por filas y columnas.
Formatos de datos y su uso
1. Avro
Descripción
Un formato de almacenamiento basado en filas, desarrollado por Apache. Está diseñado específicamente para procesamiento eficiente de Big Data.
Ventajas de Avro
- Soporte para tipos de datos complejos y ricos.
- Esquema integrado, facilitando la portabilidad de datos.
- Excelente para serialización y deserialización de datos.
- Ideal para almacenamiento y transferencia entre distintas herramientas Big Data.
2. TXT
Descripción
Probablemente el formato más simple y conocido: un formato de texto simple y sin estructura.
Ventajas:
Fácil de leer y escribir. Formato universalmente soportado.
Uso: Adecuado para registros simples o transferencias donde la estructura de datos no es crítica.
3. ORC (Optimized Row Columnar)
Descripción
Un formato basado en columnas, optimizado para Hadoop.
Ventajas
- Altas tasas de compresión y menor uso de espacio.
- Rendimiento de consultas optimizado mediante acceso columnar.
- Soporta tipos de datos complejos e índices.
- Ideal para almacenes de datos y análisis Big Data, especialmente cuando se ejecutan consultas sobre grandes volúmenes.
4. CSV (Comma-Separated Values)
Descripción: Un formato textual simple donde los valores se separan por comas.
Ventajas de CSV
- Fácil de crear y leer.
- Ampliamente soportado por bases de datos y aplicaciones.
- Muy adecuado para intercambio de datos entre sistemas y conjuntos simples.
5. JSON (JavaScript Object Notation)
Descripción
Un formato textual para datos estructurados, basado en sintaxis JavaScript.
Ventajas de JSON
- Legible para humanos y fácil de depurar.
- Soporta estructuras jerárquicas y tipos de datos anidados.
- Ampliamente usado en aplicaciones web y APIs.
- Ideal para almacenamiento y transferencia en aplicaciones web y APIs.
6. Parquet
Descripción
Un formato basado en columnas, optimizado para Hadoop y otros marcos de procesamiento Big Data.
Ventajas:
Compresión eficiente de datos y uso óptimo de espacio. Rendimiento de consultas optimizado mediante acceso columnar. Soporta tipos de datos complejos.
Uso
Ideal para consultas analíticas en almacenes de datos y análisis Big Data.
Diferencia entre vistas por filas y por columnas
Basado en filas (Row-based):
- Los datos se almacenan fila por fila.
Es ventajoso para sistemas transaccionales donde se leen y escriben filas completas con frecuencia. Ejemplos: Avro, TXT, CSV, JSON.
Basado en columnas (Column-based):
Los datos se almacenan columna por columna. Es ventajoso para consultas analíticas que acceden solo a columnas específicas y requieren menos E/S. Ejemplos: ORC, Parquet.
Pequeño FAQ con ejemplos para diferenciar:
Pregunta: ¿Cuándo debo usar Parquet en lugar de CSV?
Respuesta: Parquet es ideal para Big Data Analytics porque es columnar y ofrece mejor rendimiento al consultar columnas específicas. CSV es mejor para intercambiar datos simples y casos donde la legibilidad humana es importante.
Pregunta: ¿Qué ventajas ofrece JSON sobre Avro para la transmisión de datos en aplicaciones web?
Respuesta: JSON es legible para humanos y muy usado en aplicaciones web y APIs. Funciona bien para estructuras de datos jerárquicas. Avro, en cambio, ofrece mejor compresión y eficiencia para transmitir grandes volúmenes de datos entre herramientas de Big Data.
Pregunta: ¿En qué escenario debería elegir ORC sobre Parquet?
Respuesta: Ambos formatos son columnares y están optimizados para consultas analíticas. ORC podría ser preferible si la integración con el ecosistema Hadoop es prioritaria o si se requieren tasas de compresión particularmente altas y tipos de datos complejos.
Resumen de recomendaciones
La elección del formato de archivo adecuado depende fuertemente del caso de uso específico.
Aquí hay algunas recomendaciones generales:
- Usa Avro para serialización y transmisión de Big Data.
- Usa TXT para datos simples sin estructura.
- Elige ORC o Parquet para consultas analíticas columnares.
- Usa CSV para intercambio de datos simple.
- Elige JSON para datos estructurados en aplicaciones web y APIs.
Qué significan serialización y deserialización
A menudo se habla de serialización… pero ¿qué significa exactamente?
Serialización
El proceso de convertir un objeto de datos en un formato que pueda almacenarse o transmitirse. Esto incluye la conversión a formatos como JSON, Avro u Parquet.
Ejemplo: Un objeto Java se convierte en una cadena JSON para enviarlo por la red.
Deserialización
El proceso inverso de la serialización, donde el formato almacenado o transmitido se convierte nuevamente en un objeto de datos.
Ejemplo: Una cadena JSON se convierte nuevamente en un objeto Java para procesarlo en el programa.
Ejercicios prácticos sobre formatos de datos - SQL: Avro, txt, ORC, CSV, JSON, PARQUET
15 preguntas y respuestas prácticas sobre formatos de datos y su uso
Pregunta 1: Archivos de registro del servidor web
Situación: Necesitas almacenar archivos de registro de un servidor web que consisten principalmente en texto y deben ser fáciles de leer.
Respuesta: TXT
Explicación: Los archivos TXT son simples de leer y escribir, ideales para datos textuales simples sin estructura, como registros de servidor.
Pregunta 2: Big Data Analytics
Situación: Trabajas en un análisis de Big Data y necesitas almacenar grandes volúmenes de datos por columnas para optimizar las consultas.
Respuesta: Parquet
Explicación: Parquet es un formato de almacenamiento columnar que permite compresión eficiente y consultas más rápidas en accesos columnares.
Pregunta 3: Estructuras de datos complejas
Situación: Transmites estructuras de datos complejas y anidadas entre diferentes aplicaciones de Big Data.
Respuesta: Avro
Explicación: Avro soporta tipos de datos complejos y anidados, y almacena el esquema junto con los datos, lo que facilita la interoperabilidad.
Pregunta 4: Transmisión de datos de API web
Situación: Necesitas transmitir datos desde una aplicación web a un servidor y requieres un formato legible para humanos.
Respuesta: JSON
Explicación: JSON es fácil de leer y ampliamente usado en aplicaciones web, ideal para transmitir datos estructurados.
Pregunta 5: Intercambio universal de datos
Situación: Necesitas intercambiar datos tabulares entre diferentes bases de datos y herramientas que soportan un formato simple común.
Respuesta: CSV
Explicación: CSV es un formato ampliamente soportado para datos tabulares y es compatible con prácticamente todas las bases de datos y herramientas.
Pregunta 6: Hadoop Analytics
Situación: Almacenas grandes cantidades de datos analíticos en un clúster Hadoop y necesitas altas tasas de compresión.
Respuesta: ORC
Explicación: ORC ofrece altas tasas de compresión y está optimizado para entornos Hadoop.
Pregunta 7: Hoja de cálculo
Situación: Quieres almacenar y editar rápidamente un pequeño conjunto de datos en una hoja de cálculo.
Respuesta: CSV
Explicación: CSV es fácil de crear y puede abrirse y editarse fácilmente en aplicaciones de hojas de cálculo como Excel.
Pregunta 8: Datos de registro del Data Warehouse
Situación: Transmites un gran volumen de datos de registro a un Data Warehouse y deseas almacenamiento y procesamiento eficientes.
Respuesta: Parquet
Explicación: Parquet es ideal para almacenar y procesar grandes volúmenes de datos en Data Warehouses gracias a su estructura columnar.
Pregunta 9: Serialización de Big Data
Situación: Necesitas serializar un gran número de registros y transmitirlos entre diferentes herramientas de Big Data.
Respuesta: Avro
Explicación: Avro está especialmente optimizado para serializar grandes volúmenes de datos y soporta transmisión entre diferentes herramientas de Big Data.
Pregunta 10: Desarrollo de API web
Situación: Creas una API web que proporciona datos estructurados a diferentes clientes.
Respuesta: JSON
Explicación: JSON es el formato estándar para APIs web y permite transmitir y procesar fácilmente datos estructurados.
Pregunta 11: Data Lake Analytics
Situación: Almacenas y analizas datos en un Data Lake donde se requiere alta eficiencia en almacenamiento y consultas.
Respuesta: Parquet u ORC
Explicación: Ambos formatos ofrecen almacenamiento columnar y alta eficiencia para almacenar y consultar grandes volúmenes de datos.
Pregunta 12: Optimización de CSV
Situación: Tienes un archivo CSV con millones de filas y deseas mejorar la eficiencia de almacenamiento y consulta.
Respuesta: Parquet
Explicación: Parquet ofrece mejor compresión y rendimiento de consulta en grandes volúmenes de datos comparado con CSV.
Pregunta 13: Exportación de base de datos
Situación: Necesitas exportar datos de una base de datos relacional a un sistema de Big Data manteniendo su estructura.
Respuesta: Avro
Explicación: Avro soporta tipos de datos complejos y anidados, pudiendo representar bien la estructura de una base de datos relacional.
Pregunta 14: Azure Data Factory
Situación: Necesitas almacenar datos en una pipeline de Azure Data Factory y procesarlos posteriormente.
Respuesta: Parquet o JSON
Explicación: Ambos formatos funcionan bien para el procesamiento en pipelines de datos y ofrecen almacenamiento y consultas eficientes.
Pregunta 15: Procesamiento de datos IoT
Situación: Tienes datos de dispositivos IoT que requieren actualizaciones frecuentes y un procesamiento rápido.
Respuesta: Avro
Explicación: Avro es ideal para datos en streaming procedentes de dispositivos IoT, ya que soporta serialización/deserialización rápida y evolución de esquemas.



