You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2022/08/30 12:30:52 UTC

[flink] branch master updated: [FLINK-28751][table] Improve the performance of JSON functions with json path (#20397)

This is an automated email from the ASF dual-hosted git repository.

jark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 2220f24925a [FLINK-28751][table] Improve the performance of JSON functions with json path (#20397)
2220f24925a is described below

commit 2220f24925ab5146d5771c3782ed8c0837bb0bc4
Author: Aitozi <yu...@alibaba-inc.com>
AuthorDate: Tue Aug 30 20:30:42 2022 +0800

    [FLINK-28751][table] Improve the performance of JSON functions with json path (#20397)
---
 .../table/runtime/functions/JsonPathCache.java     | 43 ++++++++++++++++++++++
 .../table/runtime/functions/SqlJsonUtils.java      |  5 +++
 2 files changed, 48 insertions(+)

diff --git a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/JsonPathCache.java b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/JsonPathCache.java
new file mode 100644
index 00000000000..097419459c9
--- /dev/null
+++ b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/JsonPathCache.java
@@ -0,0 +1,43 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.flink.table.runtime.functions;
+
+import org.apache.flink.shaded.guava30.com.google.common.cache.CacheBuilder;
+
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.spi.cache.Cache;
+
+/** The default cache for the jsonpath {@link com.jayway.jsonpath.spi.cache.CacheProvider}. */
+public class JsonPathCache implements Cache {
+
+    private static final long DEFAULT_CACHE_MAXIMUM_SIZE = 400;
+
+    private final org.apache.flink.shaded.guava30.com.google.common.cache.Cache<String, JsonPath>
+            jsonPathCache =
+                    CacheBuilder.newBuilder().maximumSize(DEFAULT_CACHE_MAXIMUM_SIZE).build();
+
+    @Override
+    public JsonPath get(String s) {
+        return jsonPathCache.getIfPresent(s);
+    }
+
+    @Override
+    public void put(String s, JsonPath jsonPath) {
+        jsonPathCache.put(s, jsonPath);
+    }
+}
diff --git a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java
index 7602a1946e3..2d7dec14288 100644
--- a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java
+++ b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java
@@ -41,6 +41,7 @@ import com.jayway.jsonpath.DocumentContext;
 import com.jayway.jsonpath.InvalidPathException;
 import com.jayway.jsonpath.JsonPath;
 import com.jayway.jsonpath.Option;
+import com.jayway.jsonpath.spi.cache.CacheProvider;
 import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
 import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
 import com.jayway.jsonpath.spi.mapper.MappingProvider;
@@ -74,6 +75,10 @@ public class SqlJsonUtils {
 
     private SqlJsonUtils() {}
 
+    static {
+        CacheProvider.setCache(new JsonPathCache());
+    }
+
     /** Returns the {@link JsonNodeFactory} for creating nodes. */
     public static JsonNodeFactory getNodeFactory() {
         return MAPPER.getNodeFactory();