/*! For license information please see 76b5bcb0.4ef696fb.js.LICENSE.txt */
(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8983],{4137:function(e,t,n){"use strict";n.d(t,{Zo:function(){return c},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(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,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},8448:function(e,t,n){"use strict";var r=n(7294);t.Z=function(e){var t=e.children,n=e.hidden,o=e.className;return r.createElement("div",{role:"tabpanel",hidden:n,className:o},t)}},7358:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(7294),o=n(2713);var a=function(){var e=(0,r.useContext)(o.Z);if(null==e)throw new Error('"useUserPreferencesContext" is used outside of "Layout" component.');return e},i=n(6010),l="tabItem_1uMI",s="tabItemActive_2DSg";var u=37,c=39;var p=function(e){var t=e.lazy,n=e.block,o=e.defaultValue,p=e.values,d=e.groupId,m=e.className,f=a(),y=f.tabGroupChoices,b=f.setTabGroupChoices,h=(0,r.useState)(o),g=h[0],v=h[1],k=r.Children.toArray(e.children),P=[];if(null!=d){var T=y[d];null!=T&&T!==g&&p.some((function(e){return e.value===T}))&&v(T)}var O=function(e){var t=e.currentTarget,n=P.indexOf(t),r=p[n].value;v(r),null!=d&&(b(d,r),setTimeout((function(){var e,n,r,o,a,i,l,u;(e=t.getBoundingClientRect(),n=e.top,r=e.left,o=e.bottom,a=e.right,i=window,l=i.innerHeight,u=i.innerWidth,n>=0&&a<=u&&o<=l&&r>=0)||(t.scrollIntoView({block:"center",behavior:"smooth"}),t.classList.add(s),setTimeout((function(){return t.classList.remove(s)}),2e3))}),150))},S=function(e){var t,n;switch(e.keyCode){case c:var r=P.indexOf(e.target)+1;n=P[r]||P[0];break;case u:var o=P.indexOf(e.target)-1;n=P[o]||P[P.length-1]}null==(t=n)||t.focus()};return r.createElement("div",{className:"tabs-container"},r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},m)},p.map((function(e){var t=e.value,n=e.label;return r.createElement("li",{role:"tab",tabIndex:g===t?0:-1,"aria-selected":g===t,className:(0,i.Z)("tabs__item",l,{"tabs__item--active":g===t}),key:t,ref:function(e){return P.push(e)},onKeyDown:S,onFocus:O,onClick:O},n)}))),t?(0,r.cloneElement)(k.filter((function(e){return e.props.value===g}))[0],{className:"margin-vert--md"}):r.createElement("div",{className:"margin-vert--md"},k.map((function(e,t){return(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==g})}))))}},2713:function(e,t,n){"use strict";var r=(0,n(7294).createContext)(void 0);t.Z=r},6261:function(e,t,n){"use strict";var r=n(7294),o=n(4184),a=n.n(o);t.Z=function(e){var t=e.children,n=e.classNames,o=e.fill,i=e.icon,l=e.type,s=null;switch(l){case"danger":s="alert-triangle";break;case"success":s="check-circle";break;case"warning":s="alert-triangle";break;default:s="info"}return r.createElement("div",{className:a()(n,"alert","alert--"+l,{"alert--fill":o,"alert--icon":!1!==i}),role:"alert"},!1!==i&&r.createElement("i",{className:a()("feather","icon-"+(i||s))}),t)}},8657:function(e,t,n){"use strict";n.r(t),n.d(t,{frontMatter:function(){return c},contentTitle:function(){return p},metadata:function(){return d},toc:function(){return m},default:function(){return y}});var r=n(7462),o=n(3366),a=(n(7294),n(4137)),i=n(6261),l=n(7358),s=n(8448),u=["components"],c={title:"Querying Pinot",sidebar_label:"query-pinot",description:"Ways to query Pinot",draft:!0},p=void 0,d={unversionedId:"user-guide/query-pinot",id:"user-guide/query-pinot",isDocsHomePage:!1,title:"Querying Pinot",description:"Ways to query Pinot",source:"@site/docs/user-guide/query-pinot.md",sourceDirName:"user-guide",slug:"/user-guide/query-pinot",permalink:"/docs/user-guide/query-pinot",editUrl:"https://github.com/apache/pinot/edit/master/website/docs/user-guide/query-pinot.md",version:"current",frontMatter:{title:"Querying Pinot",sidebar_label:"query-pinot",description:"Ways to query Pinot",draft:!0}},m=[{value:"REST API on the Broker",id:"rest-api-on-the-broker",children:[]},{value:"Query Console",id:"query-console",children:[{value:"pinot-admin",id:"pinot-admin",children:[]}]},{value:"Pinot Clients",id:"pinot-clients",children:[]}],f={toc:m};function y(e){var t=e.components,c=(0,o.Z)(e,u);return(0,a.kt)("wrapper",(0,r.Z)({},f,c,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"rest-api-on-the-broker"},"REST API on the Broker"),(0,a.kt)("p",null,"Pinot can be queried via a broker endpoint as follows. This example assumes broker is running on ",(0,a.kt)("inlineCode",{parentName:"p"},"localhost:8099")),(0,a.kt)(l.Z,{block:!0,defaultValue:"Standard-SQL endpoint",urlKey:"arch",values:[{label:"Standard-SQL endpoint",value:"Standard-SQL endpoint"},{label:"PQL endpoint",value:"PQL endpoint"}],mdxType:"Tabs"},(0,a.kt)(s.Z,{value:"Standard-SQL endpoint",mdxType:"TabItem"},(0,a.kt)("p",null,"The Pinot REST API can be accessed by invoking POST operation with a JSON body containing the parameter sql to the ",(0,a.kt)("inlineCode",{parentName:"p"},"/query/sql")," endpoint on a broker."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sql"},'$ curl -H "Content-Type: application/json" -X POST \\\n   -d \'{"sql":"select foo, count(*) from myTable group by foo limit 100"}\' \\\n   http://localhost:8099/query/sql\n'))),(0,a.kt)(s.Z,{value:"PQL endpoint",mdxType:"TabItem"},(0,a.kt)(i.Z,{type:"info",mdxType:"Alert"}," This endpoint is deprecated, and will soon be removed. The standard-SQL endpoint is the recommended endpoint."),(0,a.kt)("p",null,"The PQL endpoint can be accessed by invoking POST operation with a JSON body containing the parameter pql to the ",(0,a.kt)("inlineCode",{parentName:"p"},"/query")," endpoint on a broker."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sql"},'$ curl -H "Content-Type: application/json" -X POST \\\n   -d \'{"pql":"select count(*) from myTable group by foo top 100"}\' \\\n   http://localhost:8099/query\n')))),(0,a.kt)("h2",{id:"query-console"},"Query Console"),(0,a.kt)("p",null,"Query Console can be used for running ad-hoc queries (checkbox available to query the PQL endpoint). The Query Console can be accessed by entering the ",(0,a.kt)("inlineCode",{parentName:"p"},"<controller host>:<controller port>")," in your browser"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"PQL-Query-Console",src:n(6661).Z})),(0,a.kt)("h3",{id:"pinot-admin"},"pinot-admin"),(0,a.kt)("p",null,"You can also query using the pinot-admin scripts. Make sure you follow instructions in Getting Pinot to get Pinot locally, and then"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'cd pinot/pinot-tools/target/pinot-tools-pkg\nbin/pinot-admin.sh PostQuery \\\n  -queryType sql \\\n  -brokerPort 8000 \\\n  -query "select count(*) from baseballStats"\n\n2020/03/04 12:46:33.459 INFO [PostQueryCommand] [main] Executing command: PostQuery -brokerHost localhost -brokerPort 8000 -queryType sql -query select count(*) from baseballStats\n2020/03/04 12:46:33.854 INFO [PostQueryCommand] [main] Result: {"resultTable":{"dataSchema":{"columnDataTypes":["LONG"],"columnNames":["count(*)"]},"rows":[[97889]]},"exceptions":[],"numServersQueried":1,"numServersResponded":1,"numSegmentsQueried":1,"numSegmentsProcessed":1,"numSegmentsMatched":1,"numConsumingSegmentsQueried":0,"numDocsScanned":97889,"numEntriesScannedInFilter":0,"numEntriesScannedPostFilter":0,"numGroupsLimitReached":false,"totalDocs":97889,"timeUsedMs":185,"segmentStatistics":[],"traceInfo":{},"minConsumingFreshnessTimeMs":0}\n')),(0,a.kt)("h2",{id:"pinot-clients"},"Pinot Clients"),(0,a.kt)("p",null,"Here's a list of the clients available to query Pinot from your application"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/user-guide/clients/golang"},"Java client")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/user-guide/clients/java"},"Go client")),(0,a.kt)("li",{parentName:"ul"},"Coming soon - JDBC client")))}y.isMDXComponent=!0},4184:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var a=typeof n;if("string"===a||"number"===a)e.push(n);else if(Array.isArray(n)){if(n.length){var i=o.apply(null,n);i&&e.push(i)}}else if("object"===a)if(n.toString===Object.prototype.toString)for(var l in n)r.call(n,l)&&n[l]&&e.push(l);else e.push(n.toString())}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},6010:function(e,t,n){"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}function o(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:function(){return o}})},6661:function(e,t,n){"use strict";t.Z=n.p+"assets/images/pql-query-console-9172787dd283a81158000e46310114f3.png"}}]);