"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[5112],{95788:(e,r,t)=>{t.d(r,{Iu:()=>l,yg:()=>f});var n=t(11504);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?o(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function c(e,r){if(null==e)return{};var t,n,a=function(e,r){if(null==e)return{};var t,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=n.createContext({}),p=function(e){var r=n.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},l=function(e){var r=p(e.components);return n.createElement(s.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),d=p(t),m=a,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return t?n.createElement(f,i(i({ref:r},l),{},{components:t})):n.createElement(f,i({ref:r},l))}));function f(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=m;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[d]="string"==typeof e?e:a,i[1]=c;for(var p=2;p<o;p++)i[p]=t[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,t)}m.displayName="MDXCreateElement"},9696:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var n=t(86404),a=(t(11504),t(95788));const o={title:"IBM Netezza Performance Server",hide_title:!0,sidebar_position:24,version:1},i=void 0,c={unversionedId:"databases/netezza",id:"databases/netezza",title:"IBM Netezza Performance Server",description:"IBM Netezza Performance Server",source:"@site/docs/databases/netezza.mdx",sourceDirName:"databases",slug:"/databases/netezza",permalink:"/docs/databases/netezza",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/netezza.mdx",tags:[],version:"current",sidebarPosition:24,frontMatter:{title:"IBM Netezza Performance Server",hide_title:!0,sidebar_position:24,version:1},sidebar:"tutorialSidebar",previous:{title:"IBM DB2",permalink:"/docs/databases/ibm-db2"},next:{title:"MySQL",permalink:"/docs/databases/mysql"}},s={},p=[{value:"IBM Netezza Performance Server",id:"ibm-netezza-performance-server",level:2}],l={toc:p},d="wrapper";function u(e){let{components:r,...t}=e;return(0,a.yg)(d,(0,n.c)({},l,t,{components:r,mdxType:"MDXLayout"}),(0,a.yg)("h2",{id:"ibm-netezza-performance-server"},"IBM Netezza Performance Server"),(0,a.yg)("p",null,"The ",(0,a.yg)("a",{parentName:"p",href:"https://pypi.org/project/nzalchemy/"},"nzalchemy")," library provides a\nPython / SQLAlchemy interface to IBM Netezza Performance Server (aka Netezza)."),(0,a.yg)("p",null,"Here's the recommended connection string:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"netezza+nzpy://{username}:{password}@{hostname}:{port}/{database}\n")))}u.isMDXComponent=!0}}]);