diff --git a/be/src/vec/functions/function_multi_match.h b/be/src/vec/functions/function_multi_match.h
index ba395450a30f6f..7fe1d47b38ade8 100644
--- a/be/src/vec/functions/function_multi_match.h
+++ b/be/src/vec/functions/function_multi_match.h
@@ -45,14 +45,6 @@ class FunctionMultiMatch : public IFunction {
         return std::make_shared<DataTypeUInt8>();
     }
 
-    Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
-
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
-
     Status execute_impl(FunctionContext* /*context*/, Block& block, const ColumnNumbers& arguments,
                         uint32_t result, size_t /*input_rows_count*/) const override;
 
diff --git a/be/src/vec/functions/function_tokenize.h b/be/src/vec/functions/function_tokenize.h
index 4a7cb0dad26214..1b919a8a20a041 100644
--- a/be/src/vec/functions/function_tokenize.h
+++ b/be/src/vec/functions/function_tokenize.h
@@ -70,14 +70,6 @@ class FunctionTokenize : public IFunction {
                       NullMapType* dest_nested_null_map) const;
     Status execute_impl(FunctionContext* /*context*/, Block& block, const ColumnNumbers& arguments,
                         uint32_t result, size_t /*input_rows_count*/) const override;
-
-    Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
-
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
 };
 
 void register_function_tokenize(SimpleFunctionFactory& factory) {
diff --git a/be/src/vec/functions/functions_geo.cpp b/be/src/vec/functions/functions_geo.cpp
index 03b25638de8a5d..6bb513a96dd8ad 100644
--- a/be/src/vec/functions/functions_geo.cpp
+++ b/be/src/vec/functions/functions_geo.cpp
@@ -32,7 +32,6 @@
 #include "vec/common/string_ref.h"
 #include "vec/core/block.h"
 #include "vec/core/column_with_type_and_name.h"
-#include "vec/core/field.h"
 #include "vec/data_types/data_type_nullable.h"
 #include "vec/data_types/data_type_number.h"
 #include "vec/data_types/data_type_string.h"
@@ -41,7 +40,6 @@
 namespace doris::vectorized {
 
 struct StPoint {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_point";
     static const size_t NUM_ARGS = 2;
     using Type = DataTypeString;
@@ -129,7 +127,6 @@ struct StAsWktName {
 
 template <typename FunctionName>
 struct StAsText {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = FunctionName::NAME;
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeString;
@@ -165,7 +162,6 @@ struct StAsText {
 };
 
 struct StX {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_x";
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeFloat64;
@@ -203,7 +199,6 @@ struct StX {
 };
 
 struct StY {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_y";
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeFloat64;
@@ -241,7 +236,6 @@ struct StY {
 };
 
 struct StDistanceSphere {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_distance_sphere";
     static const size_t NUM_ARGS = 4;
     using Type = DataTypeFloat64;
@@ -288,7 +282,6 @@ struct StDistanceSphere {
 };
 
 struct StAngleSphere {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_angle_sphere";
     static const size_t NUM_ARGS = 4;
     using Type = DataTypeFloat64;
@@ -337,7 +330,6 @@ struct StAngleSphere {
 };
 
 struct StAngle {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_angle";
     static const size_t NUM_ARGS = 3;
     using Type = DataTypeFloat64;
@@ -397,7 +389,6 @@ struct StAngle {
 };
 
 struct StAzimuth {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_azimuth";
     static const size_t NUM_ARGS = 2;
     using Type = DataTypeFloat64;
@@ -487,7 +478,6 @@ struct StAzimuth {
 };
 
 struct StAreaSquareMeters {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_area_square_meters";
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeFloat64;
@@ -528,7 +518,6 @@ struct StAreaSquareMeters {
 };
 
 struct StAreaSquareKm {
-    static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_area_square_km";
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeFloat64;
@@ -571,12 +560,10 @@ struct StAreaSquareKm {
 };
 
 struct StCircle {
-    static constexpr auto NEED_CONTEXT = true;
     static constexpr auto NAME = "st_circle";
     static const size_t NUM_ARGS = 3;
     using Type = DataTypeString;
-    static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
-                          size_t result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t result) {
         DCHECK_EQ(arguments.size(), 3);
         auto return_type = block.get_data_type(result);
         auto center_lng =
@@ -616,25 +603,15 @@ struct StCircle {
                                   ColumnNullable::create(std::move(res), std::move(null_map)));
         return Status::OK();
     }
-
-    static Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
-
-    static Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
 };
 
 template <typename Func>
 struct StRelationFunction {
-    static constexpr auto NEED_CONTEXT = true;
     static constexpr auto NAME = Func::NAME;
     static const size_t NUM_ARGS = 2;
     using Type = DataTypeUInt8;
 
-    static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
-                          size_t result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t result) {
         DCHECK_EQ(arguments.size(), 2);
         auto return_type = block.get_data_type(result);
         const auto& [left_column, left_const] =
@@ -707,14 +684,6 @@ struct StRelationFunction {
             loop_do(lhs_value, rhs_value, shapes, res, null_map, row);
         }
     }
-
-    static Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
-
-    static Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
 };
 
 struct StContainsFunc {
@@ -774,12 +743,10 @@ struct StPolygonFromText {
 
 template <typename Impl>
 struct StGeoFromText {
-    static constexpr auto NEED_CONTEXT = true;
     static constexpr auto NAME = Impl::NAME;
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeString;
-    static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
-                          size_t result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t result) {
         DCHECK_EQ(arguments.size(), 1);
         auto return_type = block.get_data_type(result);
         auto& geo = block.get_by_position(arguments[0]).column;
@@ -807,14 +774,6 @@ struct StGeoFromText {
                                   ColumnNullable::create(std::move(res), std::move(null_map)));
         return Status::OK();
     }
-
-    static Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
-
-    static Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
 };
 
 struct StGeometryFromWKB {
@@ -829,12 +788,10 @@ struct StGeomFromWKB {
 
 template <typename Impl>
 struct StGeoFromWkb {
-    static constexpr auto NEED_CONTEXT = true;
     static constexpr auto NAME = Impl::NAME;
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeString;
-    static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
-                          size_t result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t result) {
         DCHECK_EQ(arguments.size(), 1);
         auto return_type = block.get_data_type(result);
         auto& geo = block.get_by_position(arguments[0]).column;
@@ -861,23 +818,13 @@ struct StGeoFromWkb {
                                   ColumnNullable::create(std::move(res), std::move(null_map)));
         return Status::OK();
     }
-
-    static Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
-
-    static Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
 };
 
 struct StAsBinary {
-    static constexpr auto NEED_CONTEXT = true;
     static constexpr auto NAME = "st_asbinary";
     static const size_t NUM_ARGS = 1;
     using Type = DataTypeString;
-    static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
-                          size_t result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t result) {
         DCHECK_EQ(arguments.size(), 1);
         auto return_type = block.get_data_type(result);
         auto res = ColumnString::create();
@@ -910,14 +857,6 @@ struct StAsBinary {
                                   ColumnNullable::create(std::move(res), std::move(null_map)));
         return Status::OK();
     }
-
-    static Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
-
-    static Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) {
-        return Status::OK();
-    }
 };
 
 void register_function_geo(SimpleFunctionFactory& factory) {
diff --git a/be/src/vec/functions/functions_geo.h b/be/src/vec/functions/functions_geo.h
index 92d6bc1b1b0381..437f032abdc69e 100644
--- a/be/src/vec/functions/functions_geo.h
+++ b/be/src/vec/functions/functions_geo.h
@@ -28,7 +28,6 @@
 #include "vec/core/column_numbers.h"
 #include "vec/core/types.h"
 #include "vec/data_types/data_type.h"
-#include "vec/data_types/data_type_string.h"
 #include "vec/functions/function.h"
 
 namespace doris {
@@ -72,27 +71,7 @@ class GeoFunction : public IFunction {
 
     Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
                         uint32_t result, size_t input_rows_count) const override {
-        if constexpr (Impl::NEED_CONTEXT) {
-            return Impl::execute(context, block, arguments, result);
-        } else {
-            return Impl::execute(block, arguments, result);
-        }
-    }
-
-    Status open(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        if constexpr (Impl::NEED_CONTEXT) {
-            return Impl::open(context, scope);
-        } else {
-            return Status::OK();
-        }
-    }
-
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        if constexpr (Impl::NEED_CONTEXT) {
-            return Impl::close(context, scope);
-        } else {
-            return Status::OK();
-        }
+        return Impl::execute(block, arguments, result);
     }
 };
 
diff --git a/be/src/vec/functions/in.h b/be/src/vec/functions/in.h
index 4a588353d58732..84a77f1b2c11c0 100644
--- a/be/src/vec/functions/in.h
+++ b/be/src/vec/functions/in.h
@@ -281,10 +281,6 @@ class FunctionIn : public IFunction {
         return Status::OK();
     }
 
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
-
 private:
     template <typename T>
     static void search_hash_set_check_null(InState* in_state, size_t input_rows_count,
diff --git a/be/src/vec/functions/like.cpp b/be/src/vec/functions/like.cpp
index 09bfc961a2e067..2eac3ce4b3a9e3 100644
--- a/be/src/vec/functions/like.cpp
+++ b/be/src/vec/functions/like.cpp
@@ -545,11 +545,6 @@ Status FunctionLikeBase::execute_impl(FunctionContext* context, Block& block,
     return Status::OK();
 }
 
-Status FunctionLikeBase::close(FunctionContext* context,
-                               FunctionContext::FunctionStateScope scope) {
-    return Status::OK();
-}
-
 Status FunctionLikeBase::execute_substring(const ColumnString::Chars& values,
                                            const ColumnString::Offsets& value_offsets,
                                            ColumnUInt8::Container& result,
diff --git a/be/src/vec/functions/like.h b/be/src/vec/functions/like.h
index fed26718603575..a2aac11e0b751e 100644
--- a/be/src/vec/functions/like.h
+++ b/be/src/vec/functions/like.h
@@ -159,8 +159,6 @@ class FunctionLikeBase : public IFunction {
     Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
                         uint32_t result, size_t /*input_rows_count*/) const override;
 
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override;
-
     friend struct VectorAllpassSearchState;
     friend struct VectorEqualSearchState;
     friend struct VectorSubStringSearchState;
diff --git a/be/src/vec/functions/random.cpp b/be/src/vec/functions/random.cpp
index 9927f1a6dfb40a..78e75303a66181 100644
--- a/be/src/vec/functions/random.cpp
+++ b/be/src/vec/functions/random.cpp
@@ -97,10 +97,6 @@ class Random : public IFunction {
         return _execute_float(context, block, arguments, result, input_rows_count);
     }
 
-    Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override {
-        return Status::OK();
-    }
-
 private:
     static Status _execute_int_range(FunctionContext* context, Block& block,
                                      const ColumnNumbers& arguments, uint32_t result,