feat: Enhance jsonExtractKey function with depth control and dot notation support#16306
feat: Enhance jsonExtractKey function with depth control and dot notation support#16306xiangfu0 merged 3 commits intoapache:masterfrom
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #16306 +/- ##
============================================
- Coverage 62.90% 56.35% -6.55%
+ Complexity 1386 699 -687
============================================
Files 2867 2320 -547
Lines 163354 128414 -34940
Branches 24952 20473 -4479
============================================
- Hits 102755 72373 -30382
+ Misses 52847 50049 -2798
+ Partials 7752 5992 -1760
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
...c/main/java/org/apache/pinot/core/operator/transform/function/JsonKeysTransformFunction.java
Outdated
Show resolved
Hide resolved
09481e3 to
a9e9fd4
Compare
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Outdated
Show resolved
Hide resolved
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Outdated
Show resolved
Hide resolved
40acef2 to
c6a6b69
Compare
There was a problem hiding this comment.
Pull Request Overview
This PR extends the jsonExtractKey function to support optional parameters for maximum recursion depth and output format (dot notation vs. JsonPath), and adds comprehensive tests to cover these new behaviors.
- Added
maxDepthanddotNotationparsing inJsonExtractKeyTransformFunction - Updated
JsonFunctionsto provide overloaded methods and recursive extraction logic - Expanded unit and integration tests for all new parameter combinations
Reviewed Changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/custom/JsonPathTest.java | New integration tests for depth and dot-notation options |
| pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/JsonExtractScalarTransformFunctionTest.java | Added transform-function tests for jsonExtractKey overloads |
| pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java | Parse and apply optional parameters (maxDepth, dotNotation) |
| pinot-common/src/test/java/org/apache/pinot/common/function/scalar/JsonFunctionsUtilTest.java | New tests for utility methods including edge cases |
| pinot-common/src/test/java/org/apache/pinot/common/function/JsonFunctionsTest.java | Extensive tests for jsonExtractKey API variations |
| pinot-common/src/main/java/org/apache/pinot/sql/parsers/ParserUtils.java | Updated SQL-operand validation for optional parameters |
| pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java | Implemented overloaded jsonExtractKey with parameter parsing, recursive extraction, and dot-notation conversion |
| pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java | Extended operator metadata to allow 2–3 arguments |
Comments suppressed due to low confidence (2)
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java:376
- [nitpick] The PR description says non-positive
maxDepthis unlimited, but zero currently yields an empty result. Clarify this behavior in the javadoc or update the code to treat zero as unlimited.
if (params._maxDepth == 0) {
pinot-common/src/test/java/org/apache/pinot/common/function/scalar/JsonFunctionsUtilTest.java:23
- The test uses
assertNull(...)butassertNullis not statically imported or qualified. Addimport static org.testng.Assert.assertNull;or prefix calls withAssert..
import static org.testng.Assert.assertEquals;
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Outdated
Show resolved
Hide resolved
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/sql/parsers/ParserUtils.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/JsonFunctions.java
Outdated
Show resolved
Hide resolved
pinot-common/src/main/java/org/apache/pinot/sql/parsers/ParserUtils.java
Outdated
Show resolved
Hide resolved
.../java/org/apache/pinot/core/operator/transform/function/JsonExtractKeyTransformFunction.java
Outdated
Show resolved
Hide resolved
e88b12b to
9e7156c
Compare
This PR significantly enhances the jsonExtractKey function by adding advanced parameter support for depth control and output format customization, making JSON key extraction more flexible and performant.
🚀 New Features
Enhanced jsonExtractKey Function
Advanced Parameters
Enhanced Recursive Extraction
📝 Usage Examples
🧪 Comprehensive Testing
New Test Coverage
Test Scenarios
🎯 Benefits