Probably the closest thing I'm aware of is handing around a sqlite file, but I'm a little uneasy using a format that's meant to be a database as a transfer format. Dolt looks promising here too. Are there other ways?
Behind the scenes, we store them as cstore_fdw [2] files which is a columnar storage format that helps with analytical queries.
[0] https://github.com/splitgraph/splitgraph/
Note, we use mostly Python, some R, and a various range of ML or Optimisation tools, depending on the project.
We had to pick a single file format recommendation for sending 100GB+ tables on FTP servers or dropbox, scanning terabytes of useless stuff only to grap an key-value pair, and properly reading integer and UTF-8 columns. Turns out, Parquet is practical. Enough for users to start using it instead of CSV. It could be Avro, but it's just not as easy.
I actually think Parquet is pretty great in practice, I just have some issues with the sheer volume of abstractions necessary to implement it. I just wish it was anything other than Thrift.
I would probably choose Parquet over anything else, though.
https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosi...
It's well-supported in Pandas and Kafka, has good schema support, and reasonably small compressed file sizes.
That said, a simple compressed .sql file of INSERT statements can often go a long way.
The only reason CSV is widely used is because normal people think of data as spreadsheets, and asking them to fire up a database and shred JSON data into it is ridiculous when they just want to whip up a line graph or answer a simple question (e.g. "What was value X on a this particular date?").
This idea makes such sense it's a little surprising nobody did it before.
In cases where that's not enough, you could roll your own types by putting the values in plain strings and it would still be strictly more expressive than CSV