"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1313],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>y});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),p=u(r),f=o,y=p["".concat(l,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(y,a(a({ref:t},s),{},{components:r})):n.createElement(y,a({ref:t},s))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:o,a[1]=c;for(var u=2;u<i;u++)a[u]=r[u];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},36043:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>y,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var n=r(87462),o=r(63366),i=(r(67294),r(3905)),a=["components"],c={id:"tutorial-jdbc",title:"Use the JDBC driver to query Druid",sidebar_label:"JDBC connector"},l=void 0,u={unversionedId:"tutorials/tutorial-jdbc",id:"tutorials/tutorial-jdbc",title:"Use the JDBC driver to query Druid",description:"\x3c!--",source:"@site/docs/28.0.0/tutorials/tutorial-jdbc.md",sourceDirName:"tutorials",slug:"/tutorials/tutorial-jdbc",permalink:"/docs/28.0.0/tutorials/tutorial-jdbc",draft:!1,tags:[],version:"current",frontMatter:{id:"tutorial-jdbc",title:"Use the JDBC driver to query Druid",sidebar_label:"JDBC connector"},sidebar:"docs",previous:{title:"Docker for tutorials",permalink:"/docs/28.0.0/tutorials/tutorial-jupyter-docker"},next:{title:"Design",permalink:"/docs/28.0.0/design/architecture"}},s={},p=[],d={toc:p},f="wrapper";function y(e){var t=e.components,r=(0,o.Z)(e,a);return(0,i.kt)(f,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Redirecting you to the JDBC driver API..."),(0,i.kt)("head",null,(0,i.kt)("script",null,'window.location.replace("https://druid.apache.org/docs/latest/api-reference/sql-jdbc.html")')),(0,i.kt)("a",{href:"https://druid.apache.org/docs/latest/api-reference/sql-jdbc.html"},"Click here if you are not redirected."))}y.isMDXComponent=!0}}]);