"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[8718],{58977:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(83117),r=(n(67294),n(3905));const i={title:"Trino",hide_title:!0,sidebar_position:34,version:1},o=void 0,l={unversionedId:"databases/trino",id:"databases/trino",title:"Trino",description:"Trino",source:"@site/docs/databases/trino.mdx",sourceDirName:"databases",slug:"/databases/trino",permalink:"/docs/databases/trino",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/databases/trino.mdx",tags:[],version:"current",sidebarPosition:34,frontMatter:{title:"Trino",hide_title:!0,sidebar_position:34,version:1},sidebar:"tutorialSidebar",previous:{title:"Hologres",permalink:"/docs/databases/hologres"},next:{title:"Rockset",permalink:"/docs/databases/rockset"}},s={},p=[{value:"Trino",id:"trino",level:2},{value:"Connection String",id:"connection-string",level:3},{value:"Authentications",id:"authentications",level:3},{value:"1. Basic Authentication",id:"1-basic-authentication",level:4},{value:"2. Kerberos Authentication",id:"2-kerberos-authentication",level:4},{value:"3. Certificate Authentication",id:"3-certificate-authentication",level:4},{value:"4. JWT Authentication",id:"4-jwt-authentication",level:4},{value:"5. Custom Authentication",id:"5-custom-authentication",level:4}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"trino"},"Trino"),(0,r.kt)("p",null,"Supported trino version 352 and higher"),(0,r.kt)("h3",{id:"connection-string"},"Connection String"),(0,r.kt)("p",null,"The connection string format is as follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"trino://{username}:{password}@{hostname}:{port}/{catalog}\n")),(0,r.kt)("p",null,"If you are running Trino with docker on local machine, please use the following connection URL"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"trino://trino@host.docker.internal:8080\n")),(0,r.kt)("h3",{id:"authentications"},"Authentications"),(0,r.kt)("h4",{id:"1-basic-authentication"},"1. Basic Authentication"),(0,r.kt)("p",null,"You can provide ",(0,r.kt)("inlineCode",{parentName:"p"},"username"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"password")," in the connection string or in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field at ",(0,r.kt)("inlineCode",{parentName:"p"},"Advanced / Security")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In Connection String"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"trino://{username}:{password}@{hostname}:{port}/{catalog}\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n    "auth_method": "basic",\n    "auth_params": {\n        "username": "<username>",\n        "password": "<password>"\n    }\n}\n')))),(0,r.kt)("p",null,"NOTE: if both are provided, ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," always takes higher priority."),(0,r.kt)("h4",{id:"2-kerberos-authentication"},"2. Kerberos Authentication"),(0,r.kt)("p",null,"In ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field, config as following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n    "auth_method": "kerberos",\n    "auth_params": {\n        "service_name": "superset",\n        "config": "/path/to/krb5.config",\n        ...\n    }\n}\n')),(0,r.kt)("p",null,"All fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"auth_params")," are passed directly to the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/trinodb/trino-python-client/blob/0.306.0/trino/auth.py#L40"},(0,r.kt)("inlineCode",{parentName:"a"},"KerberosAuthentication"))," class."),(0,r.kt)("h4",{id:"3-certificate-authentication"},"3. Certificate Authentication"),(0,r.kt)("p",null,"In ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field, config as following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n    "auth_method": "certificate",\n    "auth_params": {\n        "cert": "/path/to/cert.pem",\n        "key": "/path/to/key.pem"\n    }\n}\n')),(0,r.kt)("p",null,"All fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"auth_params")," are passed directly to the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/trinodb/trino-python-client/blob/0.315.0/trino/auth.py#L416"},(0,r.kt)("inlineCode",{parentName:"a"},"CertificateAuthentication"))," class."),(0,r.kt)("h4",{id:"4-jwt-authentication"},"4. JWT Authentication"),(0,r.kt)("p",null,"Config ",(0,r.kt)("inlineCode",{parentName:"p"},"auth_method")," and provide token in ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n    "auth_method": "jwt",\n    "auth_params": {\n        "token": "<your-jwt-token>"\n    }\n}\n')),(0,r.kt)("h4",{id:"5-custom-authentication"},"5. Custom Authentication"),(0,r.kt)("p",null,"To use custom authentication, first you need to add it into\n",(0,r.kt)("inlineCode",{parentName:"p"},"ALLOWED_EXTRA_AUTHENTICATIONS")," allow list in Superset config file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from your.module import AuthClass\nfrom another.extra import auth_method\n\nALLOWED_EXTRA_AUTHENTICATIONS: Dict[str, Dict[str, Callable[..., Any]]] = {\n    "trino": {\n        "custom_auth": AuthClass,\n        "another_auth_method": auth_method,\n    },\n}\n')),(0,r.kt)("p",null,"Then in ",(0,r.kt)("inlineCode",{parentName:"p"},"Secure Extra")," field:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n    "auth_method": "custom_auth",\n    "auth_params": {\n        ...\n    }\n}\n')),(0,r.kt)("p",null,"You can also use custom authentication by providing reference to your ",(0,r.kt)("inlineCode",{parentName:"p"},"trino.auth.Authentication")," class\nor factory function (which returns an ",(0,r.kt)("inlineCode",{parentName:"p"},"Authentication")," instance) to ",(0,r.kt)("inlineCode",{parentName:"p"},"auth_method"),"."),(0,r.kt)("p",null,"All fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"auth_params")," are passed directly to your class/function."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Reference"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://trino.io/episodes/12.html"},"Trino-Superset-Podcast"))))}d.isMDXComponent=!0},3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});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 i(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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return n?a.createElement(h,o(o({ref:t},c),{},{components:n})):a.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:r,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"}}]);