"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[5336],{95788:(e,r,t)=>{t.d(r,{Iu:()=>d,yg:()=>y});var n=t(11504);function l(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?a(Object(t),!0).forEach((function(r){l(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,n,l=function(e,r){if(null==e)return{};var t,n,l={},a=Object.keys(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||(l[t]=e[t]);return l}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var c=n.createContext({}),s=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):o(o({},r),e)),t},d=function(e){var r=s(e.components);return n.createElement(c.Provider,{value:r},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},h=n.forwardRef((function(e,r){var t=e.components,l=e.mdxType,a=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=s(t),h=l,y=p["".concat(c,".").concat(h)]||p[h]||u[h]||a;return t?n.createElement(y,o(o({ref:r},d),{},{components:t})):n.createElement(y,o({ref:r},d))}));function y(e,r){var t=arguments,l=r&&r.mdxType;if("string"==typeof e||l){var a=t.length,o=new Array(a);o[0]=h;var i={};for(var c in r)hasOwnProperty.call(r,c)&&(i[c]=r[c]);i.originalType=e,i[p]="string"==typeof e?e:l,o[1]=i;for(var s=2;s<a;s++)o[s]=t[s];return n.createElement.apply(null,o)}return n.createElement.apply(null,t)}h.displayName="MDXCreateElement"},84812:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=t(45072),l=(t(11504),t(95788));const a={title:"Apache Drill",hide_title:!0,sidebar_position:6,version:1},o=void 0,i={unversionedId:"databases/drill",id:"databases/drill",title:"Apache Drill",description:"Apache Drill",source:"@site/docs/databases/drill.mdx",sourceDirName:"databases",slug:"/databases/drill",permalink:"/docs/databases/drill",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/drill.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Apache Drill",hide_title:!0,sidebar_position:6,version:1},sidebar:"tutorialSidebar",previous:{title:"StarRocks",permalink:"/docs/databases/starrocks"},next:{title:"Apache Druid",permalink:"/docs/databases/druid"}},c={},s=[{value:"Apache Drill",id:"apache-drill",level:2},{value:"SQLAlchemy",id:"sqlalchemy",level:3},{value:"JDBC",id:"jdbc",level:3},{value:"ODBC",id:"odbc",level:3}],d={toc:s},p="wrapper";function u(e){let{components:r,...t}=e;return(0,l.yg)(p,(0,n.c)({},d,t,{components:r,mdxType:"MDXLayout"}),(0,l.yg)("h2",{id:"apache-drill"},"Apache Drill"),(0,l.yg)("h3",{id:"sqlalchemy"},"SQLAlchemy"),(0,l.yg)("p",null,"The recommended way to connect to Apache Drill is through SQLAlchemy. You can use the\n",(0,l.yg)("a",{parentName:"p",href:"https://github.com/JohnOmernik/sqlalchemy-drill"},"sqlalchemy-drill")," package."),(0,l.yg)("p",null,"Once that is done, you can connect to Drill in two ways, either via the REST interface or by JDBC.\nIf you are connecting via JDBC, you must have the Drill JDBC Driver installed."),(0,l.yg)("p",null,"The basic connection string for Drill looks like this:"),(0,l.yg)("pre",null,(0,l.yg)("code",{parentName:"pre"},"drill+sadrill://<username>:<password>@<host>:<port>/<storage_plugin>?use_ssl=True\n")),(0,l.yg)("p",null,"To connect to Drill running on a local machine running in embedded mode you can use the following\nconnection string:"),(0,l.yg)("pre",null,(0,l.yg)("code",{parentName:"pre"},"drill+sadrill://localhost:8047/dfs?use_ssl=False\n")),(0,l.yg)("h3",{id:"jdbc"},"JDBC"),(0,l.yg)("p",null,"Connecting to Drill through JDBC is more complicated and we recommend following\n",(0,l.yg)("a",{parentName:"p",href:"https://drill.apache.org/docs/using-the-jdbc-driver/"},"this tutorial"),"."),(0,l.yg)("p",null,"The connection string looks like:"),(0,l.yg)("pre",null,(0,l.yg)("code",{parentName:"pre"},"drill+jdbc://<username>:<password>@<host>:<port>\n")),(0,l.yg)("h3",{id:"odbc"},"ODBC"),(0,l.yg)("p",null,"We recommend reading the\n",(0,l.yg)("a",{parentName:"p",href:"https://drill.apache.org/docs/installing-the-driver-on-linux/"},"Apache Drill documentation")," and read\nthe ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/JohnOmernik/sqlalchemy-drill#usage-with-odbc"},"GitHub README")," to learn how to\nwork with Drill through ODBC."))}u.isMDXComponent=!0}}]);