parquet
Description
A Parquet file with column schema, row groups, data pages and footer. Use explicit target declarations when importing. Compression and row-group controls are statement settings.
Input and output. Select it with FORMAT parquet. Names ignore ASCII case; use the snake_case name shown here.
The file stores a column schema, row groups, data pages and a footer. Output types are inferred from runtime values; native collection members retain their declared types.
Create an explicit compatible destination before import, including when using file(). Missing, unknown and case-mismatched fields follow the listed options. The parquet_metadata format reads the footer as rows instead of decoding data columns.
SELECT expressions FORMAT parquet;
INSERT INTO table [(columns)] [SETTINGS ...] FORMAT parquet
<data>Example usage
Use the native client's --query mode to preserve binary output bytes. The server must be running, the executable available as ./coordinator, and database data selected.
./coordinator client --database data --query "SELECT CAST(7 AS Int64) AS id FORMAT parquet" > sample.parquet
./coordinator client --database data --query "CREATE TABLE format_import(id Int64)" > /dev/null
./coordinator client --database data --query "INSERT INTO format_import FORMAT parquet" < sample.parquet > /dev/null
./coordinator client --database data --query "SELECT id FROM format_import FORMAT csv"7Create format_import in a fresh database before running this example.
Format settings
Use a statement SETTINGS clause; these options are not persisted by SET.
| Setting | Type | Default | Meaning |
|---|---|---|---|
ignore_unknown_fields |
Bool |
0 |
Skip input keys and header names that match no target column instead of failing. |
parquet_compression |
String |
zstd |
Compress column pages with snappy, lz4, brotli, zstd, gzip, or none. |
parquet_detect_variant |
Bool |
1 |
Recognize unannotated metadata/value binary structs as Variant values. |
parquet_fixed_strings |
Bool |
1 |
Write FixedString as fixed-width bytes instead of variable-width Binary. |
parquet_ignore_case |
Bool |
0 |
Ignore ASCII case when matching input fields to target column names. |
parquet_missing_as_default |
Bool |
1 |
Give missing input fields their SQL DEFAULT or native type default. |
parquet_page_bytes |
UInt64 |
1048576 |
Target uncompressed bytes per output data page. |
parquet_page_index |
Bool |
1 |
Write column and offset indexes for individual data pages. |
parquet_parse_json |
Bool |
1 |
Decode JSON-annotated input fields as native JSON instead of text. |
parquet_read_bytes |
UInt64 |
16744704 |
Target decoded batch bytes estimated from uncompressed row-group metadata. |
parquet_read_geo |
Bool |
1 |
Decode WKB or WKT columns identified by GeoParquet metadata; text and binary targets retain raw payloads. |
parquet_read_rows |
UInt64 |
65409 |
Maximum rows per decoded input batch. |
parquet_row_group_bytes |
UInt64 |
536870912 |
Target output row-group bytes before compression. |
parquet_row_group_rows |
UInt64 |
1000000 |
Maximum rows per output row group. |
parquet_strings_as_text |
Bool |
1 |
Annotate text strings as UTF-8; BLOB keeps its exact binary representation. |
parquet_wide_as_decimal |
Bool |
0 |
Write 128/256-bit integers as big-endian DECIMAL instead of little-endian fixed-width bytes. |
parquet_write_batch_rows |
UInt64 |
1024 |
Check output data-page size after this many rows. |
parquet_write_geo |
Bool |
1 |
Encode geometry as WKB and include GeoParquet column metadata. |
snappy_mode |
String |
basic |
Read Snappy client files as basic (Hadoop blocks) or framed (standard streaming format). |
Type mappings
| Native value | Parquet representation |
|---|---|
| Bool, integers through 64 bits, Float32/64 | BOOLEAN, signed/unsigned INT32 or INT64, FLOAT/DOUBLE. Top-level narrow integers retain their runtime 64-bit class; collection members retain declared widths. |
| String, BLOB, FixedString | UTF-8 BYTE_ARRAY, raw BYTE_ARRAY, FIXED_LEN_BYTE_ARRAY. Settings can remove text annotations or fixed widths. Native String requires UTF-8; use BLOB for arbitrary bytes. |
| Enum8/16, IPv4, IPv6, UUID | Signed integer codes, UINT32, fixed 16-byte address, fixed 16-byte identifier. Input also accepts the UUID logical annotation. |
| Date/Date32, DateTime/DateTime64, Time/Time64 | DATE, TIMESTAMP, TIME. Second-resolution timestamps/clocks use milliseconds; fractional values use the next exact supported unit. Clocks outside one day and overflowing conversions are rejected. |
| Decimal through precision 76 | Standard DECIMAL with exact signed coefficients and scale. |
| Int128/UInt128/Int256/UInt256 | Little-endian fixed 16/32-byte integers by default. parquet_wide_as_decimal=1 writes signed big-endian DECIMAL with 17/33 bytes and precision 39/77/78. Input accepts both representations; precision above 76 requires an explicit compatible integer target. |
| Array, Tuple, Map | LIST, struct, MAP, including nested values and NULL members. Named Tuple fields retain their names. |
| JSON | JSON-annotated binary JSON; parquet_parse_json=0 reads it as text before target conversion. |
| Nullable, LowCardinality, SimpleAggregateFunction | Inner representation; scalar dictionary values are expanded before Parquet's own encoding. |
| Geometry aliases | GeoParquet WKB plus geo metadata; input also accepts WKT. See the restrictions below. |