"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2309],{3905:(t,e,r)=>{r.d(e,{Zo:()=>p,kt:()=>y});var o=r(7294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,o)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach((function(e){n(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function u(t,e){if(null==t)return{};var r,o,n=function(t,e){if(null==t)return{};var r,o,n={},a=Object.keys(t);for(o=0;o<a.length;o++)r=a[o],e.indexOf(r)>=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o<a.length;o++)r=a[o],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var s=o.createContext({}),l=function(t){var e=o.useContext(s),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},p=function(t){var e=l(t.components);return o.createElement(s.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},h=o.forwardRef((function(t,e){var r=t.components,n=t.mdxType,a=t.originalType,s=t.parentName,p=u(t,["components","mdxType","originalType","parentName"]),c=l(r),h=n,y=c["".concat(s,".").concat(h)]||c[h]||d[h]||a;return r?o.createElement(y,i(i({ref:e},p),{},{components:r})):o.createElement(y,i({ref:e},p))}));function y(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var a=r.length,i=new Array(a);i[0]=h;var u={};for(var s in e)hasOwnProperty.call(e,s)&&(u[s]=e[s]);u.originalType=t,u[c]="string"==typeof t?t:n,i[1]=u;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}h.displayName="MDXCreateElement"},3493:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>y,frontMatter:()=>u,metadata:()=>l,toc:()=>c});var o=r(7462),n=r(3366),a=(r(7294),r(3905)),i=["components"],u={id:"tutorial-jupyter-index",title:"Jupyter Notebook tutorials"},s=void 0,l={unversionedId:"tutorials/tutorial-jupyter-index",id:"tutorials/tutorial-jupyter-index",title:"Jupyter Notebook tutorials",description:"\x3c!--",source:"@site/docs/latest/tutorials/tutorial-jupyter-index.md",sourceDirName:"tutorials",slug:"/tutorials/tutorial-jupyter-index",permalink:"/docs/latest/tutorials/tutorial-jupyter-index",draft:!1,tags:[],version:"current",frontMatter:{id:"tutorial-jupyter-index",title:"Jupyter Notebook tutorials"},sidebar:"docs",previous:{title:"Unnesting arrays",permalink:"/docs/latest/tutorials/tutorial-unnest-arrays"},next:{title:"Docker for tutorials",permalink:"/docs/latest/tutorials/tutorial-jupyter-docker"}},p={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Python API for Druid",id:"python-api-for-druid",level:2},{value:"Tutorials",id:"tutorials",level:2}],d={toc:c},h="wrapper";function y(t){var e=t.components,r=(0,n.Z)(t,i);return(0,a.kt)(h,(0,o.Z)({},d,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"You can try out the Druid APIs using the Jupyter Notebook-based tutorials. These\ntutorials provide snippets of Python code that you can use to run calls against\nthe Druid API to complete the tutorial."),(0,a.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("p",null,"The simplest way to get started is to use Docker. In this case, you only need to set up Docker Desktop.\nFor more information, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/latest/tutorials/tutorial-jupyter-docker"},"Docker for Jupyter Notebook tutorials"),"."),(0,a.kt)("p",null,"Otherwise, you can install the prerequisites on your own. Here's what you need:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"An available Druid instance."),(0,a.kt)("li",{parentName:"ul"},"Python 3.7 or later"),(0,a.kt)("li",{parentName:"ul"},"JupyterLab (recommended) or Jupyter Notebook running on a non-default port.\nBy default, Druid and Jupyter both try to use port ",(0,a.kt)("inlineCode",{parentName:"li"},"8888"),", so start Jupyter on a different port."),(0,a.kt)("li",{parentName:"ul"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"requests")," Python package"),(0,a.kt)("li",{parentName:"ul"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"druidapi")," Python package")),(0,a.kt)("p",null,"For setup instructions, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/latest/tutorials/tutorial-jupyter-docker#tutorial-setup-without-using-docker"},"Tutorial setup without using Docker"),".\nIndividual tutorials may require additional Python packages, such as for visualization or streaming ingestion."),(0,a.kt)("h2",{id:"python-api-for-druid"},"Python API for Druid"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"druidapi")," Python package is a REST API for Druid.\nOne of the notebooks shows how to use the Druid REST API. The others focus on other\ntopics and use a simple set of Python wrappers around the underlying REST API. The\nwrappers reside in the ",(0,a.kt)("inlineCode",{parentName:"p"},"druidapi")," package within the notebooks directory. While the package\ncan be used in any Python program, the key purpose, at present, is to support these\nnotebooks. See\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/apache/druid/tree/master/examples/quickstart/jupyter-notebooks/python-api-tutorial.ipynb"},"Introduction to the Druid Python API"),"\nfor an overview of the Python API."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"druidapi")," package is already installed in the custom Jupyter Docker container for Druid tutorials."),(0,a.kt)("h2",{id:"tutorials"},"Tutorials"),(0,a.kt)("p",null,"The notebooks are located in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/apache/druid/tree/master/examples/quickstart/jupyter-notebooks/"},"apache/druid repo"),". You can either clone the repo or download the notebooks you want individually."),(0,a.kt)("p",null,"The links that follow are the raw GitHub URLs, so you can use them to download the notebook directly, such as with ",(0,a.kt)("inlineCode",{parentName:"p"},"wget"),", or manually through your web browser. Note that if you save the file from your web browser, make sure to remove the ",(0,a.kt)("inlineCode",{parentName:"p"},".txt")," extension."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/druid/master/examples/quickstart/jupyter-notebooks/api-tutorial.ipynb"},"Introduction to the Druid REST API"),"\nwalks you through some of the basics related to the Druid REST API and several endpoints."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/druid/master/examples/quickstart/jupyter-notebooks/Python_API_Tutorial.ipynb"},"Introduction to the Druid Python API"),"\nwalks you through some of the basics related to the Druid API using the Python wrapper API."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/druid/master/examples/quickstart/jupyter-notebooks/sql-tutorial.ipynb"},"Introduction to Druid SQL")," covers the basics of Druid SQL.")))}y.isMDXComponent=!0}}]);