diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..97a662d62c5
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Created-By: 13 (Oracle Corporation)
+
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml
new file mode 100644
index 00000000000..54f5296f7e9
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-fields.xml
@@ -0,0 +1,44 @@
+<connection-fields>
+    <field name="authentication" label="Authentication" category="authentication" value-type="selection" default-value="auth-user-pass">
+        <selection-group>
+            <option value="auth-none" label="No authentication"/>
+            <option value="auth-user-pass" label="Username and Password"/>
+            <option value="auth-integrated" label="AWS_SIGV4"/>
+        </selection-group>
+    </field>
+    <field name="server" label="Server" value-type="string" category="endpoint" default-value="localhost">
+    </field>
+    <field name="port" label="Port" value-type="string" category="endpoint" default-value="9200">
+    </field>
+    <field name="username" label="Username" category="authentication" value-type="string">
+        <conditions>
+            <condition field="authentication" value="auth-user-pass"/>
+        </conditions>
+    </field>
+    <field name="password" label="Password" category="authentication" value-type="string" secure="true">
+        <conditions>
+            <condition field="authentication" value="auth-user-pass"/>
+        </conditions>
+    </field>
+    <field name="v-region" label="Region" category="authentication" value-type="string" optional="true">
+        <conditions>
+            <condition field="authentication" value="auth-integrated"/>
+        </conditions>
+    </field>
+    <field name="sslmode" label="Use SSL" value-type="boolean" category="general" default-value="require">
+        <boolean-options>
+            <false-value value=""/>
+            <true-value value="require"/>
+        </boolean-options>
+    </field>
+    <field name="v-trustSelfSigned" label="Trust Self-Signed Certificate" value-type="boolean" category="general" default-value="false">
+        <conditions>
+            <condition field="authentication" value="auth-user-pass"/>
+            <condition field="authentication" value="auth-none"/>
+        </conditions>
+        <boolean-options>
+            <false-value value="false"/>
+            <true-value value="true"/>
+        </boolean-options>
+    </field>
+</connection-fields>
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml
new file mode 100644
index 00000000000..1b3432c3177
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connection-metadata.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<connection-metadata>
+  <database enabled='false' />
+  <schema enabled='false' />
+  <table enabled='true' label="Table" />
+</connection-metadata>
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js
new file mode 100644
index 00000000000..1a16fddaec1
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionBuilder.js
@@ -0,0 +1,28 @@
+(function dsbuilder(attr){
+	var connStr = "jdbc:opensearch://";
+	// Set SSL value in connection string 
+	if (attr[connectionHelper.attributeSSLMode] == "require"){
+		connStr += "https://";
+	} else {
+		connStr += "http://";
+	}
+
+	// Set host information in connection string
+	connStr += attr[connectionHelper.attributeServer] + ":" + attr[connectionHelper.attributePort] + "?";
+
+	// Set authentication values in connection string
+	var authAttrValue = attr[connectionHelper.attributeAuthentication];
+	if (authAttrValue == "auth-none"){
+		connStr += "auth=NONE&trustSelfSigned=" + attr["v-trustSelfSigned"];
+	} else if (authAttrValue == "auth-integrated"){
+		connStr += "auth=AWS_SIGV4";
+		var region = attr["v-region"];
+		if (region){
+			connStr += "&Region=" + region;
+		}
+	} else { //if (authAttrValue == "auth-user-pass"){
+		connStr += "auth=BASIC&user=" + attr[connectionHelper.attributeUsername] + "&password=" + attr[connectionHelper.attributePassword] + "&trustSelfSigned=" + attr["v-trustSelfSigned"];
+	}
+
+	return [connStr];
+})
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr
new file mode 100644
index 00000000000..c51adc002ec
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/connectionResolver.tdr
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<tdr class='opensearch_jdbc'>
+  <connection-resolver>
+    <connection-builder>
+      <script file='connectionBuilder.js'/>
+    </connection-builder>
+    <connection-normalizer>
+      <required-attributes>
+        <default-attributes>
+          <default-attribute name='server'>localhost</default-attribute>
+          <default-attribute name='port'>9200</default-attribute>
+        </default-attributes>
+         <attribute-list>
+          <attr>server</attr>
+          <attr>port</attr>
+          <attr>authentication</attr>
+          <attr>username</attr>
+          <attr>password</attr>
+          <attr>sslmode</attr>
+          <attr>v-region</attr>
+          <attr>v-trustSelfSigned</attr>
+        </attribute-list>
+      </required-attributes>
+    </connection-normalizer>
+  </connection-resolver>
+</tdr>
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd
new file mode 100644
index 00000000000..f33f42444e5
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/dialect.tdd
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="utf-8"?>
+<dialect name='OpenSearchSqlJdbcDialect'
+         class='opensearch_jdbc'
+         base='MySQL41UnicodeDriverDialect'
+         version='18.1'>   
+   <function-map>   
+        <function group='aggregate' name='STDEV' return-type='real'>
+            <formula>STDDEV_SAMP(%1)</formula>
+            <unagg-formula>NULL</unagg-formula>
+            <argument type='real' />
+        </function>
+        <function group='aggregate' name='VAR' return-type='real'>
+            <formula>VAR_SAMP(%1)</formula>
+            <unagg-formula>NULL</unagg-formula>
+            <argument type='real' />
+        </function>
+
+        <function group='cast' name='DATE' return-type='date'>
+            <formula>DATE_FORMAT(%1, &apos;%Y-%m-%d&apos;)</formula>
+            <argument type='str' />
+        </function>
+        <function group='cast' name='STR' return-type='str'>
+            <formula>DATE_FORMAT(%1, &apos;%Y-%m-%d %H:%i:%s&apos;)</formula>
+            <argument type='datetime' />
+        </function>
+        <function group='cast' name='DATETIME' return-type='datetime'>
+            <formula>CAST(%1 AS TIMESTAMP)</formula>
+            <argument type='str' />
+        </function>
+        <function group='cast' name='FLOAT' return-type='real'>
+            <!-- 693961 = TO_DAYS('1900-01-01'), since this represents the date of the Epoch. -->
+            <formula>TO_DAYS(%1) - 693961.0</formula>
+            <argument type='datetime' />
+        </function>
+
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 AND NOT %2 OR NOT %1 AND %2)</formula>
+            <argument type='bool' />
+            <argument type='bool' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 AND %2 = 0 OR NOT %1 AND %2 &lt;&gt; 0)</formula>
+            <argument type='bool' />
+            <argument type='int' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 &lt;&gt; %2)</formula>
+            <argument type='real' />
+            <argument type='real' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 = 0 AND %2 OR %1 &lt;&gt; 0 AND NOT %2)</formula>
+            <argument type='int' />
+            <argument type='bool' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 &lt;&gt; %2)</formula>
+            <argument type='str' />
+            <argument type='str' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 &lt;&gt; %2)</formula>
+            <argument type='datetime' />
+            <argument type='datetime' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(CAST(DATE_FORMAT(DATE(%1), '%Y-%m-%d 00:00:00') AS TIMESTAMP) &lt;&gt; %2)</formula>
+            <argument type='date' />
+            <argument type='datetime' />
+        </function>
+        <function group='operator' name='!=' return-type='bool'>
+            <formula>(%1 &lt;&gt; CAST(DATE_FORMAT(DATE(%2), '%Y-%m-%d 00:00:00') AS TIMESTAMP))</formula>
+            <argument type='datetime' />
+            <argument type='date' />
+        </function>
+        <function group='operator' name='+' return-type='datetime'>
+            <!-- 86400 as it represents seconds in a day -->
+            <formula>DATE_ADD(DATE_ADD(%1, INTERVAL FLOOR(%2) DAY), INTERVAL CAST(86400 * (%2 - FLOOR(%2)) AS INT) SECOND)</formula>
+            <argument type='datetime' />
+            <argument type='real' />
+        </function>
+        <function group='operator' name='-' return-type='int'>
+            <formula>(%1 * -1)</formula>
+            <argument type='int' />
+        </function>
+        <function group='operator' name='-' return-type='real'>
+            <formula>(%1 * -1)</formula>
+            <argument type='real' />
+        </function>
+        <function group='operator' name='-' return-type='datetime'>
+            <!-- 86400 as it represents seconds in a day -->
+            <formula>DATE_SUB(DATE_SUB(%1, INTERVAL FLOOR(%2) DAY), INTERVAL CAST(86400 * (%2 - FLOOR(%2)) AS INT) SECOND)</formula>
+            <argument type='datetime' />
+            <argument type='real' />
+        </function>
+        <function group='operator' name='/' return-type='real'>
+            <formula>CAST(%1 AS DOUBLE) / %2</formula>
+            <argument type='int' />
+            <argument type='int' />
+        </function>
+
+        <function group="numeric" name="COT" return-type="real">
+            <formula>CASE WHEN %1 = 0 THEN NULL ELSE COT(%1) END</formula>
+            <argument type="real" />
+        </function>
+        <function group='numeric' name='DIV' return-type='int'>
+            <formula>CASE WHEN %2 = 0 THEN NULL ELSE ( %1 / %2 ) END</formula>
+            <argument type='int' />
+            <argument type='int' />
+        </function>
+        <function group='numeric' name='DIV' return-type='real'>
+            <formula>CASE WHEN %2 = 0 THEN NULL ELSE ( %1 / %2 ) END</formula>
+            <argument type='real' />
+            <argument type='real' />
+        </function>
+        <function group="numeric" name="LN" return-type="real">
+            <formula>(CASE WHEN %1 &gt; 0 THEN LN(%1) ELSE NULL END)</formula>
+            <argument type="real" />
+        </function>
+        <function group="numeric" name="LOG" return-type="real">
+            <formula>CASE WHEN %1 &gt; 0 THEN LOG10(%1) ELSE NULL END</formula>
+            <argument type="real" />
+        </function>
+        <function group="numeric" name="LOG" return-type="real">
+            <formula>CASE WHEN %1 &gt; 0 AND %2 &gt; 0 AND %2 &lt;&gt; 1 THEN LOG(%2,%1) ELSE NULL END</formula>
+            <argument type="real" />
+            <argument type="real" />
+        </function>
+        <function group='numeric' name='MAX' return-type='int'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &gt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='int' />
+            <argument type='int' />
+        </function>
+        <function group='numeric' name='MAX' return-type='real'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &gt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='real' />
+            <argument type='real' />
+        </function>
+        <function group='numeric' name='MAX' return-type='datetime'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &gt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='datetime' />
+            <argument type='datetime' />
+        </function>
+        <function group='numeric' name='MIN' return-type='int'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &lt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='int' />
+            <argument type='int' />
+        </function>
+        <function group='numeric' name='MIN' return-type='real'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &lt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='real' />
+            <argument type='real' />
+        </function>
+        <function group='numeric' name='MIN' return-type='datetime'>
+            <formula>CASE WHEN ISNULL(%1) THEN NULL
+                WHEN ISNULL(%2) THEN NULL
+	            WHEN %1 &lt; %2 THEN %1
+                ELSE %2 END</formula>
+            <argument type='datetime' />
+            <argument type='datetime' />
+        </function>
+    
+        <function group='date' name='DAYOFYEAR' return-type='int'>
+            <formula>DAY_OF_YEAR(%1)</formula>
+            <argument type='date' />
+        </function>
+        <function group='date' name='DAYOFMONTH' return-type='int'>
+            <formula>DAY_OF_MONTH(%1)</formula>
+            <argument type='date' />
+        </function>
+        <function group='date' name='DAYOFWEEK' return-type='int'>
+            <formula>DAY_OF_WEEK(%1)</formula>
+            <argument type='date' />
+        </function>
+
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,%2)</formula>
+            <argument type='str' />
+            <argument type='int' />
+        </function>
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,CAST(%2 as int))</formula>
+            <argument type='str' />
+            <argument type='real' />
+        </function>
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,%2,%3)</formula>
+            <argument type='str' />
+            <argument type='int' />
+            <argument type='int' />
+        </function>
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,CAST(%2 as int),%3)</formula>
+            <argument type='str' />
+            <argument type='real' />
+            <argument type='int' />
+        </function>
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,%2,CAST(%3 as int))</formula>
+            <argument type='str' />
+            <argument type='int' />
+            <argument type='real' />
+        </function>
+        <function group='string' name='MID' return-type='int'>
+            <formula>SUBSTR(%1,CAST(%2 as int),CAST(%3 as int))</formula>
+            <argument type='str' />
+            <argument type='real' />
+            <argument type='real' />
+        </function>
+
+        <function group='string' name='FIND' return-type='int'>
+<!--        The formula was simplified, because OS returns valid results even if the argument is NULL or <1 -->
+<!--        <formula>(CASE WHEN ISNULL(%3) THEN NULL WHEN %3 &gt;= 1 THEN LOCATE(%2,%1,CAST(%3 as int)) ELSE LOCATE(%2,%1,1) END)</formula>-->
+            <formula>LOCATE(%2,%1,CAST(%3 as int))</formula>
+            <argument type='str' />
+            <argument type='str' />
+            <argument type='real' />
+        </function>
+        <function group='string' name='FIND' return-type='int'>
+            <formula>LOCATE(%2,%1,%3)</formula>
+            <argument type='str' />
+            <argument type='str' />
+            <argument type='int' />
+        </function>
+
+        <date-function name='DATEDIFF' return-type='int'>
+            <formula part='year'>(YEAR(%3) - YEAR(%2))</formula>
+            <formula part='quarter'>((YEAR(%3) - YEAR(%2)) * 4 + (QUARTER(%3) - QUARTER(%2)))</formula>
+            <formula part='month'>((YEAR(%3) - YEAR(%2)) * 12 + (MONTH(%3) - MONTH(%2)))</formula>
+            <formula part='dayofyear'>(TO_DAYS(%3) - TO_DAYS(%2))</formula>
+            <formula part='day'>(TO_DAYS(%3) - TO_DAYS(%2))</formula>
+            <formula part='weekday'>(TO_DAYS(%3) - TO_DAYS(%2))</formula>
+            <formula part='week'>FLOOR(((TO_DAYS(%3) - (DAYOFWEEK(%3) - 1)) - (TO_DAYS(%2) - (DAYOFWEEK(%2) - 1)))/7)</formula>
+            <!-- 3600 as it represents seconds in an hour -->
+            <formula part='hour'>((TO_DAYS(%3) - TO_DAYS(%2)) * 24 + FLOOR(TIME_TO_SEC(%3) / 3600) - FLOOR(TIME_TO_SEC(%2) / 3600))</formula>
+            <!-- 1440 as it represents minutes in a day -->
+            <formula part='minute'>((TO_DAYS(%3) - TO_DAYS(%2)) * 1440 + FLOOR(TIME_TO_SEC(%3) / 60) - FLOOR(TIME_TO_SEC(%2) / 60))</formula>
+            <!-- 86400 as represents seconds in a day -->
+            <formula part='second'>((TO_DAYS(%3) - TO_DAYS(%2)) * 86400 + (TIME_TO_SEC(%3) - TIME_TO_SEC(%2)))</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+            <argument type='datetime' />
+        </date-function>
+        <date-function name='DATEDIFF' return-type='int'>
+            <formula part='week'>FLOOR((( TO_DAYS(%3) - ((7 + DAYOFWEEK(%3) - 2) % 7)) - (TO_DAYS(%2) - ((7 + DAYOFWEEK(%2) - 2) % 7) ) )/7)</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+            <argument type='datetime' />
+            <argument type='localstr' />
+        </date-function>
+        <date-function name='DATENAME' return-type='str'>
+            <formula part='year'>YEAR(%2)</formula>
+            <formula part='quarter'>QUARTER(%2)</formula>
+            <formula part='month'>MONTH(%2)</formula>
+            <formula part='dayofyear'>DAYOFYEAR(%2)</formula>
+            <formula part='day'>DAYOFMONTH(%2)</formula>
+            <formula part='weekday'>DAYNAME(%2)</formula>
+            <formula part='week'>FLOOR((7 + DAYOFYEAR(%2) - 1 + DAYOFWEEK(DATE_FORMAT(%2, '%Y-01-01 00:00:00')) - 1) / 7)</formula>
+            <formula part='hour'>HOUR(%2)</formula>
+            <formula part='minute'>MINUTE(%2)</formula>
+            <formula part='second'>SECOND(%2)</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+        </date-function>
+        <date-function name='DATENAME' return-type='str'>
+            <formula part='week'>FLOOR((7 + DAYOFYEAR(%2) - 1 + ((7 + DAYOFWEEK(DATE_FORMAT(%2, '%Y-01-01 00:00:00')) - 2) % 7) ) / 7)</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+            <argument type='localstr' />
+       </date-function>
+       <date-function name='DATETRUNC' return-type='datetime'>
+            <formula part='year'>DATE_FORMAT( %2, &apos;%Y-01-01 00:00:00&apos; )</formula>
+            <formula part='quarter'>CONCAT(DATE_FORMAT(%2, '%Y-'), CONCAT(CAST((3*(QUARTER(%2)-1)+1) AS STRING), '-01 00:00:00'))</formula>
+            <formula part='month'>DATE_FORMAT( %2, &apos;%Y-%m-01 00:00:00&apos; )</formula>
+            <formula part='dayofyear'>DATE_FORMAT( %2, &apos;%Y-%m-%d 00:00:00&apos; )</formula>
+            <formula part='day'>DATE_FORMAT( %2, &apos;%Y-%m-%d 00:00:00&apos; )</formula>
+            <formula part='weekday'>DATE_FORMAT( %2, &apos;%Y-%m-%d 00:00:00&apos; )</formula>
+            <formula part='week'>FROM_DAYS( TO_DAYS(%2) - (DAYOFWEEK(%2) - 1))</formula>
+            <formula part='hour'>DATE_FORMAT( %2, &apos;%Y-%m-%d %H:00:00&apos; )</formula>
+            <formula part='minute'>DATE_FORMAT( %2, &apos;%Y-%m-%d %H:%i:00&apos; )</formula>
+            <formula part='second'>DATE_FORMAT( %2, &apos;%Y-%m-%d %H:%i:%s&apos; )</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+        </date-function>
+        <date-function name='DATETRUNC' return-type='datetime'>
+            <formula part='week'>FROM_DAYS( TO_DAYS(%2) - ((7 + DAYOFWEEK(%2) - 2) % 7) )</formula>
+            <argument type='localstr' />
+            <argument type='datetime' />
+            <argument type='localstr' />
+        </date-function>
+
+        <remove-function name='FINDNTH'>
+            <argument type='str' />
+            <argument type='str' />
+            <argument type='real' />        
+        </remove-function>
+
+        <remove-function name='DATEPARSE'>
+            <argument type='localstr' />
+            <argument type='str' />
+        </remove-function>
+        <remove-function name='ISDATE'>
+            <argument type='str' />
+        </remove-function>
+
+        <remove-function name='USEC_TO_TIMESTAMP'>
+            <argument type='int' />
+        </remove-function>
+
+        <remove-function name='TIMESTAMP_TO_USEC'>
+            <argument type='datetime' />
+        </remove-function>
+
+        <remove-function name='MAX'>
+            <argument type='str' />
+        </remove-function>
+        <remove-function name='MAX'>
+            <argument type='str' />
+            <argument type='str' />
+        </remove-function>
+
+        <remove-function name='SPACE'>
+            <argument type='int' />
+        </remove-function>
+
+        <remove-function name='MIN'>
+            <argument type='str' />
+        </remove-function>
+        <remove-function name='MIN'>
+            <argument type='str' />
+            <argument type='str' />
+        </remove-function>
+   </function-map>
+</dialect>
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml
new file mode 100644
index 00000000000..20c99b96be0
--- /dev/null
+++ b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/manifest.xml
@@ -0,0 +1,53 @@
+<?xml version='1.0' encoding='utf-8' ?>
+
+<connector-plugin class='opensearch_jdbc' superclass='jdbc' plugin-version='1.1.0.0' name='OpenSearch' version='18.1' min-version-tableau='2021.1'>
+  <vendor-information>
+      <company name="OpenSearch for ES"/>
+      <support-link url="https://github.com/opensearch-project/sql"/>
+  </vendor-information>
+  <connection-customization class="opensearch_jdbc" enabled="true" version="10.0">
+    <vendor name="OpenSearch JDBC"/>
+    <driver name="SQL"/>
+    <customizations>
+      <customization name="CAP_CREATE_TEMP_TABLES" value="no"/>
+      <customization name="CAP_SUPPRESS_DISCOVERY_QUERIES" value="yes" />
+      <customization name="CAP_SELECT_INTO" value="no"/>
+      <customization name="CAP_SELECT_TOP_INTO" value="no"/>
+      <customization name="CAP_QUERY_BOOLEXPR_TO_INTEXPR" value="yes"/>
+      <customization name="CAP_QUERY_GROUP_BY_ALIAS" value="yes"/>
+      <customization name="CAP_QUERY_GROUP_BY_BOOL" value="yes"/>
+      <customization name="CAP_QUERY_GROUP_BY_DEGREE" value="no"/>
+      <customization name="CAP_QUERY_SORT_BY" value="yes"/>
+      <customization name="CAP_QUERY_SUBQUERIES" value="yes"/>
+      <customization name="CAP_QUERY_TOP_N" value="no"/>
+      <customization name="CAP_QUERY_SUPPORT_EMPTY_GROUPBY" value="no"/>
+      <customization name="CAP_QUERY_WHERE_FALSE_METADATA" value="yes"/>
+      <customization name="CAP_QUERY_SUBQUERIES_WITH_TOP" value="yes"/>
+      <customization name="CAP_SUPPORTS_SPLIT_FROM_LEFT" value="yes"/>
+      <customization name="CAP_SUPPORTS_SPLIT_FROM_RIGHT" value="yes"/>
+      <customization name="CAP_QUERY_ALLOW_PARTIAL_AGGREGATION" value="no"/>
+      <customization name="CAP_QUERY_TIME_REQUIRES_CAST" value="yes"/>
+      <customization name="CAP_JDBC_METADATA_USE_RESULTSET_FOR_TABLE" value="yes"/>
+      <customization name="CAP_JDBC_METADATA_GET_INDEX_INFO" value="no"/>
+      <customization name="CAP_JDBC_METADATA_IGNORE_NULLABILITY" value="yes"/>
+      <customization name="CAP_JDBC_METADATA_READ_FOREIGNKEYS" value="no"/>
+      <customization name="CAP_JDBC_METADATA_READ_PRIMARYKEYS" value="no"/>
+      <customization name="CAP_JDBC_SUPPRESS_ENUMERATE_DATABASES" value="yes"/>
+      <customization name="CAP_JDBC_SUPPRESS_ENUMERATE_SCHEMAS" value="yes"/>
+      <!-- OpenSearch SQL can't proceed queries longer than ~1.5k. This setting could help to avoid this limitation. It limits the max length of the string, not of the query. -->
+      <customization name="CAP_JDBC_MAX_STRING_LENGTH_MEDIUM" value="yes"/>
+      <customization name="CAP_CONNECT_STORED_PROCEDURE" value="no"/>
+      <customization name="CAP_SUPPORTS_UNION" value="no"/>
+      <!-- 
+      CAP_SUPPRESS_GET_SERVER_TIME will fix the error while creating extract in tableau.
+      This can be removed when OpenSearch supports query without FROM clause.
+      For smore details: https://community.tableau.com/message/1092123?et=watches.email.thread#1092123
+      -->
+      <customization name="CAP_SUPPRESS_GET_SERVER_TIME" value="yes"/>
+    </customizations>
+  </connection-customization>
+  <connection-fields file="connection-fields.xml" />
+  <connection-metadata file='connection-metadata.xml'/>
+  <connection-resolver file="connectionResolver.tdr"/>
+  <dialect file='dialect.tdd'/>
+</connector-plugin>
diff --git a/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco
new file mode 100644
index 00000000000..590a4ba3885
Binary files /dev/null and b/sql-jdbc/src/TableauConnector/opensearch_sql_jdbc/opensearch_sql_jdbc_dev.taco differ
