diff --git a/lib/trino-parquet/src/main/java/io/trino/parquet/writer/ParquetWriter.java b/lib/trino-parquet/src/main/java/io/trino/parquet/writer/ParquetWriter.java index f75f756b486e..950f1fa4c8a8 100644 --- a/lib/trino-parquet/src/main/java/io/trino/parquet/writer/ParquetWriter.java +++ b/lib/trino-parquet/src/main/java/io/trino/parquet/writer/ParquetWriter.java @@ -43,6 +43,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Verify.verify; import static com.google.common.collect.ImmutableList.toImmutableList; import static io.airlift.slice.SizeOf.SIZE_OF_INT; import static io.airlift.slice.Slices.wrappedBuffer; @@ -212,6 +213,14 @@ private void flush() } List bufferDataList = builder.build(); + if (rows == 0) { + // Avoid writing empty row groups as these are ignored by the reader + verify( + bufferDataList.stream().allMatch(buffer -> buffer.getData().size() == 0), + "Buffer should be empty when there are no rows"); + return; + } + // update stats long stripeStartOffset = outputStream.longSize(); List metadatas = bufferDataList.stream() @@ -261,7 +270,6 @@ Slice getFooter(List rowGroups, MessageType messageType) private void updateRowGroups(List columnMetaData) { - // TODO Avoid writing empty row group long totalBytes = columnMetaData.stream().mapToLong(ColumnMetaData::getTotal_compressed_size).sum(); ImmutableList columnChunks = columnMetaData.stream().map(ParquetWriter::toColumnChunk).collect(toImmutableList()); rowGroupBuilder.add(new RowGroup(columnChunks, totalBytes, rows));