"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6264],{95788:(e,t,r)=>{r.d(t,{Iu:()=>p,yg:()=>g});var s=r(11504);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 n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,s)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t){if(null==e)return{};var r,s,a=function(e,t){if(null==e)return{};var r,s,a={},n=Object.keys(e);for(s=0;s<n.length;s++)r=n[s],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s<n.length;s++)r=n[s],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=s.createContext({}),d=function(e){var t=s.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=d(e.components);return s.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return s.createElement(s.Fragment,{},t)}},h=s.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,l=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),c=d(r),h=a,g=c["".concat(l,".").concat(h)]||c[h]||u[h]||n;return r?s.createElement(g,i(i({ref:t},p),{},{components:r})):s.createElement(g,i({ref:t},p))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,i=new Array(n);i[0]=h;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[c]="string"==typeof e?e:a,i[1]=o;for(var d=2;d<n;d++)i[d]=r[d];return s.createElement.apply(null,i)}return s.createElement.apply(null,r)}h.displayName="MDXCreateElement"},80960:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>o,toc:()=>d});var s=r(86404),a=(r(11504),r(95788));const n={title:"Amazon Redshift",hide_title:!0,sidebar_position:5,version:1},i=void 0,o={unversionedId:"databases/redshift",id:"databases/redshift",title:"Amazon Redshift",description:"AWS Redshift",source:"@site/docs/databases/redshift.mdx",sourceDirName:"databases",slug:"/databases/redshift",permalink:"/docs/databases/redshift",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/redshift.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Amazon Redshift",hide_title:!0,sidebar_position:5,version:1},sidebar:"tutorialSidebar",previous:{title:"Apache Doris",permalink:"/docs/databases/doris"},next:{title:"StarRocks",permalink:"/docs/databases/starrocks"}},l={},d=[{value:"AWS Redshift",id:"aws-redshift",level:2},{value:"psycopg2",id:"psycopg2",level:3},{value:"redshift_connector",id:"redshift_connector",level:3},{value:"Using IAM-based credentials with Redshift cluster:",id:"using-iam-based-credentials-with-redshift-cluster",level:4},{value:"Using IAM-based credentials with Redshift serverless:",id:"using-iam-based-credentials-with-redshift-serverless",level:4}],p={toc:d},c="wrapper";function u(e){let{components:t,...r}=e;return(0,a.yg)(c,(0,s.c)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h2",{id:"aws-redshift"},"AWS Redshift"),(0,a.yg)("p",null,"The ",(0,a.yg)("a",{parentName:"p",href:"https://pypi.org/project/sqlalchemy-redshift/"},"sqlalchemy-redshift")," library is the recommended\nway to connect to Redshift through SQLAlchemy."),(0,a.yg)("p",null,"This dialect requires either ",(0,a.yg)("a",{parentName:"p",href:"https://pypi.org/project/redshift-connector/"},"redshift_connector")," or ",(0,a.yg)("a",{parentName:"p",href:"https://pypi.org/project/psycopg2/"},"psycopg2")," to work properly."),(0,a.yg)("p",null,"You'll need to set the following values to form the connection string:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"User Name"),": userName"),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Password"),": DBPassword"),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Database Host"),": AWS Endpoint"),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Database Name"),": Database Name"),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Port"),": default 5439")),(0,a.yg)("h3",{id:"psycopg2"},"psycopg2"),(0,a.yg)("p",null,"Here's what the SQLALCHEMY URI looks like:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>\n")),(0,a.yg)("h3",{id:"redshift_connector"},"redshift_connector"),(0,a.yg)("p",null,"Here's what the SQLALCHEMY URI looks like:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"redshift+redshift_connector://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>\n")),(0,a.yg)("h4",{id:"using-iam-based-credentials-with-redshift-cluster"},"Using IAM-based credentials with Redshift cluster:"),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html"},"Amazon redshift cluster")," also supports generating temporary IAM-based database user credentials."),(0,a.yg)("p",null,"Your superset app's ",(0,a.yg)("a",{parentName:"p",href:"https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-role-permissions.html"},"IAM role should have permissions")," to call the ",(0,a.yg)("inlineCode",{parentName:"p"},"redshift:GetClusterCredentials")," operation."),(0,a.yg)("p",null,"You have to define the following arguments in Superset's redshift database connection UI under ADVANCED --\x3e Others --\x3e ENGINE PARAMETERS."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},'{"connect_args":{"iam":true,"database":"<database>","cluster_identifier":"<cluster_identifier>","db_user":"<db_user>"}}\n')),(0,a.yg)("p",null,"and SQLALCHEMY URI should be set to ",(0,a.yg)("inlineCode",{parentName:"p"},"redshift+redshift_connector://")),(0,a.yg)("h4",{id:"using-iam-based-credentials-with-redshift-serverless"},"Using IAM-based credentials with Redshift serverless:"),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-whatis.html"},"Redshift serverless")," supports connection using IAM roles."),(0,a.yg)("p",null,"Your superset app's IAM role should have ",(0,a.yg)("inlineCode",{parentName:"p"},"redshift-serverless:GetCredentials")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"redshift-serverless:GetWorkgroup")," permissions on Redshift serverless workgroup."),(0,a.yg)("p",null,"You have to define the following arguments in Superset's redshift database connection UI under ADVANCED --\x3e Others --\x3e ENGINE PARAMETERS."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},'{"connect_args":{"iam":true,"is_serverless":true,"serverless_acct_id":"<aws account number>","serverless_work_group":"<redshift work group>","database":"<database>","user":"IAMR:<superset iam role name>"}}\n')))}u.isMDXComponent=!0}}]);