@@ -340,7 +340,8 @@ class SimpleFieldWriter : public FieldWriter {
340340 context.schemaBuilder().createScalarTypeBuilder(
341341 NimbleTypeTraits<K>::scalarKind)),
342342 valuesStream_{context.createNullableContentStreamData <TargetType>(
343- typeBuilder_->asScalar ().scalarDescriptor ())},
343+ typeBuilder_->asScalar ().scalarDescriptor (),
344+ nodeId)},
344345 statisticsCollector_{context.getStatsCollector (nodeId)} {}
345346
346347 void write (
@@ -486,7 +487,8 @@ class StringFieldWriter : public FieldWriter {
486487 context.schemaBuilder().createScalarTypeBuilder(
487488 NimbleTypeTraits<K>::scalarKind)),
488489 valuesStream_{context.createNullableContentStringStreamData (
489- typeBuilder_->asScalar ().scalarDescriptor ())},
490+ typeBuilder_->asScalar ().scalarDescriptor (),
491+ nodeId)},
490492 statisticsCollector_{context.getStatsCollector (nodeId)} {
491493 static_assert (
492494 K == velox::TypeKind::VARCHAR || K == velox::TypeKind::VARBINARY,
@@ -597,9 +599,11 @@ class TimestampFieldWriter : public FieldWriter {
597599 explicit TimestampFieldWriter (FieldWriterContext& context, uint32_t nodeId)
598600 : FieldWriter{context, context.schemaBuilder ().createTimestampMicroNanoTypeBuilder ()},
599601 microsStream_{context.createNullableContentStreamData <int64_t >(
600- typeBuilder_->asTimestampMicroNano ().microsDescriptor ())},
602+ typeBuilder_->asTimestampMicroNano ().microsDescriptor (),
603+ nodeId)},
601604 nanosStream_{context.createContentStreamData <uint16_t >(
602- typeBuilder_->asTimestampMicroNano ().nanosDescriptor ())},
605+ typeBuilder_->asTimestampMicroNano ().nanosDescriptor (),
606+ nodeId)},
603607 statisticsCollector_{context.getStatsCollector (nodeId)} {}
604608
605609 void write (
@@ -690,7 +694,8 @@ class RowFieldWriter : public FieldWriter {
690694 const std::shared_ptr<const velox::dwio::common::TypeWithId>& type)
691695 : FieldWriter{context, context.schemaBuilder ().createRowTypeBuilder (type->size ())},
692696 nullsStream_{context_.createNullsStreamData (
693- typeBuilder_->asRow ().nullsDescriptor ())},
697+ typeBuilder_->asRow ().nullsDescriptor (),
698+ type->id ())},
694699 statisticsCollector_{context.getStatsCollector (type->id ())},
695700 ignoreNulls_{type->id () == 0 && context.ignoreTopLevelNulls ()} {
696701 auto rowType =
@@ -815,8 +820,8 @@ class MultiValueFieldWriter : public FieldWriter {
815820 std::shared_ptr<LengthsTypeBuilder> typeBuilder)
816821 : FieldWriter{context, std::move (typeBuilder)},
817822 lengthsStream_{context.createNullableContentStreamData <uint32_t >(
818- static_cast <LengthsTypeBuilder&>(*typeBuilder_)
819- . lengthsDescriptor ())},
823+ static_cast <LengthsTypeBuilder&>(*typeBuilder_). lengthsDescriptor (),
824+ type-> id ())},
820825 statisticsCollector_{context.getStatsCollector (type->id ())} {}
821826
822827 void reset () override {
@@ -981,9 +986,11 @@ class SlidingWindowMapFieldWriter : public FieldWriter {
981986 const std::shared_ptr<const velox::dwio::common::TypeWithId>& type)
982987 : FieldWriter{context, context.schemaBuilder ().createSlidingWindowMapTypeBuilder ()},
983988 offsetsStream_{context.createNullableContentStreamData <uint32_t >(
984- typeBuilder_->asSlidingWindowMap ().offsetsDescriptor ())},
989+ typeBuilder_->asSlidingWindowMap ().offsetsDescriptor (),
990+ type->id ())},
985991 lengthsStream_{context.createContentStreamData <uint32_t >(
986- typeBuilder_->asSlidingWindowMap ().lengthsDescriptor ())},
992+ typeBuilder_->asSlidingWindowMap ().lengthsDescriptor (),
993+ type->id ())},
987994 currentOffset_ (0 ),
988995 cached_{false },
989996 cachedLength_{0 },
@@ -1161,9 +1168,11 @@ class FlatMapPassthroughValueFieldWriter {
11611168 FlatMapPassthroughValueFieldWriter (
11621169 FieldWriterContext& context,
11631170 const StreamDescriptorBuilder& inMapDescriptor,
1164- std::unique_ptr<FieldWriter> valueField)
1171+ std::unique_ptr<FieldWriter> valueField,
1172+ uint32_t nodeId)
11651173 : valueField_{std::move (valueField)},
1166- inMapStream_{context.createContentStreamData <bool >(inMapDescriptor)} {}
1174+ inMapStream_{
1175+ context.createContentStreamData <bool >(inMapDescriptor, nodeId)} {}
11671176
11681177 // Write without an explicit inMaps buffer; assume all inMap bits are set.
11691178 void write (const velox::VectorPtr& vector, const OrderedRanges& ranges) {
@@ -1225,9 +1234,11 @@ class FlatMapValueFieldWriter {
12251234 FlatMapValueFieldWriter (
12261235 FieldWriterContext& context,
12271236 const StreamDescriptorBuilder& inMapDescriptor,
1228- std::unique_ptr<FieldWriter> valueField)
1237+ std::unique_ptr<FieldWriter> valueField,
1238+ uint32_t nodeId)
12291239 : valueField_{std::move (valueField)},
1230- inMapStream_{context.createContentStreamData <bool >(inMapDescriptor)} {}
1240+ inMapStream_{
1241+ context.createContentStreamData <bool >(inMapDescriptor, nodeId)} {}
12311242
12321243 // Clear the ranges and extend the inMapBuffer
12331244 void prepare (uint32_t numValues) {
@@ -1312,7 +1323,8 @@ class FlatMapFieldWriter : public FieldWriter {
13121323 valueType_{type->childAt (1 )},
13131324 nodeId_{type->id ()},
13141325 nullsStream_{context_.createNullsStreamData (
1315- typeBuilder_->asFlatMap ().nullsDescriptor ())} {
1326+ typeBuilder_->asFlatMap ().nullsDescriptor (),
1327+ type->id ())} {
13161328 auto statsBuilder = context.getStatsCollector (type->id ());
13171329 // Sanity check that the stats builders are shared and thread safe.
13181330 NIMBLE_CHECK (statsBuilder->isShared ());
@@ -1371,7 +1383,10 @@ class FlatMapFieldWriter : public FieldWriter {
13711383 .insert (
13721384 {key,
13731385 std::make_unique<FlatMapPassthroughValueFieldWriter>(
1374- context_, inMapDescriptor, std::move (fieldWriter))})
1386+ context_,
1387+ inMapDescriptor,
1388+ std::move (fieldWriter),
1389+ nodeId_)})
13751390 .first ;
13761391 return *it->second ;
13771392 }
@@ -1386,12 +1401,15 @@ class FlatMapFieldWriter : public FieldWriter {
13861401 }
13871402
13881403 void collectStatistics (uint64_t nullCount, uint64_t valueCount) {
1404+ LOG (INFO) << " Collecting statistics for flatmap" ;
13891405 if (!statisticsCollector_) {
13901406 return ;
13911407 }
13921408
13931409 statisticsCollector_->addCounts (valueCount, nullCount);
13941410 statisticsCollector_->addLogicalSize (nullCount);
1411+ LOG (INFO) << " New flatmap logical size: "
1412+ << statisticsCollector_->getLogicalSize ();
13951413 }
13961414
13971415 // Collects key statistics for flatmap with string keys (VARCHAR/VARBINARY).
@@ -1820,7 +1838,7 @@ class FlatMapFieldWriter : public FieldWriter {
18201838 context_.handleFlatmapFieldAddEvent (
18211839 *typeBuilder_, stringKey, *valueFieldWriter->typeBuilder ());
18221840 auto flatMapValueField = std::make_unique<FlatMapValueFieldWriter>(
1823- context_, inMapDescriptor, std::move (valueFieldWriter));
1841+ context_, inMapDescriptor, std::move (valueFieldWriter), nodeId_ );
18241842 flatFieldIt =
18251843 allValueFields_.emplace (key, std::move (flatMapValueField)).first ;
18261844 }
@@ -1903,9 +1921,11 @@ class ArrayWithOffsetsFieldWriter : public FieldWriter {
19031921 const std::shared_ptr<const velox::dwio::common::TypeWithId>& type)
19041922 : FieldWriter{context, context.schemaBuilder ().createArrayWithOffsetsTypeBuilder ()},
19051923 offsetsStream_{context.createNullableContentStreamData <uint32_t >(
1906- typeBuilder_->asArrayWithOffsets ().offsetsDescriptor ())},
1924+ typeBuilder_->asArrayWithOffsets ().offsetsDescriptor (),
1925+ type->id ())},
19071926 lengthsStream_{context.createContentStreamData <uint32_t >(
1908- typeBuilder_->asArrayWithOffsets ().lengthsDescriptor ())},
1927+ typeBuilder_->asArrayWithOffsets ().lengthsDescriptor (),
1928+ type->id ())},
19091929 cached_ (false ),
19101930 cachedValue_ (nullptr ),
19111931 cachedSize_ (0 ),
0 commit comments