"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[8718],{58977:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>s});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"}},p={},s=[{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:s},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)("p",null,"NOTE: Kerberos authentication requires installing the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/trinodb/trino-python-client"},(0,r.kt)("inlineCode",{parentName:"a"},"trino-python-client"))," locally with either the ",(0,r.kt)("inlineCode",{parentName:"p"},"all")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"kerberos")," optional features, i.e., installing ",(0,r.kt)("inlineCode",{parentName:"p"},"trino[all]")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"trino[kerberos]")," respectively."),(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 p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.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,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),m=r,h=u["".concat(p,".").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 p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:r,o[1]=l;for(var s=2;s<i;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"}}]);