blob: 8395664deb8e9e8e2b759a4c1e266c9b29d0a601 [file] [log] [blame]
<!doctype html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-beta.4">
<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Pinot™ Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Pinot™ Blog Atom Feed">
<link rel="preconnect" href="https://www.google-analytics.com">
<script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-157446650-1","auto"),ga("send","pageview")</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<link rel="search" type="application/opensearchdescription+xml" title="Apache Pinot™" href="/opensearch.xml">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu|Roboto|Source+Code+Pro">
<link rel="stylesheet" href="https://at-ui.github.io/feather-font/css/iconfont.css"><title data-react-helmet="true">Java | Apache Pinot™</title><meta data-react-helmet="true" property="og:url" content="https://pinot.apache.org/docs/user-guide/clients/java"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-react-helmet="true" property="og:title" content="Java | Apache Pinot™"><meta data-react-helmet="true" name="description" content="Pinot Java Client"><meta data-react-helmet="true" property="og:description" content="Pinot Java Client"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://pinot.apache.org/docs/user-guide/clients/java"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/docs/user-guide/clients/java" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/docs/user-guide/clients/java" hreflang="x-default"><link data-react-helmet="true" rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin="anonymous"><link rel="stylesheet" href="/assets/css/styles.f8c6b66d.css">
<link rel="preload" href="/assets/js/runtime~main.59053854.js" as="script">
<link rel="preload" href="/assets/js/main.5e591844.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):window.matchMedia("(prefers-color-scheme: light)").matches?t("light"):t("dark")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_1oUP">Skip to main content</a></div><div class="announcementBar_3WsW" style="background-color:#252532;color:#fff" role="banner"><div class="announcementBarContent_3EUC announcementBarCloseable_3myR">⭐️ If you love <b>Apache Pinot</b>, please give it a star on <a target="_blank" href="https://github.com/apache/pinot"><b>GitHub</b></a>! ⭐️</div><button type="button" class="announcementBarClose_38nx clean-btn" aria-label="Close"><span aria-hidden="true">×</span></button></div><nav class="navbar navbar--fixed-top navbarHideable_2qcr"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><img src="/img/pinot-navbar-logo-722f37.svg" alt="Pinot" class="themedImage_1VuW themedImage--light_3UqQ navbar__logo"><img src="/img/pinot-navbar-logo-722f37.svg" alt="Pinot" class="themedImage_1VuW themedImage--dark_hz6m navbar__logo"></a></div><div class="navbar__items navbar__items--right"><a href="https://docs.pinot.apache.org/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Docs</a><a class="navbar__item navbar__link" href="/download">Download</a><a class="navbar__item navbar__link" href="/blog">Blog</a><a href="https://github.com/apache/pinot" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_3J9K"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a><div class="react-toggle toggle_3Zt9 react-toggle--checked react-toggle--disabled"><div class="react-toggle-track" role="button" tabindex="-1"><div class="react-toggle-track-check"><span class="toggle_71bT" style="margin-left:2px">🌙</span></div><div class="react-toggle-track-x"><span class="toggle_71bT" style="margin-left:2px">☀️</span></div><div class="react-toggle-thumb"></div></div><input type="checkbox" checked="" class="react-toggle-screenreader-only" aria-label="Switch between dark and light mode"></div><div class="searchBox_1Doo"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper docs-wrapper doc-page"><div class="docPage_31aa"><button class="clean-btn backToTopButton_35hR" type="button" title="Scroll to top"><svg viewBox="0 0 24 24" width="28"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" fill="currentColor"></path></svg></button><main class="docMainContainer_3ufF docMainContainerEnhanced_3NYZ"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_3FnS"><div class="docItemContainer_33ec"><article><div class="markdown"><header><h1 class="h1Heading_27L5">Java</h1></header><p>The java client can be found in pinot-clients/pinot-java-client. Here&#x27;s an example of how to use the pinot-java-client to query Pinot.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.pinot.client.Connection;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.pinot.client.ConnectionFactory;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.pinot.client.Request;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.pinot.client.ResultSetGroup;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.pinot.client.ResultSet;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/**</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> * Demonstrates the use of the pinot-client to query Pinot from Java</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> */</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">public class PinotClientExample {</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> public static void main(String[] args) {</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // pinot connection</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String zkUrl = &quot;localhost:2181&quot;;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String pinotClusterName = &quot;PinotCluster&quot;;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Connection pinotConnection = ConnectionFactory.fromZookeeper(zkUrl + &quot;/&quot; + pinotClusterName);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String query = &quot;SELECT COUNT(*) FROM myTable GROUP BY foo&quot;;</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // set queryType=sql for querying the sql endpoint</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Request pinotClientRequest = new Request(&quot;sql&quot;, query);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ResultSetGroup pinotResultSetGroup = pinotConnection.execute(pinotClientRequest);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ResultSet resultTableResultSet = pinotResultSetGroup.getResultSet(0);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> int numRows = resultTableResultSet.getRowCount();</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> int numColumns = resultTableResultSet.getColumnCount();</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String columnValue = resultTableResultSet.getString(0, 1);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String columnName = resultTableResultSet.getColumnName(1);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;ColumnName: &quot; + columnName + &quot;, ColumnValue: &quot; + columnValue);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> }</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>Connections to Pinot are created using the ConnectionFactory class&#x27; utility methods to create connections to a Pinot cluster given a Zookeeper URL, a Java Properties object or a list of broker addresses to connect to.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Connection connection = ConnectionFactory.fromZookeeper</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> (&quot;some-zookeeper-server:2191/zookeeperPath&quot;);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Connection connection = ConnectionFactory.fromProperties(&quot;demo.properties&quot;);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Connection connection = ConnectionFactory.fromHostList</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> (&quot;some-server:1234&quot;, &quot;some-other-server:1234&quot;, ...);</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>Queries can be sent directly to the Pinot cluster using the <code>Connection.execute(org.apache.pinot.client.Request)</code> and <code>Connection.executeAsync(org.apache.pinot.client.Request)</code> methods of Connection:</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSetGroup resultSetGroup =</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> connection.execute(new Request(&quot;sql&quot;, &quot;select * from foo...&quot;));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// OR</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Future&lt;ResultSetGroup&gt; futureResultSetGroup =</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> connection.executeAsync(new Request(&quot;sql&quot;, &quot;select * from foo...&quot;));</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>Queries can also use a <code>PreparedStatement</code> to escape query parameters:</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">PreparedStatement statement =</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> connection.prepareStatement(new Request(&quot;sql&quot;, &quot;select * from foo where a = ?&quot;));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">statement.setString(1, &quot;bar&quot;);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSetGroup resultSetGroup = statement.execute();</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// OR</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Future&lt;ResultSetGroup&gt; futureResultSetGroup = statement.executeAsync();</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>Results can be obtained with the various get methods in the first ResultSet, obtained through the getResultSet(int) method:</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Request request = new Request(&quot;sql&quot;, &quot;select foo, bar from baz where quux = &#x27;quuux&#x27;&quot;);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSetGroup resultSetGroup = connection.execute(request);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSet resultTableResultSet = pinotResultSetGroup.getResultSet(0);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">for (int i = 0; i &lt; resultSet.getRowCount(); ++i) {</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;foo: &quot; + resultSet.getString(i, 0));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;bar: &quot; + resultSet.getInt(i, 1));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><div class="alert alert--info alert--icon" role="alert"><i class="feather icon-info"></i> The examples for the sections below this note, are for querying the PQL endpoint, which is deprecated and will be deleted soon. For more information about the 2 endpoints, visit [Querying Pinot](/docs/user-guide/query-pinot).</div><p>If queryFormat pql is used in the Request, there are some differences in how the results can be accessed, depending on the query.
In the case of aggregation, each aggregation function is within its own ResultSet. A query with multiple aggregation function will return one result set per aggregation function, as they are computed in parallel.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSetGroup resultSetGroup =</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> connection.execute(new Request(&quot;pql&quot;, &quot;select max(foo), min(foo) from bar&quot;));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">System.out.println(&quot;Number of result groups:&quot; +</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> resultSetGroup.getResultSetCount(); // 2, min(foo) and max(foo)</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSet resultSetMax = resultSetGroup.getResultSet(0);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">System.out.println(&quot;Max foo: &quot; + resultSetMax.getInt(0));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSet resultSetMin = resultSetGroup.getResultSet(1);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">System.out.println(&quot;Min foo: &quot; + resultSetMin.getInt(0));</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>In case of aggregation group by, there will be as many ResultSets as the number of aggregations, each of which will contain multiple results grouped by a group key.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly java"><pre tabindex="0" class="prism-code language-java codeBlock_23N8 thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSetGroup resultSetGroup =</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> connection.execute(</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> new Request(&quot;pql&quot;, &quot;select min(foo), max(foo) from bar group by baz&quot;));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">System.out.println(&quot;Number of result groups:&quot; +</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> resultSetGroup.getResultSetCount(); // 2, min(foo) and max(foo)</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSet minResultSet = resultSetGroup.getResultSet(0);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">for(int i = 0; i &lt; minResultSet.length(); ++i) {</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;Minimum foo for &quot; + minResultSet.getGroupKeyString(i, 1) +</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &quot;: &quot; + minResultSet.getInt(i));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block">
</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ResultSet maxResultSet = resultSetGroup.getResultSet(1);</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">for(int i = 0; i &lt; maxResultSet.length(); ++i) {</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;Maximum foo for &quot; + maxResultSet.getGroupKeyString(i, 1) +</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &quot;: &quot; + maxResultSet.getInt(i));</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/apache/pinot/edit/master/website/docs/user-guide/clients/java.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_2_ui" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_3DPF"></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><div class="pagination-nav__item"></div><div class="pagination-nav__item pagination-nav__item--next"></div></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">About</h4><ul class="footer__items"><li class="footer__item"><a href="https://docs.pinot.apache.org/" target="_blank" rel="noopener noreferrer" class="footer__link-item">What is Pinot?</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/pinot-components" target="_blank" rel="noopener noreferrer" class="footer__link-item">Components</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/basics/architecture" target="_blank" rel="noopener noreferrer" class="footer__link-item">Architecture</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/plugins/plugin-architecture" target="_blank" rel="noopener noreferrer" class="footer__link-item">Plugins Architecture</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Integrations</h4><ul class="footer__items"><li class="footer__item"><a href="https://docs.pinot.apache.org/integrations/presto" target="_blank" rel="noopener noreferrer" class="footer__link-item">Presto</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/integrations/superset" target="_blank" rel="noopener noreferrer" class="footer__link-item">Superset</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/integrations/thirdeye" target="_blank" rel="noopener noreferrer" class="footer__link-item">ThirdEye</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Docs</h4><ul class="footer__items"><li class="footer__item"><a href="https://docs.pinot.apache.org/getting-started" target="_blank" rel="noopener noreferrer" class="footer__link-item">Getting Started</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/pinot-components" target="_blank" rel="noopener noreferrer" class="footer__link-item">Pinot Components</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/users" target="_blank" rel="noopener noreferrer" class="footer__link-item">User Guide</a></li><li class="footer__item"><a href="https://docs.pinot.apache.org/operating-pinot" target="_blank" rel="noopener noreferrer" class="footer__link-item">Administration</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Community</h4><ul class="footer__items"><li class="footer__item"><a href="https://join.slack.com/t/apache-pinot/shared_invite/zt-5z7pav2f-yYtjZdVA~EDmrGkho87Vzw" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/pinot" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github</a></li><li class="footer__item"><a href="https://twitter.com/ApachePinot" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter</a></li><li class="footer__item"><a href="mailto:dev-subscribe@pinot.apache.org?Subject=SubscribeToPinot" target="_blank" rel="noopener noreferrer" class="footer__link-item">Mailing List</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Apache</h4><ul class="footer__items"><li class="footer__item"><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="footer__link-item">Events</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks</a></li><li class="footer__item"><a href="https://www.apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License</a></li><li class="footer__item"><a href="https://www.apache.org/security" target="_blank" rel="noopener noreferrer" class="footer__link-item">Security</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship</a></li><li class="footer__item"><a href="https://www.apache.org" target="_blank" rel="noopener noreferrer" class="footer__link-item">Foundation</a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://pinot.apache.org/" target="_blank" rel="noopener noreferrer" class="footerLogoLink_qW4Z"><img src="/img/logo.svg" alt="Apache Pinot™" class="themedImage_1VuW themedImage--light_3UqQ footer__logo"><img src="/img/logo.svg" alt="Apache Pinot™" class="themedImage_1VuW themedImage--dark_hz6m footer__logo"></a></div><div class="footerCopyright_2yvt">Copyright © 2021 The Apache Software Foundation.<br>Apache Pinot, Pinot, Apache, the Apache feather logo, and the Apache Pinot project logo are registered trademarks of The Apache Software Foundation.<br><br>This page has references to third party software - Presto, PrestoDB, ThirdEye, that are not part of the Apache Software Foundation and are not covered under the Apache License.</div></div></div></footer></div>
<script src="/assets/js/runtime~main.59053854.js"></script>
<script src="/assets/js/main.5e591844.js"></script>
</body>
</html>