Skip to content
IRC-CodingIRC-Coding
formatos de archivoCSVParquetJSONAvroORCSQLAzure

Formatos de archivo SQL y Azure: CSV, Parquet, JSON, Avro

Guía completa sobre formatos de datos: CSV, Parquet, JSON, Avro y ORC para SQL y Azure.

S

schutzgeist

13 min read
Formatos de archivo SQL y Azure: CSV, Parquet, JSON, Avro

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

FormatoTipoVentajasDesventajasIdeal paraReemplazo de BDProcesamiento automatizadoUso en IA
CSVBasado 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
JSONBasado 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
ParquetBasado 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
AvroBasado 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
ORCBasado 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
XMLBasado en filas✓ Datos estructurados
✓ Validación (XSD)
✓ Soporta namespaces
✓ Autodescriptivo
✗ Muy voluminoso
✗ Complejo
✗ Lento
✗ Obsoleto
Sistemas legacy, configuraciones, SOAP❌ No⚠️ Complejo⚠️ Raro
YAMLBasado 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:

ClienteIDNombreEdadCiudad
1Alice30Berlín
2Bob25Essen
3Charlie35Dortmund

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ísticaAlmacenamiento por filas (OLTP)Almacenamiento por columnas (OLAP)
Estrategia de almacenamientoTodos los atributos de un registro juntosValores de atributos juntos por columna
Aplicaciones típicasSistemas transaccionales (e-commerce, banca)Sistemas analíticos (almacenes de datos)
Ventajas de rendimientoTransacciones rápidas y escrituraConsultas y agregaciones rápidas
CompresiónTasas de compresión menoresTasas de compresión mayores
EjemplosCSV, JSON, AvroParquet, 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.


Volver al blog
Share:

Nächster Artikel in Programación

Weiterlesen
Fundamentos de Programación en C#

Entradas relacionadas