Skip to content

Commit

Permalink
Parquet: Only write GeoParquet metadata when a geometry column exists (
Browse files Browse the repository at this point in the history
  • Loading branch information
kylebarron authored Mar 27, 2024
1 parent 0503635 commit 541fd47
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
19 changes: 12 additions & 7 deletions src/io/parquet/writer/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,18 +226,23 @@ impl GeoParquetMetadataBuilder {
}
}

pub fn finish(self) -> GeoParquetMetadata {
pub fn finish(self) -> Option<GeoParquetMetadata> {
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,
})
}
}
}
Expand Down
9 changes: 4 additions & 5 deletions src/io/parquet/writer/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,12 @@ impl<W: Write + Send> GeoParquetWriter<W> {
}

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(())
}
}

0 comments on commit 541fd47

Please sign in to comment.