"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[8172],{15680:(e,t,n)=>{n.d(t,{xA:()=>p,yg:()=>h});var a=n(96540);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},d="mdxType",y={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=l(n),u=r,h=d["".concat(c,".").concat(u)]||d[u]||y[u]||o;return n?a.createElement(h,s(s({ref:t},p),{},{components:n})):a.createElement(h,s({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[d]="string"==typeof e?e:r,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},51628:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>y,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=n(58168),r=(n(96540),n(15680));const o={title:"Amazon Athena",hide_title:!0,sidebar_position:4,version:1},s=void 0,i={unversionedId:"databases/athena",id:"databases/athena",title:"Amazon Athena",description:"AWS Athena",source:"@site/docs/databases/athena.mdx",sourceDirName:"databases",slug:"/databases/athena",permalink:"/docs/databases/athena",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/athena.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Amazon Athena",hide_title:!0,sidebar_position:4,version:1},sidebar:"tutorialSidebar",previous:{title:"Using Database Connection UI",permalink:"/docs/databases/db-connection-ui"},next:{title:"Amazon DynamoDB",permalink:"/docs/databases/dynamodb"}},c={},l=[{value:"AWS Athena",id:"aws-athena",level:2},{value:"PyAthenaJDBC",id:"pyathenajdbc",level:3},{value:"PyAthena",id:"pyathena",level:3}],p={toc:l},d="wrapper";function y(e){let{components:t,...n}=e;return(0,r.yg)(d,(0,a.A)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"aws-athena"},"AWS Athena"),(0,r.yg)("h3",{id:"pyathenajdbc"},"PyAthenaJDBC"),(0,r.yg)("p",null,(0,r.yg)("a",{parentName:"p",href:"https://pypi.org/project/PyAthenaJDBC/"},"PyAthenaJDBC")," is a Python DB 2.0 compliant wrapper for the\n",(0,r.yg)("a",{parentName:"p",href:"https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html"},"Amazon Athena JDBC driver"),"."),(0,r.yg)("p",null,"The connection string for Amazon Athena is as follows:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"awsathena+jdbc://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...\n")),(0,r.yg)("p",null,"Note that you'll need to escape & encode when forming the connection string like so:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"s3://... -> s3%3A//...\n")),(0,r.yg)("h3",{id:"pyathena"},"PyAthena"),(0,r.yg)("p",null,"You can also use the ",(0,r.yg)("a",{parentName:"p",href:"https://pypi.org/project/PyAthena/"},"PyAthena library")," (no Java required) with the\nfollowing connection string:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...\n")),(0,r.yg)("p",null,"The PyAthena library also allows to assume a specific IAM role which you can define by adding following parameters in Superset's Athena database connection UI under ADVANCED --\x3e Other --\x3e ENGINE PARAMETERS."),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'{"connect_args":{"role_arn":"<role arn>"}}\n')))}y.isMDXComponent=!0}}]);