diff --git a/dataframe-core.cabal b/dataframe-core.cabal
--- a/dataframe-core.cabal
+++ b/dataframe-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.4
 name:               dataframe-core
-version:            2.1.0.0
+version:            2.1.1.0
 synopsis:           Core data structures for the dataframe library.
 description:
     Minimal interchange-format types for the @dataframe@ ecosystem:
diff --git a/src/DataFrame/Typed/Schema.hs b/src/DataFrame/Typed/Schema.hs
--- a/src/DataFrame/Typed/Schema.hs
+++ b/src/DataFrame/Typed/Schema.hs
@@ -62,6 +62,7 @@
 
     -- * KnownSchema class
     KnownSchema (..),
+    schemaColumnNames,
 
     -- * Helpers
     AllKnownSymbol (..),
@@ -574,6 +575,18 @@
     schemaEvidence =
         (T.pack (symbolVal (Proxy @name)), someTypeRep (Proxy @a))
             : schemaEvidence @rest
+
+{- | The column names a schema declares, in schema order. Pass it to a reader's
+options to fetch only those columns:
+
+@
+D.readCsvWithOpts
+    D.defaultReadOptions{D.readColumns = Just (schemaColumnNames \@(Schema Customer))}
+    "customers.csv"
+@
+-}
+schemaColumnNames :: forall cols. (KnownSchema cols) => [T.Text]
+schemaColumnNames = map fst (schemaEvidence @cols)
 
 -- | A class that provides a list of 'Text' values for a type-level list of Symbols.
 class AllKnownSymbol (names :: [Symbol]) where
