"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6452],{95788:(e,t,r)=>{r.d(t,{Iu:()=>p,yg:()=>y});var o=r(11504);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 s(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 l(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 i=o.createContext({}),c=function(e){var t=o.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(i.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,y=u["".concat(i,".").concat(d)]||u[d]||g[d]||a;return r?o.createElement(y,s(s({ref:t},p),{},{components:r})):o.createElement(y,s({ref:t},p))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:n,s[1]=l;for(var c=2;c<a;c++)s[c]=r[c];return o.createElement.apply(null,s)}return o.createElement.apply(null,r)}d.displayName="MDXCreateElement"},84544:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>g,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=r(45072),n=(r(11504),r(95788));const a={title:"Hologres",hide_title:!0,sidebar_position:33,version:1},s=void 0,l={unversionedId:"databases/hologres",id:"databases/hologres",title:"Hologres",description:"Hologres",source:"@site/docs/databases/hologres.mdx",sourceDirName:"databases",slug:"/databases/hologres",permalink:"/docs/databases/hologres",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/hologres.mdx",tags:[],version:"current",sidebarPosition:33,frontMatter:{title:"Hologres",hide_title:!0,sidebar_position:33,version:1},sidebar:"tutorialSidebar",previous:{title:"Vertica",permalink:"/docs/databases/vertica"},next:{title:"Trino",permalink:"/docs/databases/trino"}},i={},c=[{value:"Hologres",id:"hologres",level:2}],p={toc:c},u="wrapper";function g(e){let{components:t,...r}=e;return(0,n.yg)(u,(0,o.c)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("h2",{id:"hologres"},"Hologres"),(0,n.yg)("p",null,"Hologres is a real-time interactive analytics service developed by Alibaba Cloud. It is fully compatible with PostgreSQL 11 and integrates seamlessly with the big data ecosystem."),(0,n.yg)("p",null,"Hologres sample connection parameters:"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("strong",{parentName:"li"},"User Name"),": The AccessKey ID of your Alibaba Cloud account."),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("strong",{parentName:"li"},"Password"),": The AccessKey secret of your Alibaba Cloud account."),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("strong",{parentName:"li"},"Database Host"),": The public endpoint of the Hologres instance."),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("strong",{parentName:"li"},"Database Name"),": The name of the Hologres database."),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("strong",{parentName:"li"},"Port"),": The port number of the Hologres instance.")),(0,n.yg)("p",null,"The connection string looks like:"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}\n")))}g.isMDXComponent=!0}}]);