diff --git a/parquet/src/arrow/arrow_writer/mod.rs b/parquet/src/arrow/arrow_writer/mod.rs index 1e1054c9a063..67987baebc61 100644 --- a/parquet/src/arrow/arrow_writer/mod.rs +++ b/parquet/src/arrow/arrow_writer/mod.rs @@ -2471,25 +2471,21 @@ mod tests { } #[test] - #[should_panic(expected = "Converting Duration to parquet not supported")] fn duration_second_single_column() { required_and_optional::(0..SMALL_SIZE as i64); } #[test] - #[should_panic(expected = "Converting Duration to parquet not supported")] fn duration_millisecond_single_column() { required_and_optional::(0..SMALL_SIZE as i64); } #[test] - #[should_panic(expected = "Converting Duration to parquet not supported")] fn duration_microsecond_single_column() { required_and_optional::(0..SMALL_SIZE as i64); } #[test] - #[should_panic(expected = "Converting Duration to parquet not supported")] fn duration_nanosecond_single_column() { required_and_optional::(0..SMALL_SIZE as i64); } diff --git a/parquet/src/arrow/schema/mod.rs b/parquet/src/arrow/schema/mod.rs index 89c42f5eaf92..d264e0cce897 100644 --- a/parquet/src/arrow/schema/mod.rs +++ b/parquet/src/arrow/schema/mod.rs @@ -586,7 +586,10 @@ fn arrow_to_parquet_type(field: &Field, coerce_types: bool) -> Result { .with_repetition(repetition) .with_id(id) .build(), - DataType::Duration(_) => Err(arrow_err!("Converting Duration to parquet not supported",)), + DataType::Duration(_) => Type::primitive_type_builder(name, PhysicalType::INT64) + .with_repetition(repetition) + .with_id(id) + .build(), DataType::Interval(_) => { Type::primitive_type_builder(name, PhysicalType::FIXED_LEN_BYTE_ARRAY) .with_converted_type(ConvertedType::INTERVAL) diff --git a/parquet/src/arrow/schema/primitive.rs b/parquet/src/arrow/schema/primitive.rs index f1fed8f2a557..cc276eb611b0 100644 --- a/parquet/src/arrow/schema/primitive.rs +++ b/parquet/src/arrow/schema/primitive.rs @@ -43,6 +43,7 @@ fn apply_hint(parquet: DataType, hint: DataType) -> DataType { (DataType::Int32 | DataType::Int64, DataType::Timestamp(_, _)) => hint, (DataType::Int32, DataType::Time32(_)) => hint, (DataType::Int64, DataType::Time64(_)) => hint, + (DataType::Int64, DataType::Duration(_)) => hint, // Date64 doesn't have a corresponding LogicalType / ConvertedType (DataType::Int64, DataType::Date64) => hint,