You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by "xiangfu0 (via GitHub)" <gi...@apache.org> on 2026/07/30 07:30:46 UTC

[PR] Improve JSON decoder selected-field performance [pinot]

xiangfu0 opened a new pull request, #19127:
URL: https://github.com/apache/pinot/pull/19127

   ## Summary
   
   - stream top-level JSON values directly into `GenericRow` for the default JSON record extractor
   - skip materializing unselected containers while preserving Pinot's existing value conversion and missing-field behavior
   - retain the map-based path for custom record extractors and parsers without direct-row support
   - add decoder-focused JMH coverage for all-field and selected-field workloads
   
   ## Motivation
   
   The existing decoder first materializes every top-level value in a per-row `Map`, then copies selected values into `GenericRow`. For ingestion configurations that select only a subset of a wide JSON payload, this creates avoidable parsing work and allocations.
   
   ## Performance
   
   Focused JMH results for selected fields (`2` warmup iterations, `5` measured iterations, `5s` each, one fork, JDK 25):
   
   | Payload | Throughput | Allocation |
   | --- | ---: | ---: |
   | Small | +54.7% | -47.6% |
   | Medium | +63.5% | -63.3% |
   | Large | +149.7% | -91.1% |
   | Nested selected object | +13.4% | -5.5% |
   
   These numbers measure decoder work rather than end-to-end Pinot ingestion.
   
   To reproduce after packaging `pinot-perf`:
   
   ```bash
   java -Xms2G -Xmx4G \
     -cp 'pinot-perf/target/pinot-perf-pkg/lib/*' \
     org.openjdk.jmh.Main \
     'org.apache.pinot.perf.BenchmarkJsonParsing.(mapThenExtractSelectedFields|directToGenericRowSelectedFields)' \
     -wi 2 -i 5 -f 1 -w 5s -r 5s -prof gc
   ```
   
   ## Compatibility
   
   - Custom `RecordExtractor` implementations continue through the existing map-based path.
   - Text JSON, Smile, CBOR, PostgreSQL JSONB, and auto-detected supported formats use the direct path.
   - Parsers without direct-row support return `false` and retain the existing fallback.
   
   ## Validation
   
   - `JSONMessageDecoderTest`
   - `JSONMessageDecoderBinaryTest`
   - `JSONRecordExtractorTest`
   - 41 tests passed
   - Spotless, Checkstyle, and license format/check passed for `pinot-json` and `pinot-perf`
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


