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

diwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-spark-connector.git


The following commit(s) were added to refs/heads/master by this push:
     new 8f59bb6  [refractor](connector) Refactor module structure for release 
(#247)
8f59bb6 is described below

commit 8f59bb67954c93d27e2e87a99aaa54fad2625539
Author: gnehil <[email protected]>
AuthorDate: Tue Dec 31 14:20:09 2024 +0800

    [refractor](connector) Refactor module structure for release (#247)
---
 .github/workflows/build-extension.yml              | 28 ++-----
 .github/workflows/run-itcase-12.yml                |  4 +-
 .github/workflows/run-itcase-20.yml                |  4 +-
 spark-doris-connector/build.sh                     | 51 ++++++------
 spark-doris-connector/pom.xml                      | 50 ++++++++----
 .../spark-doris-connector-base/pom.xml             |  3 +-
 .../apache/doris/spark/load/CopyIntoLoader.scala   |  4 +-
 .../apache/doris/spark/util/SchemaConvertors.scala |  2 +-
 .../spark-doris-connector-dist/pom.xml             | 93 ----------------------
 .../spark-doris-connector-it/pom.xml               |  8 +-
 .../apache/doris/spark/sql/DorisReaderITCase.scala |  5 +-
 .../spark-doris-connector-shims/pom.xml            | 52 ------------
 .../spark/catalog/DorisTableCatalogBase.scala      | 28 -------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 24 ------
 .../spark-doris-connector-shims_spark-3.1/pom.xml  | 49 ------------
 .../spark/catalog/DorisTableCatalogBase.scala      | 28 -------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 20 -----
 .../spark/catalog/DorisTableCatalogBase.scala      | 28 -------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 20 -----
 .../spark/catalog/DorisTableCatalogBase.scala      | 26 ------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 20 -----
 .../spark/catalog/DorisTableCatalogBase.scala      | 26 ------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 20 -----
 .../spark-doris-connector-shims_spark-3.5/pom.xml  | 48 -----------
 .../spark/catalog/DorisTableCatalogBase.scala      | 26 ------
 .../apache/doris/spark/read/DorisScanBuilder.scala | 24 ------
 .../doris/spark/sql/sources/DorisDataSource.scala  | 20 -----
 .../pom.xml                                        | 16 ++--
 .../doris/spark/catalog/DorisTableBase.scala}      | 12 +--
 .../spark/catalog/DorisTableCatalogBase.scala}     | 14 ++--
 .../spark/catalog/DorisTableProviderBase.scala}    | 13 +--
 .../doris/spark/read/DorisPartitionReader.scala    |  0
 .../spark/read/DorisPartitionReaderFactory.scala   |  0
 .../org/apache/doris/spark/read/DorisScan.scala    |  0
 .../doris/spark/read/DorisScanBuilderBase.scala}   |  2 +-
 .../org/apache/doris/spark/read/ScanMode.java      |  0
 .../spark/sql/sources/DorisSourceProvider.scala    |  0
 .../apache/doris/spark/write/DorisDataWriter.scala |  0
 .../doris/spark/write/DorisDataWriterFactory.scala |  0
 .../org/apache/doris/spark/write/DorisWrite.scala  |  0
 .../doris/spark/write/DorisWriteBuilder.scala      |  0
 .../pom.xml                                        | 17 ++--
 ...org.apache.spark.sql.sources.DataSourceRegister |  2 +-
 .../apache/doris/spark/catalog/DorisTable.scala}   | 22 +++--
 .../doris/spark/catalog/DorisTableCatalog.scala}   | 10 ++-
 .../apache/doris/spark/read/DorisScanBuilder.scala |  2 +-
 .../doris/spark/sql/sources/DorisDataSource.scala} | 18 ++---
 .../pom.xml                                        | 17 ++--
 ...org.apache.spark.sql.sources.DataSourceRegister |  2 +-
 .../apache/doris/spark/catalog/DorisTable.scala}   | 22 +++--
 .../doris/spark/catalog/DorisTableCatalog.scala}   | 10 ++-
 .../apache/doris/spark/read/DorisScanBuilder.scala |  2 +-
 .../doris/spark/sql/sources/DorisDataSource.scala} | 18 ++---
 .../pom.xml                                        | 17 ++--
 ...org.apache.spark.sql.sources.DataSourceRegister |  2 +-
 .../apache/doris/spark/catalog/DorisTable.scala}   | 21 +++--
 .../doris/spark/catalog/DorisTableCatalog.scala}   | 10 ++-
 .../apache/doris/spark/read/DorisScanBuilder.scala |  2 +-
 .../doris/spark/sql/sources/DorisDataSource.scala} | 17 ++--
 .../pom.xml                                        | 17 ++--
 ...org.apache.spark.sql.sources.DataSourceRegister |  2 +-
 .../apache/doris/spark/catalog/DorisTable.scala}   | 21 +++--
 .../doris/spark/catalog/DorisTableCatalog.scala}   | 10 ++-
 .../apache/doris/spark/read/DorisScanBuilder.scala |  3 +-
 .../doris/spark/sql/sources/DorisDataSource.scala} | 17 ++--
 .../pom.xml                                        | 19 +++--
 ...org.apache.spark.sql.sources.DataSourceRegister |  2 +-
 .../apache/doris/spark/catalog/DorisTable.scala}   | 21 +++--
 .../doris/spark/catalog/DorisTableCatalog.scala}   | 10 ++-
 .../apache/doris/spark/read/DorisScanBuilder.scala |  2 +-
 .../doris/spark/sql/sources/DorisDataSource.scala} | 17 ++--
 71 files changed, 292 insertions(+), 828 deletions(-)

diff --git a/.github/workflows/build-extension.yml 
b/.github/workflows/build-extension.yml
index 7d4acbd..707e311 100644
--- a/.github/workflows/build-extension.yml
+++ b/.github/workflows/build-extension.yml
@@ -44,42 +44,28 @@ jobs:
 
     - name: Build spark connector 2.4 2.11
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-2 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} 
-Pspark-2.4_2.11 -pl spark-doris-connector-spark-2 -am
 
     - name: Build spark connector 2.4 2.12
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Dscala.version=2.12.18 \
-          -Dscala.major.version=2.12 \
-          -Pspark-2 -pl spark-doris-connector-dist -am      
-
-    - name: Build spark connector 3.0
-      run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.0 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} 
-Pspark-2.4_2.12 -pl spark-doris-connector-spark-2 -am   
 
     - name: Build spark connector 3.1
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.1 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} -Pspark-3.1 
-pl spark-doris-connector-spark-3.1 -am
 
     - name: Build spark connector 3.2
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.2 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} -Pspark-3.2 
-pl spark-doris-connector-spark-3.2 -am
 
     - name: Build spark connector 3.3
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.3 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} -Pspark-3.3 
-pl spark-doris-connector-spark-3.3 -am
 
     - name: Build spark connector 3.4
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.4 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} -Pspark-3.4 
-pl spark-doris-connector-spark-3.4 -am
 
     - name: Build spark connector 3.5
       run: |
