Reading and writing Parquet files, and nothing else: the minimal supported entry point for a program that opens a file, moves columns in or out of it, and closes it again.
A single use parquet_io brings in the readers, writers, schemas, MAML
parsing and validation, row filters, sort keys, read-time quality control and
flat key-value file metadata -- together with the element types those calls
take and return (parquet_string_column/parquet_string, parquet_date/
parquet_time/parquet_timestamp and their unit selectors, and
parquet_maml_file) -- plus the process-global settings, so that a program
importing this module alone can still choose a writer's compression, cap the
library's threads, or silence what it prints.
What it deliberately leaves out is everything that is not I/O: the
parquet_table container (use parquet_tables), the parquet_column
foundation (use parquet_columns), sorting (use parquet_sorting or
use parquet_argsort), random numbers (use parquet_random) and sampling
(use parquet_sampling). Each of those is its own entry module; use parquet
is the facade that carries all of them at once.
That list is about the NAMESPACE, not about what fpm compiles, and
parquet_random is the one place the two differ: pf_random_at and its
siblings are not reachable from use parquet_io, but the reader draws
sample_fraction='s rows with that generator, so its three-file leaf tier is
compiled for this import. The footprint table in
doc/pages/operating/choosing-a-module.md counts them.
This module does not make the library Arrow-free. Reading and writing a
Parquet file is the Arrow-facing half of parquet-fortran, so this module's
graph reaches parquet_bindings and the C++ wrapper by design -- unlike
parquet_argsort, parquet_sampling, parquet_sorting, parquet_strings,
parquet_temporal, parquet_columns, parquet_random and parquet_version,
whose Fortran graphs do not. Note that no module makes the package Arrow-free: link is a
package-level key in fpm.toml, so src/parquet_wrapper.cpp is compiled and
-larrow -larrow_compute -lparquet linked whichever module you import. See
doc/pages/operating/choosing-a-module.md.
Like the parquet facade, this is a re-export shell with no code of its own:
parquet_core and parquet_settings hold the implementations, and this
module exists so that neither of those names has to appear in user code.
parquet_core remains internal and may change in any release; parquet_io
is covered by the library's semantic-versioning promise. One consequence of
the facade shape is that FORD does not list the re-exported names as
belonging to this module, so its generated page is nearly empty -- the names
are in the site-wide procedure and type listings instead, exactly as
CLAUDE.md records for module/parquet.html.