Reads one row group's worth of one column, named name, from an open parquet_reader
(reader) into values -- the row-group-chunked counterpart to parquet_read_column, for a
large column you read one row group at a time instead of materializing the whole column.
row_group (1-based) selects which row group; reads are stateless/random-access (unlike
the write side's parquet_new_row_group/parquet_finish_row_group pairing, there is no
"currently open" row group to track -- call with any row_group, in any order, as many
times as you like). Use parquet_get_num_row_groups to learn how many row groups a file
has, and parquet_get_chunk_size(reader, ..., row_group=) to learn a specific row group's
own row count before allocating values. Dispatched by values' actual/declared
type/kind and rank (scalar values(:) or vector values(:,:)) exactly like
parquet_read_column, and separately by row_group's own kind (integer(int32) or
integer(int64) -- the latter needed only to address a row group beyond
huge(1_int32) in a file that large). null_value (optional) fills missing entries;
is_valid (optional) reports which elements were actually present.
Two restrictions not shared with parquet_read_column: disallowed (error stop) on a reader with an active sort (a permutation destroys row-group locality, so there is no coherent "row group N of the sorted output" to serve -- see check_reader_no_sort; a filter= or sample_fraction= mask only ever REMOVES rows, so a chunked read works under one and hands back that row group's surviving rows); and, when the reader was opened with qc=.true., every chunk read runs the usual qc: min/max/miss checks scoped to just that one row group's own data (not the whole column) -- a hard-mode (qc_soft=.false.) violation error stops naming the offending row group; a soft-mode (qc_soft=.true.) violation warns at most once per column, same throttling as every other read path. See "Streaming/chunked reads" in doc/pages/io/reading.md.
A scalar "string" column can also be read into a type(parquet_string_column) holding
just row group row_group's rows -- values is cleared then filled, same no-null_value/
no-is_valid convention as parquet_read_column's own parquet_string_column specific above.