-        cd spark-doris-connector && mvn clean install ${MVN_OPT} \
-          -Pspark-3,spark-3.5 -pl spark-doris-connector-dist -am
+        cd spark-doris-connector && mvn clean install ${MVN_OPT} -Pspark-3.5 
-pl spark-doris-connector-spark-3.5 -am
diff --git a/.github/workflows/run-itcase-12.yml 
b/.github/workflows/run-itcase-12.yml
index 559f17d..fddcda7 100644
--- a/.github/workflows/run-itcase-12.yml
+++ b/.github/workflows/run-itcase-12.yml
@@ -40,8 +40,8 @@ jobs:
 
     - name: Run ITCases for spark 2
       run: |
-        cd spark-doris-connector && mvn clean test -pl 
spark-doris-connector-it -Pspark-2 -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:1.2.7.1_x86"
+        cd spark-doris-connector && mvn clean test -Pspark-2-it,spark-2.4_2.11 
-pl spark-doris-connector-it -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:1.2.7.1_x86"
 
     - name: Run ITCases for spark 3
       run: |
-        cd spark-doris-connector && mvn clean test -pl 
spark-doris-connector-it -Pspark-3,spark-3.0 -am -DfailIfNoTests=false 
-Dtest="*ITCase" -Dimage="adamlee489/doris:1.2.7.1_x86"
+        cd spark-doris-connector && mvn clean test -Pspark-3-it,spark-3.1 -pl 
spark-doris-connector-it -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:1.2.7.1_x86"
diff --git a/.github/workflows/run-itcase-20.yml 
b/.github/workflows/run-itcase-20.yml
index 7af80ee..d16d810 100644
--- a/.github/workflows/run-itcase-20.yml
+++ b/.github/workflows/run-itcase-20.yml
@@ -40,9 +40,9 @@ jobs:
  
     - name: Run ITCases for spark 2
       run: |
-        cd spark-doris-connector && mvn clean test -pl 
spark-doris-connector-it -Pspark-2 -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:2.0.3"
+        cd spark-doris-connector && mvn clean test -Pspark-2-it,spark-2.4_2.11 
-pl spark-doris-connector-it -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:2.0.3"
 
     - name: Run ITCases for spark 3
       run: |
-        cd spark-doris-connector && mvn clean test -pl 
spark-doris-connector-it -Pspark-3,spark-3.0 -am -DfailIfNoTests=false 
-Dtest="*ITCase" -Dimage="adamlee489/doris:2.0.3"
+        cd spark-doris-connector && mvn clean test -Pspark-3-it,spark-3.1 -pl 
spark-doris-connector-it -am -DfailIfNoTests=false -Dtest="*ITCase" 
-Dimage="adamlee489/doris:2.0.3"
     
\ No newline at end of file
diff --git a/spark-doris-connector/build.sh b/spark-doris-connector/build.sh
index 88ea305..2e953ce 100755
--- a/spark-doris-connector/build.sh
+++ b/spark-doris-connector/build.sh
@@ -142,32 +142,29 @@ selectScala() {
 
 selectSpark() {
   echo 'Spark-Doris-Connector supports multiple versions of spark. Which 
version do you need ?'
-  select spark in "2.4" "3.0" "3.1" "3.2" "3.3" "3.4" "3.5"  "other"
+  select spark in "2.4" "3.1" "3.2" "3.3" "3.4" "3.5"  "other"
   do
     case $spark in
       "2.4")
         return 1
         ;;
-      "3.0")
-        return 2
-        ;;
       "3.1")
-        return 3
+        return 2
         ;;
       "3.2")
-        return 4
+        return 3
         ;;
       "3.3")
-        return 5
+        return 4
         ;;
       "3.4")
-        return 6
+        return 5
         ;;
       "3.5")
-        return 7
+        return 6
         ;;
       "other")
-        return 8
+        return 7
         ;;
     esac
   done
@@ -189,18 +186,16 @@ SparkVer=$?
 if [ ${SparkVer} -eq 1 ]; then
     SPARK_VERSION="2.4.8"
 elif [ ${SparkVer} -eq 2 ]; then
-    SPARK_VERSION="3.0.3"
-elif [ ${SparkVer} -eq 3 ]; then
     SPARK_VERSION="3.1.3"
-elif [ ${SparkVer} -eq 4 ]; then
+elif [ ${SparkVer} -eq 3 ]; then
     SPARK_VERSION="3.2.4"
-elif [ ${SparkVer} -eq 5 ]; then
+elif [ ${SparkVer} -eq 4 ]; then
     SPARK_VERSION="3.3.4"
-elif [ ${SparkVer} -eq 6 ]; then
+elif [ ${SparkVer} -eq 5 ]; then
     SPARK_VERSION="3.4.3"
-elif [ ${SparkVer} -eq 7 ]; then
+elif [ ${SparkVer} -eq 6 ]; then
     SPARK_VERSION="3.5.3"
-elif [ ${SparkVer} -eq 8 ]; then
+elif [ ${SparkVer} -eq 7 ]; then
     # shellcheck disable=SC2162
     read -p 'Which spark version do you need? please input
     :' ver
@@ -223,23 +218,23 @@ echo_g " scala version: ${SCALA_VERSION}, major version: 
${SCALA_MAJOR_VERSION}"
 echo_g " spark version: ${SPARK_VERSION}, major version: 
${SPARK_MAJOR_VERSION}"
 echo_g " build starting..."
 
-SPARK_PRIMARY_VERSION=0
-[ ${SPARK_MAJOR_VERSION} != 0 ] && 
SPARK_PRIMARY_VERSION=${SPARK_MAJOR_VERSION%.*}
+if [[ $SPARK_VERSION =~ ^3.* ]]; then
+  profile_name="spark-${SPARK_MAJOR_VERSION}"
+  module_suffix=${SPARK_MAJOR_VERSION}
+else
+  profile_name="spark-${SPARK_MAJOR_VERSION}_${SCALA_MAJOR_VERSION}"
+  module_suffix="2"
+fi
 
-${MVN_BIN} clean install \
-  -Dspark.version=${SPARK_VERSION} \
-  -Dscala.version=${SCALA_VERSION} \
-  -Dspark.major.version=${SPARK_MAJOR_VERSION} \
-  -Dscala.major.version=${SCALA_MAJOR_VERSION} \
-  -Pspark-${SPARK_PRIMARY_VERSION} -pl spark-doris-connector-dist -am "$@"
+${MVN_BIN} clean install -P"${profile_name}" -am "$@"
 
 EXIT_CODE=$?
 if [ $EXIT_CODE -eq 0 ]; then
   DIST_DIR=${DORIS_HOME}/dist
   [ ! -d "$DIST_DIR" ] && mkdir "$DIST_DIR"
