"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4065],{15680:(e,r,a)=>{a.d(r,{xA:()=>l,yg:()=>m});var t=a(96540);function n(e,r,a){return r in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function i(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),a.push.apply(a,t)}return a}function o(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?i(Object(a),!0).forEach((function(r){n(e,r,a[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))}))}return e}function c(e,r){if(null==e)return{};var a,t,n=function(e,r){if(null==e)return{};var a,t,n={},i=Object.keys(e);for(t=0;t<i.length;t++)a=i[t],r.indexOf(a)>=0||(n[a]=e[a]);return n}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)a=i[t],r.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=t.createContext({}),s=function(e){var r=t.useContext(p),a=r;return e&&(a="function"==typeof e?e(r):o(o({},r),e)),a},l=function(e){var r=s(e.components);return t.createElement(p.Provider,{value:r},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),u=s(a),d=n,m=u["".concat(p,".").concat(d)]||u[d]||f[d]||i;return a?t.createElement(m,o(o({ref:r},l),{},{components:a})):t.createElement(m,o({ref:r},l))}));function m(e,r){var a=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=d;var c={};for(var p in r)hasOwnProperty.call(r,p)&&(c[p]=r[p]);c.originalType=e,c[u]="string"==typeof e?e:n,o[1]=c;for(var s=2;s<i;s++)o[s]=a[s];return t.createElement.apply(null,o)}return t.createElement.apply(null,a)}d.displayName="MDXCreateElement"},99653:(e,r,a)=>{a.r(r),a.d(r,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>c,metadata:()=>s,toc:()=>u});var t=a(58168),n=a(98587),i=(a(96540),a(15680)),o=["components"],c={id:"api-reference",title:"API reference",sidebar_label:"Overview"},p=void 0,s={unversionedId:"api-reference/api-reference",id:"api-reference/api-reference",title:"API reference",description:"\x3c!--",source:"@site/docs/29.0.0/api-reference/api-reference.md",sourceDirName:"api-reference",slug:"/api-reference/",permalink:"/docs/29.0.0/api-reference/",draft:!1,tags:[],version:"current",frontMatter:{id:"api-reference",title:"API reference",sidebar_label:"Overview"},sidebar:"docs",previous:{title:"Spatial filters",permalink:"/docs/29.0.0/querying/geo"},next:{title:"Druid SQL",permalink:"/docs/29.0.0/api-reference/sql-api"}},l={},u=[{value:"HTTP APIs",id:"http-apis",level:2},{value:"Java APIs",id:"java-apis",level:2}],f={toc:u},d="wrapper";function m(e){var r=e.components,a=(0,n.A)(e,o);return(0,i.yg)(d,(0,t.A)({},f,a,{components:r,mdxType:"MDXLayout"}),(0,i.yg)("p",null,"This topic is an index to the Apache Druid API documentation."),(0,i.yg)("h2",{id:"http-apis"},"HTTP APIs"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/sql-api"},"Druid SQL queries")," to submit SQL queries using the Druid SQL API."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/sql-ingestion-api"},"SQL-based ingestion")," to submit SQL-based batch ingestion requests."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/json-querying-api"},"JSON querying")," to submit JSON-based native queries."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/tasks-api"},"Tasks")," to manage data ingestion operations."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/supervisor-api"},"Supervisors")," to manage supervisors for data ingestion lifecycle and data processing."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/retention-rules-api"},"Retention rules")," to define and manage data retention rules across datasources."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/data-management-api"},"Data management")," to manage data segments."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/automatic-compaction-api"},"Automatic compaction")," to optimize segment sizes after ingestion."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/lookups-api"},"Lookups")," to manage and modify key-value datasources."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/service-status-api"},"Service status")," to monitor components within the Druid cluster. "),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/dynamic-configuration-api"},"Dynamic configuration")," to configure the behavior of the Coordinator and Overlord processes."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/legacy-metadata-api"},"Legacy metadata")," to retrieve datasource metadata.")),(0,i.yg)("h2",{id:"java-apis"},"Java APIs"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/29.0.0/api-reference/sql-jdbc"},"SQL JDBC driver")," to connect to Druid and make Druid SQL queries using the Avatica JDBC driver.")))}m.isMDXComponent=!0}}]);