"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9039],{67373:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var n=r(83117),a=(r(67294),r(3905));const o={title:"Databend",hide_title:!0,sidebar_position:39,version:1},s=void 0,d={unversionedId:"databases/databend",id:"databases/databend",title:"Databend",description:"Databend",source:"@site/docs/databases/databend.mdx",sourceDirName:"databases",slug:"/databases/databend",permalink:"/docs/databases/databend",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/databases/databend.mdx",tags:[],version:"current",sidebarPosition:39,frontMatter:{title:"Databend",hide_title:!0,sidebar_position:39,version:1},sidebar:"tutorialSidebar",previous:{title:"YugabyteDB",permalink:"/docs/databases/yugabytedb"},next:{title:"Firebolt",permalink:"/docs/databases/firebolt"}},i={},c=[{value:"Databend",id:"databend",level:2}],l={toc:c},p="wrapper";function b(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"databend"},"Databend"),(0,a.kt)("p",null,"The recommended connector library for Databend is ",(0,a.kt)("a",{parentName:"p",href:"https://pypi.org/project/databend-sqlalchemy/"},"databend-sqlalchemy"),".\nSuperset has been tested on ",(0,a.kt)("inlineCode",{parentName:"p"},"databend-sqlalchemy>=0.2.3"),"."),(0,a.kt)("p",null,"The recommended connection string is:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"databend://{username}:{password}@{host}:{port}/{database_name}\n")),(0,a.kt)("p",null,"Here's a connection string example of Superset connecting to a Databend database:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"databend://user:password@localhost:8000/default?secure=false\n")))}b.isMDXComponent=!0},3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(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 s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function d(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},l=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,l=d(e,["components","mdxType","originalType","parentName"]),p=c(r),u=a,f=p["".concat(i,".").concat(u)]||p[u]||b[u]||o;return r?n.createElement(f,s(s({ref:t},l),{},{components:r})):n.createElement(f,s({ref:t},l))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=u;var d={};for(var i in t)hasOwnProperty.call(t,i)&&(d[i]=t[i]);d.originalType=e,d[p]="string"==typeof e?e:a,s[1]=d;for(var c=2;c<o;c++)s[c]=r[c];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"}}]);