-  dist_jar=$(ls "${ROOT}"/spark-doris-connector-dist/target | grep 
"spark-doris-" | grep -v "sources.jar" | grep -v "original-")
-  rm -rf "${DIST_DIR}"/spark-doris-connector-dist/"${dist_jar}"
-  cp "${ROOT}"/spark-doris-connector-dist/target/"${dist_jar}" "$DIST_DIR"
+  dist_jar=$(ls 
"${ROOT}"/spark-doris-connector-spark-"${module_suffix}"/target | grep 
"spark-doris-" | grep -v "sources.jar" | grep -v "original-")
+  rm -rf 
"${DIST_DIR}"/spark-doris-connector-spark-"${module_suffix}"/"${dist_jar}"
+  cp 
"${ROOT}"/spark-doris-connector-spark-"${module_suffix}"/target/"${dist_jar}" 
"$DIST_DIR"
 
   echo_g "*****************************************************************"
   echo_g "Successfully build Spark-Doris-Connector"
diff --git a/spark-doris-connector/pom.xml b/spark-doris-connector/pom.xml
index 8191ed6..db96187 100644
--- a/spark-doris-connector/pom.xml
+++ b/spark-doris-connector/pom.xml
@@ -41,11 +41,14 @@
     </licenses>
     <modules>
         <module>spark-doris-connector-base</module>
-        <module>spark-doris-connector-shims</module>
-        <module>spark-doris-connector-dist</module>
         <module>spark-doris-connector-spark-2</module>
-        <module>spark-doris-connector-spark-3</module>
         <module>spark-doris-connector-it</module>
+        <module>spark-doris-connector-spark-3-base</module>
+        <module>spark-doris-connector-spark-3.1</module>
+        <module>spark-doris-connector-spark-3.2</module>
+        <module>spark-doris-connector-spark-3.3</module>
+        <module>spark-doris-connector-spark-3.4</module>
+        <module>spark-doris-connector-spark-3.5</module>
     </modules>
 
     <scm>
@@ -92,6 +95,7 @@
         <jmockit.version>1.49</jmockit.version>
         <fe_ut_parallel>1</fe_ut_parallel>
         <argLine>-Xmx512m</argLine>
+        <maven.deploy.skip>true</maven.deploy.skip>
     </properties>
 
     <dependencyManagement>
@@ -108,20 +112,34 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.doris</groupId>
-                <artifactId>spark-doris-connector-spark-3</artifactId>
+                <artifactId>spark-doris-connector-spark-3-base</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.doris</groupId>
-                
<artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
+                <artifactId>spark-doris-connector-spark-3.1</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.doris</groupId>
-                
<artifactId>spark-doris-connector-shims_spark-${spark.major.version}</artifactId>
+                <artifactId>spark-doris-connector-spark-3.2</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.doris</groupId>
+                <artifactId>spark-doris-connector-spark-3.3</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.doris</groupId>
+                <artifactId>spark-doris-connector-spark-3.4</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.doris</groupId>
+                <artifactId>spark-doris-connector-spark-3.5</artifactId>
                 <version>${project.version}</version>
             </dependency>
-
             <dependency>
                 <groupId>org.apache.doris</groupId>
                 <artifactId>thrift-service</artifactId>
@@ -764,7 +782,7 @@
                             <!-->not reuse forked jvm, so that each unit test 
will run in separate jvm. to avoid singleton confict<-->
                             <reuseForks>false</reuseForks>
                             <argLine>
-                                
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
 @{argLine}
+                                
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
 --add-opens=java.base/java.nio=ALL-UNNAMED @{argLine}
                             </argLine>
                         </configuration>
                     </plugin>
@@ -773,22 +791,19 @@
         </profile>
 
         <profile>
-            <id>spark-2</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
+            <id>spark-2.4_2.11</id>
             <properties>
                 <spark.version>2.4.8</spark.version>
                 <spark.major.version>2.4</spark.major.version>
-                <scala.version>2.11.10</scala.version>
+                <scala.version>2.11.12</scala.version>
                 <scala.major.version>2.11</scala.major.version>
             </properties>
         </profile>
         <profile>
-            <id>spark-3.0</id>
+            <id>spark-2.4_2.12</id>
             <properties>
-                <spark.version>3.0.0</spark.version>
-                <spark.major.version>3.0</spark.major.version>
+                <spark.version>2.4.8</spark.version>
+                <spark.major.version>2.4</spark.major.version>
                 <scala.version>2.12.18</scala.version>
                 <scala.major.version>2.12</scala.major.version>
             </properties>
@@ -813,6 +828,9 @@
         </profile>
         <profile>
             <id>spark-3.3</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
             <properties>
                 <spark.version>3.3.0</spark.version>
                 <spark.major.version>3.3</spark.major.version>
diff --git a/spark-doris-connector/spark-doris-connector-base/pom.xml 
b/spark-doris-connector/spark-doris-connector-base/pom.xml
index 4f2f0ef..0e26fc2 100644
--- a/spark-doris-connector/spark-doris-connector-base/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-base/pom.xml
@@ -35,6 +35,7 @@
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.deploy.skip>true</maven.deploy.skip>
     </properties>
 
     <dependencies>
@@ -296,4 +297,4 @@
         </plugins>
     </build>
 
-</project>
\ No newline at end of file
+</project>
diff --git 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/load/CopyIntoLoader.scala
 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/load/CopyIntoLoader.scala
index 3ae5ec6..03a914a 100644
--- 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/load/CopyIntoLoader.scala
+++ 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/load/CopyIntoLoader.scala
@@ -38,7 +38,7 @@ import java.io.{ByteArrayOutputStream, IOException}
 import java.nio.charset.StandardCharsets
 import java.util.zip.GZIPOutputStream
 import java.util.{Base64, Properties, UUID}
-import scala.collection.JavaConverters._
+import scala.collection.JavaConverters.{asJavaIteratorConverter, 
mapAsJavaMapConverter, propertiesAsScalaMapConverter}
 import scala.util.{Failure, Success, Try}
 
 case class CopyIntoResponse(code: Int, msg: String, content: String)
@@ -234,7 +234,7 @@ class CopyIntoLoader(settings: SparkSettings, isStreaming: 
Boolean) extends Load
     }
     props.remove("columns")
     val properties = new Properties()
-    properties.putAll(props.mapValues(_.toString).asJava)
+    props.foreach(p => properties.setProperty(p._1, p._2))
     properties
   }
 
diff --git 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/SchemaConvertors.scala
 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/SchemaConvertors.scala
