本文为您介绍Parquet格式的使用方法和类型映射。
使用限制
Parquet格式允许读写Parquet数据。
仅对象存储OSS连接器支持读取Parquet格式的数据。
使用示例
利用OSS和Parquet格式创建表的示例如下。
CREATE TEMPORARY TABLE user_behavior (
user_id BIGINT,
item_id BIGINT,
category_id BIGINT,
behavior STRING,
ts TIMESTAMP(3),
dt STRING
) PARTITIONED BY (dt) WITH (
'connector' = 'filesystem',
'path' = 'oss://<bucket>/path',
'format' = 'parquet'
)
配置选项
参数 | 是否必选 | 默认值 | 类型 | 说明 |
format | 是 | none | String | 声明使用的格式。使用Parquet格式时,参数取值为parquet。 |
parquet.utc-timezone | 否 | false | Boolean | 使用UTC时区或本地时区在纪元时间和 LocalDateTime之间进行转换。 参数取值如下:
|
Parquet格式也支持ParquetOutputFormat的配置。 例如,可以配置parquet.compression=GZIP
来开启gzip压缩。
类型映射
目前,Parquet格式类型映射与Apache Hive兼容,但与Apache Spark有所不同:
Timestamp:不论精度,映射timestamp类型至int96。
Decimal:根据精度,映射decimal类型至固定长度字节的数组。
Flink与Parquet的数据类型的映射关系如下。
Flink SQL类型 | Parquet类型 | Parquet逻辑类型 |
CHAR / VARCHAR / STRING | BINARY | UTF8 |
BOOLEAN | BOOLEAN | - |
BINARY / VARBINARY | BINARY | - |
DECIMAL | FIXED_LEN_BYTE_ARRAY | DECIMAL |
TINYINT | INT32 | INT_8 |
SMALLINT | INT32 | INT_16 |
INT | INT32 | - |
BIGINT | INT64 | - |
FLOAT | FLOAT | - |
DOUBLE | DOUBLE | - |
DATE | INT32 | DATE |
TIME | INT32 | TIME_MILLIS |
TIMESTAMP | INT96 | - |
ARRAY | - | LIST |
MAP | - | MAP |
ROW | - | STRUCT |