blob: 31dd6c1cae11373a4e21e8a2bfb1cb32ad28920e [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.1">
<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.f0793de6.css">
<link rel="preload" href="/assets/js/runtime~main.82dd65bd.js" as="script">
<link rel="preload" href="/assets/js/main.9b2ca7ec.js" as="script">
</head>
<body>
<script>!function(){function e(e){document.documentElement.setAttribute("data-theme",e)}var t=function(){var e=null;try{e=localStorage.getItem("theme")}catch(e){}return e}();null!==t?e(t):window.matchMedia("(prefers-color-scheme: dark)").matches?e("dark"):window.matchMedia("(prefers-color-scheme: light)").matches?e("light"):e("dark")}()</script><div id="__docusaurus">
<div><a href="#main" class="skipToContent_OuoZ shadow--md">Skip to main content</a></div><nav class="navbar navbar--fixed-top navbarHideable_RReh"><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_TMUO themedImage--light_4Vu1 navbar__logo"><img src="/img/pinot-navbar-logo-722f37.svg" alt="Pinot" class="themedImage_TMUO themedImage--dark_uzRr 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_wgqa"><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 displayOnlyInLargeViewport_cxYs react-toggle--checked react-toggle--disabled"><div class="react-toggle-track" role="button" tabindex="-1"><div class="react-toggle-track-check"><span class="toggle_iYfV" style="margin-left:2px">🌙</span></div><div class="react-toggle-track-x"><span class="toggle_iYfV" 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_NKBi"><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><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img src="/img/pinot-navbar-logo-722f37.svg" alt="Pinot" class="themedImage_TMUO themedImage--light_4Vu1 navbar__logo"><img src="/img/pinot-navbar-logo-722f37.svg" alt="Pinot" class="themedImage_TMUO themedImage--dark_uzRr navbar__logo"></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a href="https://docs.pinot.apache.org/" target="_blank" rel="noopener noreferrer" class="menu__link">Docs</a></li><li class="menu__list-item"><a class="menu__link" href="/download">Download</a></li><li class="menu__list-item"><a class="menu__link" href="/blog">Blog</a></li><li class="menu__list-item"><a href="https://github.com/apache/pinot" target="_blank" rel="noopener noreferrer" class="menu__link"><span>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><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></li></ul></div></div></div></nav><div class="main-wrapper docs-wrapper doc-page"><div class="docPage_lDyR"><main class="docMainContainer_r8cw docMainContainerEnhanced_SOUu"><div class="container padding-top--md padding-bottom--lg docItemWrapper_NJLN"><div class="row"><div class="col docItemCol_zHA2"><div class="docItemContainer_oiyr"><article><div class="markdown"><header><h1 class="h1Heading_dC7a">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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB clean-btn">Copy</button></div></div><p>Queries can also use a <code>PreparedStatement</code> to escape query parameters:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_J+bg"><div class="codeBlockContent_csEI java"><pre tabindex="0" class="prism-code language-java codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><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_M3SB 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_mS5F" 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_wj+Z"></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 class="col col--3"><div class="tableOfContents_vrFS thin-scrollbar"></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 Apache Pinot?</a></li><li class="footer__item"><a class="footer__link-item" href="/who_uses">Who uses Apache 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/trino" target="_blank" rel="noopener noreferrer" class="footer__link-item">Trino</a></li><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_94kH"><img src="/img/logo.svg" alt="Apache Pinot™" class="themedImage_TMUO themedImage--light_4Vu1 footer__logo"><img src="/img/logo.svg" alt="Apache Pinot™" class="themedImage_TMUO themedImage--dark_uzRr footer__logo"></a></div><div class="footerCopyright_-piB">Copyright © 2022 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, Trino, TrinoDB, 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.82dd65bd.js"></script>
<script src="/assets/js/main.9b2ca7ec.js"></script>
</body>
</html>