index 275ad87..f85eb28 100644
--- 
a/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/SchemaConvertors.scala
+++ 
b/spark-doris-connector/spark-doris-connector-base/src/main/scala/org/apache/doris/spark/util/SchemaConvertors.scala
@@ -67,7 +67,7 @@ object SchemaConvertors {
   def convertToSchema(tscanColumnDescs: Seq[TScanColumnDesc]): Schema = {
     val schema = new Schema(tscanColumnDescs.length)
     tscanColumnDescs.foreach(desc => {
-      println(desc.getName + " " + desc.getType.name())
+      // println(desc.getName + " " + desc.getType.name())
       schema.put(new Field(desc.getName, desc.getType.name, "", 0, 0, ""))
     })
     schema
diff --git a/spark-doris-connector/spark-doris-connector-dist/pom.xml 
b/spark-doris-connector/spark-doris-connector-dist/pom.xml
deleted file mode 100644
index 5bda3b5..0000000
--- a/spark-doris-connector/spark-doris-connector-dist/pom.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector</artifactId>
-        <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>spark-doris-connector-dist</artifactId>
-    <packaging>jar</packaging>
-
-    <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <profiles>
-        <profile>
-            <id>spark-2</id>
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.doris</groupId>
-                    <artifactId>spark-doris-connector-spark-2</artifactId>
-                    <version>${project.version}</version>
-                </dependency>
-            </dependencies>
-        </profile>
-        <profile>
-            <id>spark-3</id>
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.doris</groupId>
-                    <artifactId>spark-doris-connector-spark-3</artifactId>
-                    <version>${project.version}</version>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-    <build>
-        
<finalName>spark-doris-connector-${spark.major.version}_${scala.major.version}-${revision}</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>flatten-maven-plugin</artifactId>
-                <version>1.2.5</version>
-                <configuration>
-                    <updatePomFile>true</updatePomFile>
-                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>flatten</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>flatten</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>flatten.clean</id>
-                        <phase>clean</phase>
-                        <goals>
-                            <goal>clean</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/spark-doris-connector/spark-doris-connector-it/pom.xml 
b/spark-doris-connector/spark-doris-connector-it/pom.xml
index 761d5a1..9493c03 100644
--- a/spark-doris-connector/spark-doris-connector-it/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-it/pom.xml
@@ -56,10 +56,12 @@
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-core_${scala.major.version}</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-sql_${scala.major.version}</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.scala-lang</groupId>
@@ -77,7 +79,7 @@
 
     <profiles>
         <profile>
-            <id>spark-2</id>
+            <id>spark-2-it</id>
             <activation>
                 <activeByDefault>true</activeByDefault>
             </activation>
@@ -91,11 +93,11 @@
             </dependencies>
         </profile>
         <profile>
-            <id>spark-3</id>
+            <id>spark-3-it</id>
             <dependencies>
                 <dependency>
                     <groupId>org.apache.doris</groupId>
-                    <artifactId>spark-doris-connector-spark-3</artifactId>
+                    <artifactId>spark-doris-connector-spark-3.1</artifactId>
                     <version>${project.version}</version>
                     <scope>test</scope>
                 </dependency>
diff --git 
a/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
 
b/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
index e2d0e08..a147a7d 100644
--- 
a/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
+++ 
b/spark-doris-connector/spark-doris-connector-it/src/test/java/org/apache/doris/spark/sql/DorisReaderITCase.scala
@@ -37,6 +37,7 @@ class DorisReaderITCase extends DorisTestBase {
 
     val sparkConf: SparkConf = new 
SparkConf().setMaster("local[*]").setAppName("rddSource")
     val sc = new SparkContext(sparkConf)
+    // sc.setLogLevel("DEBUG")
     val dorisSparkRDD = sc.dorisRDD(
       tableIdentifier = Some(DATABASE + "." + TABLE_READ),
       cfg = Some(Map(
@@ -121,7 +122,7 @@ class DorisReaderITCase extends DorisTestBase {
 
   private def compareCollectResult(a1: Array[AnyRef], a2: Array[AnyRef]): 
Boolean = {
     if (a1.length == a2.length) {
-      for (idx <- a1.indices) {
+      for (idx <- 0 until a1.length) {
         if (!a1(idx).isInstanceOf[Array[AnyRef]] || 
!a2(idx).isInstanceOf[Array[AnyRef]]) {
           return false
         }
@@ -130,7 +131,7 @@ class DorisReaderITCase extends DorisTestBase {
         if (arr1.length != arr2.length) {
           return false
         }
-        for (idx2 <- arr1.indices) {
+        for (idx2 <- 0 until arr2.length) {
           if (arr1(idx2) != arr2(idx2)) {
             return false
           }
diff --git a/spark-doris-connector/spark-doris-connector-shims/pom.xml 
b/spark-doris-connector/spark-doris-connector-shims/pom.xml
deleted file mode 100644
index e0f5c0c..0000000
--- a/spark-doris-connector/spark-doris-connector-shims/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector</artifactId>
-        <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <packaging>pom</packaging>
-
-    <artifactId>spark-doris-connector-shims</artifactId>
-
-    <modules>
-        <module>spark-doris-connector-shims_spark-3.0</module>
-        <module>spark-doris-connector-shims_spark-3.1</module>
-        <module>spark-doris-connector-shims_spark-3.2</module>
-        <module>spark-doris-connector-shims_spark-3.3</module>
-        <module>spark-doris-connector-shims_spark-3.4</module>
-        <module>spark-doris-connector-shims_spark-3.5</module>
-        <module>spark-doris-connector-shims_spark-3-base</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.spark</groupId>
-            <artifactId>spark-sql_${scala.major.version}</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 0effe52..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.catalyst.analysis.NoSuchNamespaceException
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  @throws[NoSuchNamespaceException]
-  override def dropNamespace(namespace: Array[String]): Boolean = throw new 
UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index d137bd5..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-// 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.doris.spark.sql.sources
-
-import org.apache.spark.sql.sources.DataSourceRegister
-
-abstract class DorisDataSource extends DataSourceRegister with 
DorisSourceProvider with Serializable {
-  override def shortName(): String = "doris"
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/pom.xml
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/pom.xml
deleted file mode 100644
index 02675f9..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
-        <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <packaging>jar</packaging>
-
-    <artifactId>spark-doris-connector-shims_spark-3.1</artifactId>
-
-    <properties>
-        <spark.version>3.1.3</spark.version>
-        <spark.major.version>3.1</spark.major.version>
-        <scala.version>2.12.18</scala.version>
-        <scala.major.version>2.12</scala.major.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 0effe52..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.catalyst.analysis.NoSuchNamespaceException
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  @throws[NoSuchNamespaceException]
-  override def dropNamespace(namespace: Array[String]): Boolean = throw new 
UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index 782a63d..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.doris.spark.sql.sources
-
-abstract class DorisDataSource extends DorisSourceRegisterTrait with 
DorisSourceProvider with Serializable {}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 0effe52..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.catalyst.analysis.NoSuchNamespaceException
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  @throws[NoSuchNamespaceException]
-  override def dropNamespace(namespace: Array[String]): Boolean = throw new 
UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index 782a63d..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.doris.spark.sql.sources
-
-abstract class DorisDataSource extends DorisSourceRegisterTrait with 
DorisSourceProvider with Serializable {}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 64e1f79..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  def dropNamespace(namespace: Array[String], cascade: Boolean): Boolean = 
throw new UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index 782a63d..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.doris.spark.sql.sources
-
-abstract class DorisDataSource extends DorisSourceRegisterTrait with 
DorisSourceProvider with Serializable {}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 64e1f79..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  def dropNamespace(namespace: Array[String], cascade: Boolean): Boolean = 
throw new UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index 1235f5b..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.doris.spark.sql.sources
-
-abstract class DorisDataSource extends DorisSourceRegisterTrait {}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/pom.xml
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/pom.xml
deleted file mode 100644
index 42d6d7b..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
-        <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <packaging>jar</packaging>
-
-    <artifactId>spark-doris-connector-shims_spark-3.5</artifactId>
-
-    <properties>
-        <spark.version>3.4.3</spark.version>
-        <spark.major.version>3.4</spark.major.version>
-        <scala.version>2.12.18</scala.version>
-        <scala.major.version>2.12</scala.major.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
deleted file mode 100644
index 64e1f79..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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.doris.spark.catalog
-
-import org.apache.spark.sql.connector.catalog.SupportsNamespaces
-
-abstract class DorisTableCatalogBase extends SupportsNamespaces {
-
-  def dropNamespace(namespace: Array[String], cascade: Boolean): Boolean = 
throw new UnsupportedOperationException()
-
-}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
deleted file mode 100644
index 5450bbf..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-// 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.doris.spark.read
-
-import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
-import org.apache.spark.sql.types.StructType
-
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
 
b/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
deleted file mode 100644
index 7bec365..0000000
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.doris.spark.sql.sources
-
-abstract class DorisDataSource extends DorisSourceRegisterTrait {}
\ No newline at end of file
diff --git a/spark-doris-connector/spark-doris-connector-spark-3/pom.xml 
b/spark-doris-connector/spark-doris-connector-spark-3-base/pom.xml
similarity index 79%
rename from spark-doris-connector/spark-doris-connector-spark-3/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3-base/pom.xml
index 4660d90..3d7499d 100644
--- a/spark-doris-connector/spark-doris-connector-spark-3/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3-base/pom.xml
@@ -26,22 +26,26 @@
         <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-spark-3</artifactId>
+    <artifactId>spark-doris-connector-spark-3-base</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.deploy.skip>true</maven.deploy.skip>
+    </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            
<artifactId>spark-doris-connector-shims_spark-${spark.major.version}</artifactId>
-            <version>${project.version}</version>
+            <artifactId>spark-doris-connector-base</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-sql_${scala.major.version}</artifactId>
-            <version>${spark.version}</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableBase.scala
similarity index 85%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableBase.scala
index d9aca8a..4cd5841 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableBase.scala
@@ -19,10 +19,8 @@ package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.client.DorisFrontendClient
 import org.apache.doris.spark.config.{DorisConfig, DorisOptions}
-import org.apache.doris.spark.read.DorisScanBuilder
 import org.apache.doris.spark.rest.models.Schema
 import org.apache.doris.spark.util.SchemaConvertors
-import org.apache.doris.spark.write.DorisWriteBuilder
 import org.apache.spark.sql.connector.catalog.TableCapability._
 import org.apache.spark.sql.connector.catalog.{Identifier, SupportsRead, 
SupportsWrite, Table, TableCapability}
 import org.apache.spark.sql.connector.read.ScanBuilder
@@ -35,7 +33,7 @@ import scala.collection.JavaConverters._
 import scala.language.implicitConversions
 
 
-class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType]) extends Table with SupportsRead with SupportsWrite {
+abstract class DorisTableBase(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]) extends Table with SupportsRead with SupportsWrite {
 
   private lazy val frontend:DorisFrontendClient = new 
DorisFrontendClient(config)
 
@@ -54,12 +52,12 @@ class DorisTable(identifier: Identifier, config: 
DorisConfig, schema: Option[Str
 
   override def newScanBuilder(caseInsensitiveStringMap: 
CaseInsensitiveStringMap): ScanBuilder = {
     config.setProperty(DorisOptions.DORIS_TABLE_IDENTIFIER, name())
-    new DorisScanBuilder(config, schema())
+    createScanBuilder(config, schema())
   }
 
   override def newWriteBuilder(logicalWriteInfo: LogicalWriteInfo): 
WriteBuilder = {
     config.setProperty(DorisOptions.DORIS_TABLE_IDENTIFIER, name())
-    new DorisWriteBuilder(config, logicalWriteInfo.schema())
+    createWriteBuilder(config, logicalWriteInfo.schema())
   }
 
   private implicit def dorisSchemaToStructType(dorisSchema: Schema): 
StructType = {
@@ -68,4 +66,8 @@ class DorisTable(identifier: Identifier, config: DorisConfig, 
schema: Option[Str
     }))
   }
 
+  protected def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder
+
+  protected def createWriteBuilder(config: DorisConfig, schema: StructType): 
WriteBuilder
+
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
similarity index 89%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
index 9ca7f02..2c9ad0f 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalogBase.scala
@@ -20,7 +20,7 @@ package org.apache.doris.spark.catalog
 import org.apache.doris.spark.client.DorisFrontendClient
 import org.apache.doris.spark.config.{DorisConfig, DorisOptions}
 import org.apache.spark.sql.catalyst.analysis.NoSuchNamespaceException
-import org.apache.spark.sql.connector.catalog.{Identifier, NamespaceChange, 
Table, TableCatalog, TableChange}
+import org.apache.spark.sql.connector.catalog.{Identifier, NamespaceChange, 
SupportsNamespaces, Table, TableCatalog, TableChange}
 import org.apache.spark.sql.connector.expressions.Transform
 import org.apache.spark.sql.types.StructType
 import org.apache.spark.sql.util.CaseInsensitiveStringMap
@@ -28,13 +28,13 @@ import org.apache.spark.sql.util.CaseInsensitiveStringMap
 import java.util
 import scala.collection.JavaConverters._
 
-class DorisTableCatalog extends DorisTableCatalogBase with TableCatalog {
+trait DorisTableCatalogBase extends TableCatalog with SupportsNamespaces {
 
-  private var catalogName: Option[String] = None
+  protected var catalogName: Option[String] = None
 
-  private var dorisConfig: DorisConfig = _
+  protected var dorisConfig: DorisConfig = _
 
-  private var frontend: DorisFrontendClient = _
+  protected var frontend: DorisFrontendClient = _
 
   override def name(): String = {
     require(catalogName.nonEmpty, "The Doris table catalog is not initialed")
@@ -54,7 +54,7 @@ class DorisTableCatalog extends DorisTableCatalogBase with 
TableCatalog {
 
   override def loadTable(identifier: Identifier): Table = {
     checkIdentifier(identifier)
-    new DorisTable(identifier, DorisConfig.fromMap((dorisConfig.toMap.asScala +
+    newTableInstance(identifier, 
DorisConfig.fromMap((dorisConfig.toMap.asScala +
       (DorisOptions.DORIS_TABLE_IDENTIFIER.getName -> 
getFullTableName(identifier))).asJava, false), None)
   }
 
@@ -103,4 +103,6 @@ class DorisTableCatalog extends DorisTableCatalogBase with 
TableCatalog {
     (identifier.namespace() :+ identifier.name()).map(item => 
s"""`$item`""").mkString(".")
   }
 
+  def newTableInstance(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType]): Table
+
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSourceV2.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableProviderBase.scala
similarity index 80%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSourceV2.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableProviderBase.scala
index 4fad7ed..a03435d 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSourceV2.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/catalog/DorisTableProviderBase.scala
@@ -15,9 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.sql.sources
+package org.apache.doris.spark.catalog
 
-import org.apache.doris.spark.catalog.DorisTable
 import org.apache.doris.spark.config.{DorisConfig, DorisOptions}
 import org.apache.spark.sql.connector.catalog.{Identifier, Table, 
TableProvider}
 import org.apache.spark.sql.connector.expressions.Transform
@@ -26,9 +25,9 @@ import org.apache.spark.sql.util.CaseInsensitiveStringMap
 
 import java.util
 
-class DorisDataSourceV2 extends DorisDataSource with TableProvider {
+abstract class DorisTableProviderBase extends TableProvider {
 
-  private var t: Table = _
+  protected var t: Table = _
 
   override def inferSchema(options: CaseInsensitiveStringMap): StructType = {
     if (t == null) t = getTable(options)
@@ -41,7 +40,7 @@ class DorisDataSourceV2 extends DorisDataSource with 
TableProvider {
       val dorisConfig = DorisConfig.fromMap(properties, false)
       val tableIdentifier = 
dorisConfig.getValue(DorisOptions.DORIS_TABLE_IDENTIFIER)
       val tableIdentifierArr = tableIdentifier.split("\\.")
-      new DorisTable(Identifier.of(Array[String](tableIdentifierArr(0)), 
tableIdentifierArr(1)), dorisConfig, Some(schema))
+      newTableInstance(Identifier.of(Array[String](tableIdentifierArr(0)), 
tableIdentifierArr(1)), dorisConfig, Some(schema))
     }
   }
 
@@ -51,8 +50,10 @@ class DorisDataSourceV2 extends DorisDataSource with 
TableProvider {
       val dorisConfig = DorisConfig.fromMap(options, false)
       val tableIdentifier = 
dorisConfig.getValue(DorisOptions.DORIS_TABLE_IDENTIFIER)
       val tableIdentifierArr = tableIdentifier.split("\\.")
-      new DorisTable(Identifier.of(Array[String](tableIdentifierArr(0)), 
tableIdentifierArr(1)), dorisConfig, None)
+      newTableInstance(Identifier.of(Array[String](tableIdentifierArr(0)), 
tableIdentifierArr(1)), dorisConfig, None)
     }
   }
 
+  def newTableInstance(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType]): Table;
+
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReader.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReader.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReader.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReader.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReaderFactory.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReaderFactory.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReaderFactory.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisPartitionReaderFactory.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScan.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScan.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScan.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScan.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderTrait.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderBase.scala
similarity index 94%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderTrait.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderBase.scala
index 2a01a6d..a6a97dc 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderTrait.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/DorisScanBuilderBase.scala
@@ -23,7 +23,7 @@ import org.apache.spark.sql.connector.read.{Scan, 
ScanBuilder, SupportsPushDownF
 import org.apache.spark.sql.sources.Filter
 import org.apache.spark.sql.types.StructType
 
-protected[spark] abstract class DorisScanBuilderTrait(config: DorisConfig, 
schema: StructType) extends ScanBuilder
+protected[spark] abstract class DorisScanBuilderBase(config: DorisConfig, 
schema: StructType) extends ScanBuilder
   with SupportsPushDownFilters
   with SupportsPushDownRequiredColumns {
 
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/ScanMode.java
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/ScanMode.java
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/read/ScanMode.java
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/read/ScanMode.java
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/sql/sources/DorisSourceProvider.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/sql/sources/DorisSourceProvider.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/src/main/scala/org/apache/doris/spark/sql/sources/DorisSourceProvider.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/sql/sources/DorisSourceProvider.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisDataWriter.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisDataWriter.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisDataWriter.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisDataWriter.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisDataWriterFactory.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisDataWriterFactory.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisDataWriterFactory.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisDataWriterFactory.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWrite.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisWrite.scala
similarity index 100%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWrite.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisWrite.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
similarity index 100%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3-base/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/pom.xml
 b/spark-doris-connector/spark-doris-connector-spark-3.1/pom.xml
similarity index 77%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3.1/pom.xml
index f010540..2dc1f38 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3.1/pom.xml
@@ -23,17 +23,18 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
+        <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-shims_spark-3.0</artifactId>
+    <artifactId>spark-doris-connector-spark-3.1</artifactId>
 
     <properties>
-        <spark.version>3.0.3</spark.version>
-        <spark.major.version>3.0</spark.major.version>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spark.version>3.1.0</spark.version>
+        <spark.major.version>3.1</spark.major.version>
         <scala.version>2.12.18</scala.version>
         <scala.major.version>2.12</scala.major.version>
     </properties>
@@ -41,13 +42,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
-            <version>${project.version}</version>
+            <artifactId>spark-doris-connector-spark-3-base</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-sql_${scala.major.version}</artifactId>
-            <scope>provided</scope>
         </dependency>
     </dependencies>
 
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 93%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
copy to 
spark-doris-connector/spark-doris-connector-spark-3.1/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
index 4c44d93..986b253 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-org.apache.doris.spark.sql.sources.DorisDataSourceV2
+org.apache.doris.spark.sql.sources.DorisDataSource
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
similarity index 55%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
index 521d06c..49a346a 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
@@ -15,21 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.doris.spark.read.DorisScanBuilder
+import org.apache.doris.spark.write.DorisWriteBuilder
+import org.apache.spark.sql.connector.catalog.Identifier
+import org.apache.spark.sql.connector.read.ScanBuilder
+import org.apache.spark.sql.connector.write.WriteBuilder
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
-
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType])
+  extends DorisTableBase(identifier, config, schema) {
 
+  override def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder = new DorisScanBuilder(config, schema)
+  override protected def createWriteBuilder(config: DorisConfig, schema: 
StructType): WriteBuilder = new DorisWriteBuilder(config, schema)
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
similarity index 67%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
index 5450bbf..ca5b8c7 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
@@ -15,10 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.read
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisTableCatalog extends DorisTableCatalogBase {
+  override def dropNamespace(strings: Array[String]): Boolean = throw new 
UnsupportedOperationException()
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
+}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
similarity index 95%
copy from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
index c6abaac..9e199af 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
@@ -20,4 +20,4 @@ package org.apache.doris.spark.read
 import org.apache.doris.spark.config.DorisConfig
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderBase(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
similarity index 65%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
index 521d06c..102ac92 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.1/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
@@ -15,21 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.sql.sources
 
+import org.apache.doris.spark.catalog.{DorisTable, DorisTableProviderBase}
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
-
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+class DorisDataSource extends DorisTableProviderBase with 
DorisSourceRegisterTrait with DorisSourceProvider with Serializable {
 
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/pom.xml
 b/spark-doris-connector/spark-doris-connector-spark-3.2/pom.xml
similarity index 72%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3.2/pom.xml
index 68ae093..a4d8670 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.2/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3.2/pom.xml
@@ -23,16 +23,17 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
+        <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-shims_spark-3.2</artifactId>
+    <artifactId>spark-doris-connector-spark-3.2</artifactId>
 
     <properties>
-        <spark.version>3.2.4</spark.version>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spark.version>3.2.0</spark.version>
         <spark.major.version>3.2</spark.major.version>
         <scala.version>2.12.18</scala.version>
         <scala.major.version>2.12</scala.major.version>
@@ -41,7 +42,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
+            <artifactId>spark-doris-connector-spark-3-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.spark</groupId>
+            <artifactId>spark-sql_${scala.major.version}</artifactId>
         </dependency>
     </dependencies>
 
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 93%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
copy to 
spark-doris-connector/spark-doris-connector-spark-3.2/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
index 4c44d93..986b253 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-org.apache.doris.spark.sql.sources.DorisDataSourceV2
+org.apache.doris.spark.sql.sources.DorisDataSource
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
similarity index 55%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
index 521d06c..49a346a 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
@@ -15,21 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.doris.spark.read.DorisScanBuilder
+import org.apache.doris.spark.write.DorisWriteBuilder
+import org.apache.spark.sql.connector.catalog.Identifier
+import org.apache.spark.sql.connector.read.ScanBuilder
+import org.apache.spark.sql.connector.write.WriteBuilder
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
-
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType])
+  extends DorisTableBase(identifier, config, schema) {
 
+  override def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder = new DorisScanBuilder(config, schema)
+  override protected def createWriteBuilder(config: DorisConfig, schema: 
StructType): WriteBuilder = new DorisWriteBuilder(config, schema)
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
similarity index 67%
copy from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
index 5450bbf..ca5b8c7 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
@@ -15,10 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.read
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisTableCatalog extends DorisTableCatalogBase {
+  override def dropNamespace(strings: Array[String]): Boolean = throw new 
UnsupportedOperationException()
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
+}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
similarity index 95%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
index c6abaac..9e199af 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.1/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
@@ -20,4 +20,4 @@ package org.apache.doris.spark.read
 import org.apache.doris.spark.config.DorisConfig
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderBase(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
similarity index 65%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
index 521d06c..102ac92 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.2/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
@@ -15,21 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.sql.sources
 
+import org.apache.doris.spark.catalog.{DorisTable, DorisTableProviderBase}
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
-
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+class DorisDataSource extends DorisTableProviderBase with 
DorisSourceRegisterTrait with DorisSourceProvider with Serializable {
 
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/pom.xml
 b/spark-doris-connector/spark-doris-connector-spark-3.3/pom.xml
similarity index 72%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3.3/pom.xml
index a33eb77..ecc71ed 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3.3/pom.xml
@@ -23,16 +23,17 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
+        <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-shims_spark-3.3</artifactId>
+    <artifactId>spark-doris-connector-spark-3.3</artifactId>
 
     <properties>
-        <spark.version>3.3.4</spark.version>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spark.version>3.3.0</spark.version>
         <spark.major.version>3.3</spark.major.version>
         <scala.version>2.12.18</scala.version>
         <scala.major.version>2.12</scala.major.version>
@@ -41,7 +42,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
+            <artifactId>spark-doris-connector-spark-3-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.spark</groupId>
+            <artifactId>spark-sql_${scala.major.version}</artifactId>
         </dependency>
     </dependencies>
 
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 93%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
copy to 
spark-doris-connector/spark-doris-connector-spark-3.3/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
index 4c44d93..986b253 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-org.apache.doris.spark.sql.sources.DorisDataSourceV2
+org.apache.doris.spark.sql.sources.DorisDataSource
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
similarity index 55%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
index 521d06c..be461af 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
@@ -15,21 +15,20 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.doris.spark.read.DorisScanBuilder
+import org.apache.doris.spark.write.DorisWriteBuilder
+import org.apache.spark.sql.connector.catalog.Identifier
+import org.apache.spark.sql.connector.read.ScanBuilder
+import org.apache.spark.sql.connector.write.WriteBuilder
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType])
+  extends DorisTableBase(identifier, config, schema) {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder = new DorisScanBuilder(config, schema)
+  override protected def createWriteBuilder(config: DorisConfig, schema: 
StructType): WriteBuilder = new DorisWriteBuilder(config, schema)
 
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
similarity index 67%
copy from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
index 5450bbf..e3ffcc9 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
@@ -15,10 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.read
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisTableCatalog extends DorisTableCatalogBase {
+  override def dropNamespace(strings: Array[String], b: Boolean): Boolean = 
throw new UnsupportedOperationException()
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
+}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
similarity index 95%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
index c6abaac..9e199af 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.0/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
@@ -20,4 +20,4 @@ package org.apache.doris.spark.read
 import org.apache.doris.spark.config.DorisConfig
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderBase(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
similarity index 66%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
index 521d06c..c00cd24 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.3/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
@@ -15,21 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.sql.sources
 
+import org.apache.doris.spark.catalog.{DorisTable, DorisTableProviderBase}
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisDataSource extends DorisTableProviderBase with 
DorisSourceRegisterTrait with Serializable {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
 
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/pom.xml
 b/spark-doris-connector/spark-doris-connector-spark-3.4/pom.xml
similarity index 72%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3.4/pom.xml
index b06e8bd..eeee285 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3.4/pom.xml
@@ -23,16 +23,17 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
+        <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-shims_spark-3.4</artifactId>
+    <artifactId>spark-doris-connector-spark-3.4</artifactId>
 
     <properties>
-        <spark.version>3.4.3</spark.version>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spark.version>3.4.0</spark.version>
         <spark.major.version>3.4</spark.major.version>
         <scala.version>2.12.18</scala.version>
         <scala.major.version>2.12</scala.major.version>
@@ -41,7 +42,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
+            <artifactId>spark-doris-connector-spark-3-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.spark</groupId>
+            <artifactId>spark-sql_${scala.major.version}</artifactId>
         </dependency>
     </dependencies>
 
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 93%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
copy to 
spark-doris-connector/spark-doris-connector-spark-3.4/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
index 4c44d93..986b253 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-org.apache.doris.spark.sql.sources.DorisDataSourceV2
+org.apache.doris.spark.sql.sources.DorisDataSource
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
similarity index 55%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
index 521d06c..be461af 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
@@ -15,21 +15,20 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.doris.spark.read.DorisScanBuilder
+import org.apache.doris.spark.write.DorisWriteBuilder
+import org.apache.spark.sql.connector.catalog.Identifier
+import org.apache.spark.sql.connector.read.ScanBuilder
+import org.apache.spark.sql.connector.write.WriteBuilder
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType])
+  extends DorisTableBase(identifier, config, schema) {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder = new DorisScanBuilder(config, schema)
+  override protected def createWriteBuilder(config: DorisConfig, schema: 
StructType): WriteBuilder = new DorisWriteBuilder(config, schema)
 
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
similarity index 67%
copy from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
index 5450bbf..e3ffcc9 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
@@ -15,10 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.read
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisTableCatalog extends DorisTableCatalogBase {
+  override def dropNamespace(strings: Array[String], b: Boolean): Boolean = 
throw new UnsupportedOperationException()
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
+}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
similarity index 90%
copy from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
index 5450bbf..9e199af 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
@@ -18,7 +18,6 @@
 package org.apache.doris.spark.read
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderBase(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
similarity index 66%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
index 521d06c..c00cd24 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.4/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
@@ -15,21 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.sql.sources
 
+import org.apache.doris.spark.catalog.{DorisTable, DorisTableProviderBase}
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisDataSource extends DorisTableProviderBase with 
DorisSourceRegisterTrait with Serializable {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
 
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/pom.xml
 b/spark-doris-connector/spark-doris-connector-spark-3.5/pom.xml
similarity index 70%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/pom.xml
rename to spark-doris-connector/spark-doris-connector-spark-3.5/pom.xml
index 59293ed..2f498b4 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3-base/pom.xml
+++ b/spark-doris-connector/spark-doris-connector-spark-3.5/pom.xml
@@ -23,17 +23,18 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.doris</groupId>
-        <artifactId>spark-doris-connector-shims</artifactId>
+        <artifactId>spark-doris-connector</artifactId>
         <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
-    <packaging>jar</packaging>
 
-    <artifactId>spark-doris-connector-shims_spark-3-base</artifactId>
+    <artifactId>spark-doris-connector-spark-3.5</artifactId>
 
     <properties>
-        <spark.version>3.0.3</spark.version>
-        <spark.major.version>3.0</spark.major.version>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spark.version>3.5.0</spark.version>
+        <spark.major.version>3.5</spark.major.version>
         <scala.version>2.12.18</scala.version>
         <scala.major.version>2.12</scala.major.version>
     </properties>
@@ -41,7 +42,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.doris</groupId>
-            <artifactId>spark-doris-connector-base</artifactId>
+            <artifactId>spark-doris-connector-spark-3-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.spark</groupId>
+            <artifactId>spark-sql_${scala.major.version}</artifactId>
         </dependency>
     </dependencies>
 
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 93%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
rename to 
spark-doris-connector/spark-doris-connector-spark-3.5/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
index 4c44d93..986b253 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/resources/services/org.apache.spark.sql.sources.DataSourceRegister
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-org.apache.doris.spark.sql.sources.DorisDataSourceV2
+org.apache.doris.spark.sql.sources.DorisDataSource
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
similarity index 55%
copy from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
copy to 
spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
index 521d06c..be461af 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTable.scala
@@ -15,21 +15,20 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.doris.spark.read.DorisScanBuilder
+import org.apache.doris.spark.write.DorisWriteBuilder
+import org.apache.spark.sql.connector.catalog.Identifier
+import org.apache.spark.sql.connector.read.ScanBuilder
+import org.apache.spark.sql.connector.write.WriteBuilder
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisTable(identifier: Identifier, config: DorisConfig, schema: 
Option[StructType])
+  extends DorisTableBase(identifier, config, schema) {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def createScanBuilder(config: DorisConfig, schema: StructType): 
ScanBuilder = new DorisScanBuilder(config, schema)
+  override protected def createWriteBuilder(config: DorisConfig, schema: 
StructType): WriteBuilder = new DorisWriteBuilder(config, schema)
 
 }
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
similarity index 67%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
index 5450bbf..e3ffcc9 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.3/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/catalog/DorisTableCatalog.scala
@@ -15,10 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.read
+package org.apache.doris.spark.catalog
 
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.doris.spark.read.DorisScanBuilderTrait
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisTableCatalog extends DorisTableCatalogBase {
+  override def dropNamespace(strings: Array[String], b: Boolean): Boolean = 
throw new UnsupportedOperationException()
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
+}
diff --git 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
similarity index 95%
rename from 
spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
index c6abaac..9e199af 100644
--- 
a/spark-doris-connector/spark-doris-connector-shims/spark-doris-connector-shims_spark-3.4/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/read/DorisScanBuilder.scala
@@ -20,4 +20,4 @@ package org.apache.doris.spark.read
 import org.apache.doris.spark.config.DorisConfig
 import org.apache.spark.sql.types.StructType
 
-class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderTrait(config, schema) {}
+class DorisScanBuilder(config: DorisConfig, schema: StructType) extends 
DorisScanBuilderBase(config, schema) {}
diff --git 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
similarity index 66%
rename from 
spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
rename to 
spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
index 521d06c..c00cd24 100644
--- 
a/spark-doris-connector/spark-doris-connector-spark-3/src/main/scala/org/apache/doris/spark/write/DorisWriteBuilder.scala
+++ 
b/spark-doris-connector/spark-doris-connector-spark-3.5/src/main/scala/org/apache/doris/spark/sql/sources/DorisDataSource.scala
@@ -15,21 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.spark.write
+package org.apache.doris.spark.sql.sources
 
+import org.apache.doris.spark.catalog.{DorisTable, DorisTableProviderBase}
 import org.apache.doris.spark.config.DorisConfig
-import org.apache.spark.sql.connector.write.streaming.StreamingWrite
-import org.apache.spark.sql.connector.write.{BatchWrite, WriteBuilder}
+import org.apache.spark.sql.connector.catalog.{Identifier, Table}
 import org.apache.spark.sql.types.StructType
 
-class DorisWriteBuilder(config: DorisConfig, schema: StructType) extends 
WriteBuilder {
+class DorisDataSource extends DorisTableProviderBase with 
DorisSourceRegisterTrait with Serializable {
 
-  override def buildForBatch(): BatchWrite = {
-    new DorisWrite(config, schema)
-  }
-
-  override def buildForStreaming(): StreamingWrite = {
-    new DorisWrite(config, schema)
-  }
+  override def newTableInstance(identifier: Identifier, config: DorisConfig, 
schema: Option[StructType]): Table =
+    new DorisTable(identifier, config, schema)
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to