"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5889],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>v});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},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)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(a),m=n,v=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return a?r.createElement(v,o(o({ref:t},p),{},{components:a})):r.createElement(v,o({ref:t},p))}));function v(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c<i;c++)o[c]=a[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,a)}m.displayName="MDXCreateElement"},39977:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>v,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var r=a(87462),n=a(63366),i=(a(67294),a(3905)),o=["components"],s={id:"javascript",title:"JavaScript programming guide",sidebar_label:"JavaScript functionality"},l=void 0,c={unversionedId:"development/javascript",id:"development/javascript",title:"JavaScript programming guide",description:"\x3c!--",source:"@site/docs/28.0.1/development/javascript.md",sourceDirName:"development",slug:"/development/javascript",permalink:"/docs/28.0.1/development/javascript",draft:!1,tags:[],version:"current",frontMatter:{id:"javascript",title:"JavaScript programming guide",sidebar_label:"JavaScript functionality"},sidebar:"docs",previous:{title:"Creating extensions",permalink:"/docs/28.0.1/development/modules"},next:{title:"Build from source",permalink:"/docs/28.0.1/development/build"}},p={},u=[{value:"Examples",id:"examples",level:2},{value:"Security",id:"security",level:2},{value:"Global variables",id:"global-variables",level:2},{value:"Performance",id:"performance",level:2},{value:"JavaScript vs. Native Extensions",id:"javascript-vs-native-extensions",level:2}],d={toc:u},m="wrapper";function v(e){var t=e.components,a=(0,n.Z)(e,o);return(0,i.kt)(m,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This page discusses how to use JavaScript to extend Apache Druid."),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"JavaScript can be used to extend Druid in a variety of ways:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/querying/aggregations#javascript-aggregator"},"Aggregators")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/querying/dimensionspecs#javascript-extraction-function"},"Extraction functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/querying/filters#javascript-filter"},"Filters")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/querying/post-aggregations#javascript-post-aggregator"},"Post-aggregators")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/ingestion/data-formats#javascript-parsespec"},"Input parsers")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/design/router#javascript"},"Router strategy")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/28.0.1/configuration/#javascript-worker-select-strategy"},"Worker select strategy"))),(0,i.kt)("p",null,"JavaScript can be injected dynamically at runtime, making it convenient to rapidly prototype new functionality\nwithout needing to write and deploy Druid extensions."),(0,i.kt)("p",null,"Druid uses the Mozilla Rhino engine at optimization level 9 to compile and execute JavaScript."),(0,i.kt)("h2",{id:"security"},"Security"),(0,i.kt)("p",null,"Druid does not execute JavaScript functions in a sandbox, so they have full access to the machine. So JavaScript\nfunctions allow users to execute arbitrary code inside druid process. So, by default, JavaScript is disabled.\nHowever, on dev/staging environments or secured production environments you can enable those by setting\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/28.0.1/configuration/#javascript"},"configuration property"),"\n",(0,i.kt)("inlineCode",{parentName:"p"},"druid.javascript.enabled = true"),"."),(0,i.kt)("h2",{id:"global-variables"},"Global variables"),(0,i.kt)("p",null,"Avoid using global variables. Druid may share the global scope between multiple threads, which can lead to\nunpredictable results if global variables are used."),(0,i.kt)("h2",{id:"performance"},"Performance"),(0,i.kt)("p",null,"Simple JavaScript functions typically have a slight performance penalty to native speed. More complex JavaScript\nfunctions can have steeper performance penalties. Druid compiles JavaScript functions once on each data process per query."),(0,i.kt)("p",null,"You may need to pay special attention to garbage collection when making heavy use of JavaScript functions, especially\ngarbage collection of the compiled classes themselves. Be sure to use a garbage collector configuration that supports\ntimely collection of unused classes (this is generally easier on JDK8 with the Metaspace than it is on JDK7)."),(0,i.kt)("h2",{id:"javascript-vs-native-extensions"},"JavaScript vs. Native Extensions"),(0,i.kt)("p",null,"Generally we recommend using JavaScript when security is not an issue, and when speed of development is more important\nthan performance or memory use. If security is an issue, or if performance and memory use are of the utmost importance,\nwe recommend developing a native Druid extension."),(0,i.kt)("p",null,"In addition, native Druid extensions are more flexible than JavaScript functions. There are some kinds of extensions\n(like sketches) that must be written as native Druid extensions due to their need for custom data formats."))}v.isMDXComponent=!0}}]);