"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[8396],{95788:(e,t,n)=>{n.d(t,{Iu:()=>p,yg:()=>f});var r=n(11504);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 l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={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,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(n),y=a,f=u["".concat(l,".").concat(y)]||u[y]||d[y]||o;return n?r.createElement(f,s(s({ref:t},p),{},{components:n})):r.createElement(f,s({ref:t},p))}));function f(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 l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:a,s[1]=i;for(var c=2;c<o;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}y.displayName="MDXCreateElement"},81408:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(45072),a=(n(11504),n(95788));const o={title:"Snowflake",hide_title:!0,sidebar_position:29,version:1},s=void 0,i={unversionedId:"databases/snowflake",id:"databases/snowflake",title:"Snowflake",description:"Snowflake",source:"@site/docs/databases/snowflake.mdx",sourceDirName:"databases",slug:"/databases/snowflake",permalink:"/docs/databases/snowflake",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/snowflake.mdx",tags:[],version:"current",sidebarPosition:29,frontMatter:{title:"Snowflake",hide_title:!0,sidebar_position:29,version:1},sidebar:"tutorialSidebar",previous:{title:"Presto",permalink:"/docs/databases/presto"},next:{title:"Microsoft SQL Server",permalink:"/docs/databases/sql-server"}},l={},c=[{value:"Snowflake",id:"snowflake",level:2},{value:"Install Snowflake Driver",id:"install-snowflake-driver",level:3}],p={toc:c},u="wrapper";function d(e){let{components:t,...n}=e;return(0,a.yg)(u,(0,r.c)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h2",{id:"snowflake"},"Snowflake"),(0,a.yg)("h3",{id:"install-snowflake-driver"},"Install Snowflake Driver"),(0,a.yg)("p",null,"Follow the steps ",(0,a.yg)("a",{parentName:"p",href:"/docs/databases/docker-add-drivers"},"here")," about how to\ninstall new database drivers when setting up Superset locally via docker compose."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},'echo "snowflake-sqlalchemy" >> ./docker/requirements-local.txt\n')),(0,a.yg)("p",null,"The recommended connector library for Snowflake is\n",(0,a.yg)("a",{parentName:"p",href:"https://pypi.org/project/snowflake-sqlalchemy/"},"snowflake-sqlalchemy"),"."),(0,a.yg)("p",null,"The connection string for Snowflake looks like this:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}\n")),(0,a.yg)("p",null,"The schema is not necessary in the connection string, as it is defined per table/query. The role and\nwarehouse can be omitted if defaults are defined for the user, i.e."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"snowflake://{user}:{password}@{account}.{region}/{database}\n")),(0,a.yg)("p",null,"Make sure the user has privileges to access and use all required\ndatabases/schemas/tables/views/warehouses, as the Snowflake SQLAlchemy engine does not test for\nuser/role rights during engine creation by default. However, when pressing the \u201cTest Connection\u201d\nbutton in the Create or Edit Database dialog, user/role credentials are validated by passing\n\u201cvalidate_default_parameters\u201d: True to the connect() method during engine creation. If the user/role\nis not authorized to access the database, an error is recorded in the Superset logs."),(0,a.yg)("p",null,"And if you want connect Snowflake with ",(0,a.yg)("a",{parentName:"p",href:"https://docs.snowflake.com/en/user-guide/key-pair-auth.html#step-6-configure-the-snowflake-client-to-use-key-pair-authentication"},"Key Pair Authentication"),'.\nPlease make sure you have the key pair and the public key is registered in Snowflake.\nTo connect Snowflake with Key Pair Authentication, you need to add the following parameters to "SECURE EXTRA" field.'),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},(0,a.yg)("em",{parentName:"strong"},"Please note that you need to merge multi-line private key content to one line and insert ",(0,a.yg)("inlineCode",{parentName:"em"},"\\n")," between each line"))),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},'{\n     "auth_method": "keypair",\n     "auth_params": {\n         "privatekey_body": "-----BEGIN ENCRYPTED PRIVATE KEY-----\\n...\\n...\\n-----END ENCRYPTED PRIVATE KEY-----",\n         "privatekey_pass":"Your Private Key Password"\n     }\n }\n')),(0,a.yg)("p",null,'If your private key is stored on server, you can replace "privatekey_body" with \u201cprivatekey_path\u201d in parameter.'),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},'{\n    "auth_method": "keypair",\n    "auth_params": {\n        "privatekey_path":"Your Private Key Path",\n        "privatekey_pass":"Your Private Key Password"\n    }\n}\n')))}d.isMDXComponent=!0}}]);