From 541fd477ddceb355926b9736932edc9817b7f257 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Wed, 27 Mar 2024 11:21:31 -0400 Subject: [PATCH] Parquet: Only write GeoParquet metadata when a geometry column exists (#586) --- src/io/parquet/writer/metadata.rs | 19 ++++++++++++------- src/io/parquet/writer/sync.rs | 9 ++++----- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/io/parquet/writer/metadata.rs b/src/io/parquet/writer/metadata.rs index 5c933edce..0bcf00186 100644 --- a/src/io/parquet/writer/metadata.rs +++ b/src/io/parquet/writer/metadata.rs @@ -226,18 +226,23 @@ impl GeoParquetMetadataBuilder { } } - pub fn finish(self) -> GeoParquetMetadata { + pub fn finish(self) -> Option { let mut columns = HashMap::with_capacity(self.columns.len()); for column_info in self.columns.into_values() { let (column_name, column_meta) = column_info.finish(); columns.insert(column_name, column_meta); } - GeoParquetMetadata { - version: "1.1.0".to_string(), - primary_column: self - .primary_column - .unwrap_or_else(|| columns.keys().next().unwrap().clone()), - columns, + + if columns.is_empty() { + None + } else { + Some(GeoParquetMetadata { + version: "1.1.0".to_string(), + primary_column: self + .primary_column + .unwrap_or_else(|| columns.keys().next().unwrap().clone()), + columns, + }) } } } diff --git a/src/io/parquet/writer/sync.rs b/src/io/parquet/writer/sync.rs index d6201316f..0ffff93d9 100644 --- a/src/io/parquet/writer/sync.rs +++ b/src/io/parquet/writer/sync.rs @@ -53,13 +53,12 @@ impl GeoParquetWriter { } pub fn finish(mut self) -> Result<()> { - let geo_meta = self.metadata_builder.finish(); - let kv_metadata = KeyValue::new("geo".to_string(), serde_json::to_string(&geo_meta)?); - - self.writer.append_key_value_metadata(kv_metadata); + if let Some(geo_meta) = self.metadata_builder.finish() { + let kv_metadata = KeyValue::new("geo".to_string(), serde_json::to_string(&geo_meta)?); + self.writer.append_key_value_metadata(kv_metadata); + } self.writer.close()?; - Ok(()) } }