"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[4490],{27547:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=n(83117),a=(n(67294),n(3905));const o={title:"Amazon DynamoDB",hide_title:!0,sidebar_position:4,version:1},s=void 0,i={unversionedId:"databases/dynamodb",id:"databases/dynamodb",title:"Amazon DynamoDB",description:"AWS DynamoDB",source:"@site/docs/databases/dynamodb.mdx",sourceDirName:"databases",slug:"/databases/dynamodb",permalink:"/docs/databases/dynamodb",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/databases/dynamodb.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Amazon DynamoDB",hide_title:!0,sidebar_position:4,version:1},sidebar:"tutorialSidebar",previous:{title:"Amazon Athena",permalink:"/docs/databases/athena"},next:{title:"Apache Doris",permalink:"/docs/databases/doris"}},c={},p=[{value:"AWS DynamoDB",id:"aws-dynamodb",level:2},{value:"PyDynamoDB",id:"pydynamodb",level:3}],d={toc:p},l="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(l,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"aws-dynamodb"},"AWS DynamoDB"),(0,a.kt)("h3",{id:"pydynamodb"},"PyDynamoDB"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://pypi.org/project/PyDynamoDB/"},"PyDynamoDB")," is a Python DB API 2.0 (PEP 249) client for Amazon DynamoDB."),(0,a.kt)("p",null,"The connection string for Amazon DynamoDB is as follows:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"dynamodb://{aws_access_key_id}:{aws_secret_access_key}@dynamodb.{region_name}.amazonaws.com:443?connector=superset\n")),(0,a.kt)("p",null,"To get more documentation, please visit: ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/passren/PyDynamoDB/wiki/5.-Superset"},"PyDynamoDB WIKI"),"."))}m.isMDXComponent=!0},3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var r=n(67294);function a(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 r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}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){a(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,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),l=p(n),y=a,u=l["".concat(c,".").concat(y)]||l[y]||m[y]||o;return n?r.createElement(u,s(s({ref:t},d),{},{components:n})):r.createElement(u,s({ref:t},d))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=y;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[l]="string"==typeof e?e:a,s[1]=i;for(var p=2;p<o;p++)s[p]=n[p];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}y.displayName="MDXCreateElement"}}]);