"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[515],{27623:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=r(83117),n=(r(67294),r(3905));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/tree/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:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"dremio"},"Dremio"),(0,n.kt)("p",null,"The recommended connector library for Dremio is\n",(0,n.kt)("a",{parentName:"p",href:"https://pypi.org/project/sqlalchemy-dremio/"},"sqlalchemy_dremio"),"."),(0,n.kt)("p",null,"The expected connection string for ODBC (Default port is 31010) is formatted as follows:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"dremio://{username}:{password}@{host}:{port}/{database_name}/dremio?SSL=1\n")),(0,n.kt)("p",null,"The expected connection string for Arrow Flight (Dremio 4.9.1+. Default port is 32010) is formatted as follows:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"dremio+flight://{username}:{password}@{host}:{port}/dremio\n")),(0,n.kt)("p",null,"This ",(0,n.kt)("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},3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),l=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return o.createElement(c.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=l(r),u=n,f=d["".concat(c,".").concat(u)]||d[u]||m[u]||a;return r?o.createElement(f,i(i({ref:t},p),{},{components:r})):o.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"}}]);