title_wip

[Edit this page](https://github.com/ClickHouse/ClickHouse/tree/master/docs/en/interfaces/formats/Parquet/Parquet.md)

|  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- |
| Input Output Alias|  |  |  | | --- | --- | --- | | ✔ ✔  | | | | | |

## Description[​](#description "Direct link to Description")

[Apache Parquet](https://parquet.apache.org/) is a columnar storage format widespread in the Hadoop ecosystem. ClickHouse supports read and write operations for this format.

## Data types matching[​](#data-types-matching-parquet "Direct link to Data types matching")

The table below shows how Parquet data types match ClickHouse [data types](/docs/sql-reference/data-types).

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Parquet type (logical, converted, or physical) ClickHouse data type|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | `BOOLEAN` [Bool](/docs/sql-reference/data-types/boolean)| `UINT_8` [UInt8](/docs/sql-reference/data-types/int-uint)| `INT_8` [Int8](/docs/sql-reference/data-types/int-uint)| `UINT_16` [UInt16](/docs/sql-reference/data-types/int-uint)| `INT_16` [Int16](/docs/sql-reference/data-types/int-uint)/[Enum16](/docs/sql-reference/data-types/enum)| `UINT_32` [UInt32](/docs/sql-reference/data-types/int-uint)| `INT_32` [Int32](/docs/sql-reference/data-types/int-uint)| `UINT_64` [UInt64](/docs/sql-reference/data-types/int-uint)| `INT_64` [Int64](/docs/sql-reference/data-types/int-uint)| `DATE` [Date32](/docs/sql-reference/data-types/date)| `TIMESTAMP`, `TIME` [DateTime64](/docs/sql-reference/data-types/datetime64)| `FLOAT` [Float32](/docs/sql-reference/data-types/float)| `DOUBLE` [Float64](/docs/sql-reference/data-types/float)| `INT96` [DateTime64(9, 'UTC')](/docs/sql-reference/data-types/datetime64)| `BYTE_ARRAY`, `UTF8`, `ENUM`, `BSON` [String](/docs/sql-reference/data-types/string)| `JSON` [JSON](/docs/sql-reference/data-types/newjson)| `FIXED_LEN_BYTE_ARRAY` [FixedString](/docs/sql-reference/data-types/fixedstring)| `DECIMAL` [Decimal](/docs/sql-reference/data-types/decimal)| `LIST` [Array](/docs/sql-reference/data-types/array)| `MAP` [Map](/docs/sql-reference/data-types/map)| struct [Tuple](/docs/sql-reference/data-types/tuple)| `FLOAT16` [Float32](/docs/sql-reference/data-types/float)| `UUID` [FixedString(16)](/docs/sql-reference/data-types/fixedstring)| `INTERVAL` [FixedString(12)](/docs/sql-reference/data-types/fixedstring) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

When writing Parquet file, data types that don't have a matching Parquet type are converted to the nearest available type:

|  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ClickHouse data type Parquet type|  |  |  |  |  |  |  |  |  |  | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | [IPv4](/docs/sql-reference/data-types/ipv4) `UINT_32`| [IPv6](/docs/sql-reference/data-types/ipv6) `FIXED_LEN_BYTE_ARRAY` (16 bytes)| [Date](/docs/sql-reference/data-types/date) (16 bits) `DATE` (32 bits)| [DateTime](/docs/sql-reference/data-types/datetime) (32 bits, seconds) `TIMESTAMP` (64 bits, milliseconds)| [Int128/UInt128/Int256/UInt256](/docs/sql-reference/data-types/int-uint) `FIXED_LEN_BYTE_ARRAY` (16/32 bytes, little-endian) | | | | | | | | | | | |

Arrays can be nested and can have a value of `Nullable` type as an argument. `Tuple` and `Map` types can also be nested.

Data types of ClickHouse table columns can differ from the corresponding fields of the Parquet data inserted. When inserting data, ClickHouse interprets data types according to the table above and then [casts](/docs/sql-reference/functions/type-conversion-functions#CAST) the data to that data type which is set for the ClickHouse table column. E.g. a `UINT_32` Parquet column can be read into an [IPv4](/docs/sql-reference/data-types/ipv4) ClickHouse column.

For some Parquet types there's no closely matching ClickHouse type. We read them as follows:

- `TIME` (time of day) is read as a timestamp. E.g. `10:23:13.000` becomes `1970-01-01 10:23:13.000`.
- `TIMESTAMP`/`TIME` with `isAdjustedToUTC=false` is a local wall-clock time (year, month, day, hour, minute, second and subsecond fields in a local timezone, regardless of what specific time zone is considered local), same as SQL `TIMESTAMP WITHOUT TIME ZONE`. ClickHouse reads it as if it were a UTC timestamp instead. E.g. `2025-09-29 18:42:13.000` (representing a reading of a local wall clock) becomes `2025-09-29 18:42:13.000` (`DateTime64(3, 'UTC')` representing a point in time). If converted to String, it shows the correct year, month, day, hour, minute, second and subsecond, which can then be interpreted as being in some local timezone instead of UTC. Counterintuitively, changing the type from `DateTime64(3, 'UTC')` to `DateTime64(3)` would not help as both types represent a point in time rather than a clock reading, but `DateTime64(3)` would incorrectly be formatted using local timezone.
- `INTERVAL` is currently read as `FixedString(12)` with raw binary representation of the time interval, as encoded in Parquet file.

## Example usage[​](#example-usage "Direct link to Example usage")

### Inserting data[​](#inserting-data "Direct link to Inserting data")

Using a Parquet file with the following data, named as `football.parquet`: