From e7db562e2b123103f79cab645d94838900db5308 Mon Sep 17 00:00:00 2001 From: Matt Topol Date: Fri, 9 Sep 2022 13:43:24 -0400 Subject: [PATCH] ARROW-17627: [Go][Parquet] Forward schema metadata to file without StoreSchema --- go/parquet/pqarrow/file_reader_test.go | 25 +++++++++++++++++++++++++ go/parquet/pqarrow/file_writer.go | 8 ++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/go/parquet/pqarrow/file_reader_test.go b/go/parquet/pqarrow/file_reader_test.go index 416bf8169b0..4011f5b7093 100644 --- a/go/parquet/pqarrow/file_reader_test.go +++ b/go/parquet/pqarrow/file_reader_test.go @@ -191,3 +191,28 @@ func TestRecordReaderSerial(t *testing.T) { assert.Same(t, io.EOF, err) assert.Nil(t, rec) } + +func TestFileReaderWriterMetadata(t *testing.T) { + mem := memory.NewCheckedAllocator(memory.DefaultAllocator) + defer mem.AssertSize(t, 0) + + tbl := makeDateTimeTypesTable(mem, true, true) + defer tbl.Release() + + meta := arrow.NewMetadata([]string{"foo", "bar"}, []string{"bar", "baz"}) + sc := arrow.NewSchema(tbl.Schema().Fields(), &meta) + + var buf bytes.Buffer + writer, err := pqarrow.NewFileWriter(sc, &buf, nil, pqarrow.NewArrowWriterProperties(pqarrow.WithAllocator(mem))) + require.NoError(t, err) + require.NoError(t, writer.WriteTable(tbl, tbl.NumRows())) + require.NoError(t, writer.Close()) + + pf, err := file.NewParquetReader(bytes.NewReader(buf.Bytes()), file.WithReadProps(parquet.NewReaderProperties(mem))) + require.NoError(t, err) + defer pf.Close() + + kvMeta := pf.MetaData().KeyValueMetadata() + assert.Equal(t, []string{"foo", "bar"}, kvMeta.Keys()) + assert.Equal(t, []string{"bar", "baz"}, kvMeta.Values()) +} diff --git a/go/parquet/pqarrow/file_writer.go b/go/parquet/pqarrow/file_writer.go index 9a44b7f08f7..f24a5968aa4 100644 --- a/go/parquet/pqarrow/file_writer.go +++ b/go/parquet/pqarrow/file_writer.go @@ -73,11 +73,11 @@ func NewFileWriter(arrschema *arrow.Schema, w io.Writer, props *parquet.WriterPr } meta := make(metadata.KeyValueMetadata, 0) - if arrprops.storeSchema { - for i := 0; i < arrschema.Metadata().Len(); i++ { - meta.Append(arrschema.Metadata().Keys()[i], arrschema.Metadata().Values()[i]) - } + for i := 0; i < arrschema.Metadata().Len(); i++ { + meta.Append(arrschema.Metadata().Keys()[i], arrschema.Metadata().Values()[i]) + } + if arrprops.storeSchema { serializedSchema := flight.SerializeSchema(arrschema, props.Allocator()) meta.Append("ARROW:schema", base64.StdEncoding.EncodeToString(serializedSchema)) }