CSV
Row- No types, so dates, decimals and nulls must be parsed and validated on load.
- Delimiters, quotes and newlines inside values are the most common load failures.
- Agree on encoding (UTF-8), delimiter, header and null marker with the source team.
Notes
A file format decides how bytes are laid out on disk. A table format sits on top of those files and adds database behaviour — transactions, schema evolution, and time travel — to plain object storage like S3.
Row formats store each record together and are fast to write. Columnar formats store each column together and are fast to query, because an engine reads only the columns it needs.
| Format | Layout | Encoding | Schema | Splittable | Best for |
|---|---|---|---|---|---|
| CSV | Row | Text | None — every value is a string | Yes, unless gzip-compressed | Exchanging data with external systems and humans |
| JSON | Row | Text | Self-describing, nested | JSON Lines yes; a single large array no | API payloads and semi-structured events |
| XML | Row | Text | Optional, via XSD | Only with a row tag | Legacy enterprise and B2B integrations |
| Avro | Row | Binary | Embedded in the file header (JSON schema) | Yes, via sync markers | Streaming messages and write-heavy pipelines |
| Parquet | Columnar | Binary | Embedded in the file footer | Yes, by row group | Analytics storage in data lakes and warehouses |
| ORC | Columnar | Binary | Embedded in the file footer | Yes, by stripe | Hive-centric Hadoop workloads |
Plain Parquet files on S3 cannot safely handle updates, deletes or two writers at once. Table formats fix this with a metadata layer that tracks exactly which files make up each version of a table.
Metadata
Metadata file → manifest list → manifest files → data files
Strengths
Best for
Multi-engine lakehouses on AWS and Snowflake
Metadata
_delta_log of JSON commits plus Parquet checkpoints
Strengths
Best for
Spark and Databricks-first platforms
Metadata
Timeline of commits in the .hoodie folder
Strengths
Best for
High-frequency CDC and streaming upserts
| If you need… | Use |
|---|---|
| Landing raw data from a source system | Keep it as delivered (CSV, JSON, XML) |
| Kafka or streaming messages | Avro with a Schema Registry |
| Analytics storage in S3 | Parquet with Snappy or ZSTD |
| Existing Hive warehouse | ORC |
| Updates, deletes or time travel across engines | Apache Iceberg |
| Lakehouse built on Databricks | Delta Lake |
| Heavy upsert-driven CDC | Apache Hudi |