"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[907],{58850:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=n(83117),r=(n(67294),n(3905));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/tree/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 u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"aws-athena"},"AWS Athena"),(0,r.kt)("h3",{id:"pyathenajdbc"},"PyAthenaJDBC"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://pypi.org/project/PyAthenaJDBC/"},"PyAthenaJDBC")," is a Python DB 2.0 compliant wrapper for the\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html"},"Amazon Athena JDBC driver"),"."),(0,r.kt)("p",null,"The connection string for Amazon Athena is as follows:"),(0,r.kt)("pre",null,(0,r.kt)("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.kt)("p",null,"Note that you'll need to escape & encode when forming the connection string like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"s3://... -> s3%3A//...\n")),(0,r.kt)("h3",{id:"pyathena"},"PyAthena"),(0,r.kt)("p",null,"You can also use the ",(0,r.kt)("a",{parentName:"p",href:"https://pypi.org/project/PyAthena/"},"PyAthena library")," (no Java required) with the\nfollowing connection string:"),(0,r.kt)("pre",null,(0,r.kt)("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.kt)("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.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'{"connect_args":{"role_arn":"<role arn>"}}\n')))}u.isMDXComponent=!0},3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);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",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=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),h=r,m=d["".concat(c,".").concat(h)]||d[h]||u[h]||o;return n?a.createElement(m,s(s({ref:t},p),{},{components:n})):a.createElement(m,s({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=h;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)}h.displayName="MDXCreateElement"}}]);