A relational database stores data row by row on disk — reading one order means reading one contiguous chunk with every column of that order. A columnar database stores data column by column instead: every restaurant's rating, across every row, is stored contiguously.
This inverts which queries are cheap. "Fetch order 482, every field" (a row-shaped query) is now more expensive, since values are scattered across many column files. But "what's the average order total across 50 million orders" (a column-shaped, analytical query) becomes dramatically cheaper, because the engine only has to scan the one column it needs instead of every row's full width. Examples: Amazon Redshift, ClickHouse, BigQuery, DuckDB. Good fit: analytics, reporting, large-scale aggregation.
Not the same thing as a wide-column store. Cassandra and HBase are often filed under "columnar", but they store data row-wise within a partition — a row key holds many columns together. That makes them excellent at "fetch everything for this key" at enormous scale, and poor at exactly the full-column analytical scan described above. If the workload is "average one attribute across 50 million rows", you want a true columnar engine; if it's "read this user's event history, fast, at any scale", you want a wide-column store.