"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[8644],{95788:(e,r,t)=>{t.d(r,{Iu:()=>p,yg:()=>f});var o=t(11504);function n(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 o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function i(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){n(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 s(e,r){if(null==e)return{};var t,o,n=function(e,r){if(null==e)return{};var t,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],r.indexOf(t)>=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var c=o.createContext({}),l=function(e){var r=o.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=l(e.components);return o.createElement(c.Provider,{value:r},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},u=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=l(t),u=n,f=d["".concat(c,".").concat(u)]||d[u]||m[u]||a;return t?o.createElement(f,i(i({ref:r},p),{},{components:t})):o.createElement(f,i({ref:r},p))}));function f(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,i=new Array(a);i[0]=u;var s={};for(var c in r)hasOwnProperty.call(r,c)&&(s[c]=r[c]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var l=2;l<a;l++)i[l]=t[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},84412:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=t(45072),n=(t(11504),t(95788));const a={title:"Dremio",hide_title:!0,sidebar_position:17,version:1},i=void 0,s={unversionedId:"databases/dremio",id:"databases/dremio",title:"Dremio",description:"Dremio",source:"@site/docs/databases/dremio.mdx",sourceDirName:"databases",slug:"/databases/dremio",permalink:"/docs/databases/dremio",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/dremio.mdx",tags:[],version:"current",sidebarPosition:17,frontMatter:{title:"Dremio",hide_title:!0,sidebar_position:17,version:1},sidebar:"tutorialSidebar",previous:{title:"RisingWave",permalink:"/docs/databases/risingwave"},next:{title:"Elasticsearch",permalink:"/docs/databases/elasticsearch"}},c={},l=[{value:"Dremio",id:"dremio",level:2}],p={toc:l},d="wrapper";function m(e){let{components:r,...t}=e;return(0,n.yg)(d,(0,o.c)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,n.yg)("h2",{id:"dremio"},"Dremio"),(0,n.yg)("p",null,"The recommended connector library for Dremio is\n",(0,n.yg)("a",{parentName:"p",href:"https://pypi.org/project/sqlalchemy-dremio/"},"sqlalchemy_dremio"),"."),(0,n.yg)("p",null,"The expected connection string for ODBC (Default port is 31010) is formatted as follows:"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"dremio://{username}:{password}@{host}:{port}/{database_name}/dremio?SSL=1\n")),(0,n.yg)("p",null,"The expected connection string for Arrow Flight (Dremio 4.9.1+. Default port is 32010) is formatted as follows:"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"dremio+flight://{username}:{password}@{host}:{port}/dremio\n")),(0,n.yg)("p",null,"This ",(0,n.yg)("a",{parentName:"p",href:"https://www.dremio.com/tutorials/dremio-apache-superset/"},"blog post by Dremio")," has some\nadditional helpful instructions on connecting Superset to Dremio."))}m.isMDXComponent=!0}}]);