Re: [PR] Improve JSON decoder selected-field performance [pinot]

Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #19127:
URL: https://github.com/apache/pinot/pull/19127#issuecomment-5128871353

   ## [Codecov](https://app.codecov.io/gh/apache/pinot/pull/19127?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :x: Patch coverage is `0%` with `43 lines` in your changes missing coverage. Please review.
   :white_check_mark: Project coverage is 57.02%. Comparing base ([`c500e4f`](https://app.codecov.io/gh/apache/pinot/commit/c500e4f34cfb40c0c76a4547639286f8224f688a?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`a836d99`](https://app.codecov.io/gh/apache/pinot/commit/a836d99dd3a4a2256d96f12de99d0764e04a4c04?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   
   | [Files with missing lines](https://app.codecov.io/gh/apache/pinot/pull/19127?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
   |---|---|---|
   | [.../inputformat/json/format/JacksonPayloadParser.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2Fformat%2FJacksonPayloadParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vZm9ybWF0L0phY2tzb25QYXlsb2FkUGFyc2VyLmphdmE=) | 0.00% | [28 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...format/json/format/PostgresJsonbPayloadParser.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2Fformat%2FPostgresJsonbPayloadParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vZm9ybWF0L1Bvc3RncmVzSnNvbmJQYXlsb2FkUGFyc2VyLmphdmE=) | 0.00% | [6 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...ot/plugin/inputformat/json/JSONMessageDecoder.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2FJSONMessageDecoder.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vSlNPTk1lc3NhZ2VEZWNvZGVyLmphdmE=) | 0.00% | [4 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...putformat/json/format/AutoDetectPayloadParser.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2Fformat%2FAutoDetectPayloadParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vZm9ybWF0L0F1dG9EZXRlY3RQYXlsb2FkUGFyc2VyLmphdmE=) | 0.00% | [2 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...inputformat/json/format/TextJsonPayloadParser.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2Fformat%2FTextJsonPayloadParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vZm9ybWF0L1RleHRKc29uUGF5bG9hZFBhcnNlci5qYXZh) | 0.00% | [2 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...gin/inputformat/json/format/JsonPayloadParser.java](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&filepath=pinot-plugins%2Fpinot-input-format%2Fpinot-json%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fpinot%2Fplugin%2Finputformat%2Fjson%2Fformat%2FJsonPayloadParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cGlub3QtcGx1Z2lucy9waW5vdC1pbnB1dC1mb3JtYXQvcGlub3QtanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcGlub3QvcGx1Z2luL2lucHV0Zm9ybWF0L2pzb24vZm9ybWF0L0pzb25QYXlsb2FkUGFyc2VyLmphdmE=) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/apache/pinot/pull/19127?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   > :exclamation:  There is a different number of reports uploaded between BASE (c500e4f) and HEAD (a836d99). Click for more details.
   > 
   > <details><summary>HEAD has 8 uploads less than BASE</summary>
   >
   >| Flag | BASE (c500e4f) | HEAD (a836d99) |
   >|------|------|------|
   >|unittests|2|1|
   >|java-25|3|1|
   >|temurin|3|1|
   >|unittests2|1|0|
   >|integration|1|0|
   >|integration1|1|0|
   ></details>
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##             master   #19127      +/-   ##
   ============================================
   - Coverage     65.60%   57.02%   -8.59%     
   + Complexity     1423        1    -1422     
   ============================================
     Files          3450     2654     -796     
     Lines        218378   158661   -59717     
     Branches      34670    26013    -8657     
   ============================================
   - Hits         143275    90474   -52801     
   + Misses        63538    60421    -3117     
   + Partials      11565     7766    -3799     
   ```
   
   | [Flag](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [integration](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration1](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [java-25](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.02% <0.00%> (-8.59%)` | :arrow_down: |
   | [temurin](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.02% <0.00%> (-8.59%)` | :arrow_down: |
   | [unittests](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.02% <0.00%> (-8.59%)` | :arrow_down: |
   | [unittests1](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.02% <0.00%> (+0.01%)` | :arrow_up: |
   | [unittests2](https://app.codecov.io/gh/apache/pinot/pull/19127/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
   </details>
   
   [:umbrella: View full report in Codecov by Harness](https://app.codecov.io/gh/apache/pinot/pull/19127?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).   
   :loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


Re: [PR] Improve JSON decoder selected-field performance [pinot]

Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 commented on code in PR #19127:
URL: https://github.com/apache/pinot/pull/19127#discussion_r3686951993


##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JsonPayloadParser.java:
##########
@@ -51,4 +54,16 @@ public interface JsonPayloadParser {
   /// @throws Exception if the region is not valid for this format
   Map<String, Object> parse(byte[] payload, int offset, int length)
       throws Exception;
+
+  /// Parses the payload directly into {@code destination}, avoiding a top-level per-record map when the

Review Comment:
   Updated the Markdown Javadoc to use backticks for `destination`, `null`, `true`, and `false`.



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JsonPayloadParser.java:
##########
@@ -51,4 +54,16 @@ public interface JsonPayloadParser {
   /// @throws Exception if the region is not valid for this format
   Map<String, Object> parse(byte[] payload, int offset, int length)
       throws Exception;
+
+  /// Parses the payload directly into {@code destination}, avoiding a top-level per-record map when the
+  /// implementation supports it.
+  ///
+  /// @param fields fields to populate, or {@code null} to populate every top-level field
+  /// @return {@code true} when the payload was decoded into {@code destination}; {@code false} when the caller
+  ///     should fall back to [#parse]
+  default boolean parseTo(byte[] payload, int offset, int length, @Nullable Set<String> fields,

Review Comment:
   Updated the direct-row overload to `parse(payload, offset, length, destination, fields)`, with nullable `fields` last.



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JacksonPayloadParser.java:
##########
@@ -31,15 +37,71 @@
 /// The [ObjectReader] is immutable and thread-safe, so a single instance is shared across all decode calls.
 abstract class JacksonPayloadParser implements JsonPayloadParser {
 
+  private final ObjectMapper _mapper;

Review Comment:
   Updated text JSON and PostgreSQL JSONB to reuse `JsonUtils.DEFAULT_READER`. Smile and CBOR still require their format-specific Jackson factories. Selected values continue through `JSONRecordExtractor.convert`; the test now asserts oversized integers are materialized as `BigDecimal`.



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java:
##########
@@ -72,6 +74,9 @@ public void init(Map<String, String> props, Set<String> fieldsToRead, String top
     }
     _jsonRecordExtractor = PluginManager.get().createInstance(recordExtractorClass);
     _jsonRecordExtractor.init(fieldsToRead, null);
+    _fieldsToRead = fieldsToRead == null || fieldsToRead.isEmpty() ? null : Set.copyOf(fieldsToRead);

Review Comment:
   Updated to `CollectionUtils.isNotEmpty(fieldsToRead)`.



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java:
##########
@@ -72,6 +74,9 @@ public void init(Map<String, String> props, Set<String> fieldsToRead, String top
     }
     _jsonRecordExtractor = PluginManager.get().createInstance(recordExtractorClass);
     _jsonRecordExtractor.init(fieldsToRead, null);
+    _fieldsToRead = fieldsToRead == null || fieldsToRead.isEmpty() ? null : Set.copyOf(fieldsToRead);
+    // A configured extractor can change conversion semantics, so only bypass Pinot's exact default class.
+    _usesDefaultRecordExtractor = _jsonRecordExtractor.getClass() == JSONRecordExtractor.class;

Review Comment:
   The direct parser bypasses `RecordExtractor.extract()`, so it is only semantically safe for the exact default `JSONRecordExtractor`. A configured extractor or subclass can override extraction behavior; the exact-class guard preserves that behavior through the map fallback. I expanded the code comment, and `testCustomExtractorUsesMapFallback` covers this case.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


Re: [PR] Improve JSON decoder selected-field performance [pinot]

Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 merged PR #19127:
URL: https://github.com/apache/pinot/pull/19127


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


Re: [PR] Improve JSON decoder selected-field performance [pinot]

Posted by "Jackie-Jiang (via GitHub)" <gi...@apache.org>.
Jackie-Jiang commented on code in PR #19127:
URL: https://github.com/apache/pinot/pull/19127#discussion_r3684363353


##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JsonPayloadParser.java:
##########
@@ -51,4 +54,16 @@ public interface JsonPayloadParser {
   /// @throws Exception if the region is not valid for this format
   Map<String, Object> parse(byte[] payload, int offset, int length)
       throws Exception;
+
+  /// Parses the payload directly into {@code destination}, avoiding a top-level per-record map when the
+  /// implementation supports it.
+  ///
+  /// @param fields fields to populate, or {@code null} to populate every top-level field
+  /// @return {@code true} when the payload was decoded into {@code destination}; {@code false} when the caller
+  ///     should fall back to [#parse]
+  default boolean parseTo(byte[] payload, int offset, int length, @Nullable Set<String> fields,

Review Comment:
   (nit) just call it `parse` and put nullable `fields` as the last argument



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JsonPayloadParser.java:
##########
@@ -51,4 +54,16 @@ public interface JsonPayloadParser {
   /// @throws Exception if the region is not valid for this format
   Map<String, Object> parse(byte[] payload, int offset, int length)
       throws Exception;
+
+  /// Parses the payload directly into {@code destination}, avoiding a top-level per-record map when the

Review Comment:
   (minor) Don't use `{@code destination}`, do \`destination\` instead



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java:
##########
@@ -72,6 +74,9 @@ public void init(Map<String, String> props, Set<String> fieldsToRead, String top
     }
     _jsonRecordExtractor = PluginManager.get().createInstance(recordExtractorClass);
     _jsonRecordExtractor.init(fieldsToRead, null);
+    _fieldsToRead = fieldsToRead == null || fieldsToRead.isEmpty() ? null : Set.copyOf(fieldsToRead);

Review Comment:
   (minor) Use `CollectionUtils.isNotEmpty()`



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java:
##########
@@ -72,6 +74,9 @@ public void init(Map<String, String> props, Set<String> fieldsToRead, String top
     }
     _jsonRecordExtractor = PluginManager.get().createInstance(recordExtractorClass);
     _jsonRecordExtractor.init(fieldsToRead, null);
+    _fieldsToRead = fieldsToRead == null || fieldsToRead.isEmpty() ? null : Set.copyOf(fieldsToRead);
+    // A configured extractor can change conversion semantics, so only bypass Pinot's exact default class.
+    _usesDefaultRecordExtractor = _jsonRecordExtractor.getClass() == JSONRecordExtractor.class;

Review Comment:
   Why do we need this check?



##########
pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/format/JacksonPayloadParser.java:
##########
@@ -31,15 +37,71 @@
 /// The [ObjectReader] is immutable and thread-safe, so a single instance is shared across all decode calls.
 abstract class JacksonPayloadParser implements JsonPayloadParser {
 
+  private final ObjectMapper _mapper;

Review Comment:
   Not introduced in this PR, but should we use `JsonUtils` for the parsing? We should already have all utils, and proper handling of big decimal



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org