blob: e386de8c99f83de83802eaa08889449635c77105 [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">Announcing Apache Pinot 0.10 | Apache Pinot™</title><meta data-react-helmet="true" property="og:title" content="Announcing Apache Pinot 0.10 | Apache Pinot™"><meta data-react-helmet="true" name="description" content="Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product."><meta data-react-helmet="true" property="og:description" content="Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product."><meta data-react-helmet="true" property="og:url" content="https://pinot.apache.org/blog/2022/04/04/Announcing-Apache-Pinot-0-10"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="default"><meta data-react-helmet="true" name="keywords" content="Apache Pinot,Apache Pinot Releases,Apache Pinot 0.10.0"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://pinot.apache.org/blog/2022/04/04/Announcing-Apache-Pinot-0-10"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/blog/2022/04/04/Announcing-Apache-Pinot-0-10" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/blog/2022/04/04/Announcing-Apache-Pinot-0-10" 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.dfc58ce0.js" as="script">
<link rel="preload" href="/assets/js/main.16915bd7.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 aria-current="page" class="navbar__item navbar__link navbar__link--active" 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 aria-current="page" class="menu__link navbar__link--active" 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 blog-wrapper blog-post-page"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_q+wC thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_9G5K margin-bottom--md">All our posts</div><ul class="sidebarItemList_6T4b"><li class="sidebarItem_cjdF"><a aria-current="page" class="sidebarItemLink_zyXk sidebarItemLinkActive_wcJs" href="/blog/2022/04/04/Announcing-Apache-Pinot-0-10">Announcing Apache Pinot 0.10</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/06/16/LinkedIn-TextAnalytics">Text analytics on LinkedIn Talent Insights using Apache Pinot</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/06/13/DevBlog-Geospatial">Introduction to Geospatial Queries in Apache Pinot</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/04/29/Uber-Charon">Automating Merchant Live Monitoring with Real-Time Analytics - Charon</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/04/27/DevBlog-PinotInRetailChain">Deploying Apache Pinot at a Large Retail Chain</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/04/16/LinkedIn-Theta">Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/04/08/DevBlog-UpsertsIntro">Introduction to Upserts in Apache Pinot</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/02/02/DevBlog-PrestoPinot">Real-time Analytics with Presto and Apache Pinot</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2021/01/08/DevBlog-DebeziumCDC">Change Data Analysis with Debezium and Apache Pinot</a></li><li class="sidebarItem_cjdF"><a class="sidebarItemLink_zyXk" href="/blog/2020/12/01/LinkedIn-Lamda">From Lambda to Lambda-less Lessons learned</a></li></ul></nav></aside><main class="col col--7"><article><header><h1 class="blogPostTitle_d4p0">Announcing Apache Pinot 0.10</h1><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2022-04-04T00:00:00.000Z">April 4, 2022</time> · 5 min read</div><div class="avatar margin-vert--md"><a href="https://twitter.com/ApachePinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="Apache Pinot Engineering Team"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://twitter.com/ApachePinot" target="_blank" rel="noopener noreferrer">Apache Pinot Engineering Team</a></div><small class="avatar__subtitle">Apache Pinot Engineering Team</small></div></div></header><div class="markdown"><p>We are excited to announce the release this week of Apache Pinot 0.10.
Apache Pinot is a real-time distributed datastore designed to answer OLAP queries with high throughput and low latency.</p><p>This release is cut from commit <a href="https://github.com/apache/pinot/commit/fd9c58a11ed16d27109baefcee138eea30132ad3" target="_blank" rel="noopener noreferrer">fd9c58a11ed16d27109baefcee138eea30132ad3</a>.
You can find a full list of everything included in the <a href="https://docs.pinot.apache.org/basics/releases/0.10.0" target="_blank" rel="noopener noreferrer">release notes</a>.</p><p>Let’s have a look at some of the changes, with the help of the batch <a href="https://docs.pinot.apache.org/basics/getting-started/running-pinot-in-docker" target="_blank" rel="noopener noreferrer">QuickStart configuration</a>.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="query-plans"></a>Query Plans<a class="hash-link" href="#query-plans" title="Direct link to heading">#</a></h2><p>Amrish Lal implemented the <code>EXPLAIN PLAN</code> clause, which returns the execution plan that will be chosen by the Pinot Query Engine.
This lets us see what the query is likely to do without actually having to run it.</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI sql"><pre tabindex="0" class="prism-code language-sql codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">EXPLAIN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">PLAN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">FOR</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">SELECT</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">FROM</span><span class="token plain"> baseballStats</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">WHERE</span><span class="token plain"> league </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;NL&#x27;</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>If we run this query, we&#x27;ll see the following results:</p><table><thead><tr><th>Operator</th><th>Operator_Id</th><th>Parent_Id</th></tr></thead><tbody><tr><td>BROKER_REDUCE(limit:10)</td><td>0</td><td>-1</td></tr><tr><td>COMBINE_SELECT</td><td>1</td><td>0</td></tr><tr><td>SELECT(selectList:AtBatting, G_old, baseOnBalls, caughtStealing, doules, groundedIntoDoublePlays, hits, hitsByPitch, homeRuns, intentionalWalks, league, numberOfGames, numberOfGamesAsBatter, playerID, playerName, playerStint, runs, runsBattedIn, sacrificeFlies, sacrificeHits, stolenBases, strikeouts, teamID, tripples, yearID)</td><td>2</td><td>1</td></tr><tr><td>TRANSFORM_PASSTHROUGH(AtBatting, G_old, baseOnBalls, caughtStealing, doules, groundedIntoDoublePlays, hits, hitsByPitch, homeRuns, intentionalWalks, league, numberOfGames, numberOfGamesAsBatter, playerID, playerName, playerStint, runs, runsBattedIn, sacrificeFlies, sacrificeHits, stolenBases, strikeouts, teamID, tripples, yearID)</td><td>3</td><td>2</td></tr><tr><td>PROJECT(homeRuns, playerStint, groundedIntoDoublePlays, numberOfGames, AtBatting, stolenBases, tripples, hitsByPitch, teamID, numberOfGamesAsBatter, strikeouts, sacrificeFlies, caughtStealing, baseOnBalls, playerName, doules, league, yearID, hits, runsBattedIn, G_old, sacrificeHits, intentionalWalks, runs, playerID)</td><td>4</td><td>3</td></tr><tr><td>FILTER_FULL_SCAN(operator:EQ,predicate:league = &#x27;NL&#x27;)</td><td>5</td><td>4</td></tr></tbody></table><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="filter-clauses-for-aggregates"></a>FILTER Clauses for Aggregates<a class="hash-link" href="#filter-clauses-for-aggregates" title="Direct link to heading">#</a></h2><p>Atri Sharma added the filter clause for aggregates.
This feature makes it possible to write queries like this:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI sql"><pre tabindex="0" class="prism-code language-sql codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">SELECT</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">SUM</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">homeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> FILTER</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">WHERE</span><span class="token plain"> league </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;NL&#x27;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">AS</span><span class="token plain"> nlHomeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">SUM</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">homeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> FILTER</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">WHERE</span><span class="token plain"> league </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;AL&#x27;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">AS</span><span class="token plain"> alHomeRuns</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">FROM</span><span class="token plain"> baseballStats</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>If we run this query, we&#x27;ll see the following output:</p><table><thead><tr><th>nlHomeRuns</th><th>alHomeRuns</th></tr></thead><tbody><tr><td>135486</td><td>135990</td></tr></tbody></table><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="greatest-and-least"></a>greatest and least<a class="hash-link" href="#greatest-and-least" title="Direct link to heading">#</a></h2><p>Richard Startin added the <code>greatest</code> and <code>least</code> functions:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI sql"><pre tabindex="0" class="prism-code language-sql codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">SELECT</span><span class="token plain"> playerID</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> least</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">5.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">homeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">AS</span><span class="token plain"> homeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> greatest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">5.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hits</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">AS</span><span class="token plain"> hits</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">FROM</span><span class="token plain"> baseballStats</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">WHERE</span><span class="token plain"> league </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;NL&#x27;</span><span class="token plain"> </span><span class="token operator">AND</span><span class="token plain"> teamID </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;SFN&#x27;</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">GROUP</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">BY</span><span class="token plain"> playerID</span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">LIMIT</span><span class="token plain"> </span><span class="token number">5</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>If we run this query, we&#x27;ll see the following output:</p><table><thead><tr><th>playerID</th><th>homeRuns</th><th>hits</th></tr></thead><tbody><tr><td>ramirju01</td><td>0</td><td>5</td></tr><tr><td>milneed01</td><td>4</td><td>54</td></tr><tr><td>testani01</td><td>0</td><td>5</td></tr><tr><td>shawbo01</td><td>0</td><td>8</td></tr><tr><td>vogelry01</td><td>0</td><td>12</td></tr></tbody></table><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="distinctcountsmarthll"></a>DistinctCountSmartHLL<a class="hash-link" href="#distinctcountsmarthll" title="Direct link to heading">#</a></h2><p> Xiaotian (Jackie) Jiang added the <code>DistinctCountSmartHLL</code> aggregation function, which automatically converts the Set to HyperLogLog if the set size grows too big to protect the servers from running out of memory:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI sql"><pre tabindex="0" class="prism-code language-sql codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">SELECT</span><span class="token plain"> DISTINCTCOUNTSMARTHLL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">homeRuns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;hllLog2m=8;hllConversionThreshold=10&#x27;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">FROM</span><span class="token plain"> baseballStats</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>If we run this query, we&#x27;ll see the following output:</p><table><thead><tr><th>distinctcountsmarthll(homeRuns)</th></tr></thead><tbody><tr><td>66</td></tr></tbody></table><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="ui-updates"></a>UI updates<a class="hash-link" href="#ui-updates" title="Direct link to heading">#</a></h2><p>There were also a bunch of updates to the Pinot Data Explorer, by Sanket Shah and Johan Adami.</p><p>The display of reported size and estimated size is now in a human readable format:</p><p><img alt="Human readable sizes" src="/assets/images/human-readable-sizes-b8c4009dd53d23da3b8637963827a8de.png"></p><p>Fixes for the following issues:</p><ul><li>Error messages weren&#x27;t showing on the UI when an invalid operation is attempted:</li></ul><p><img alt="A backwards incompatible attempted schema change" src="/assets/images/backwards-incompatible-99886dcd0be55a8100a7d6c5f3da3bda.png"></p><ul><li>Query console goes blank on syntax error.</li><li>Query console cannot show query result when multiple columns have the same name.</li><li>Adding extra fields after <code>SELECT *</code> would throw a NullPointerException.</li><li>Some queries were returning <code>--</code> instead of <code>0</code>.</li><li>Query console couldn&#x27;t show the query result if multiple columns had the same name.</li><li>Pinot Dashboard tenant view showing the incorrect amount of servers and brokers.</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="realtimetooffline-task"></a>RealTimeToOffline Task<a class="hash-link" href="#realtimetooffline-task" title="Direct link to heading">#</a></h2><p>Xiaotian (Jackie) Jiang made some fixes to the <a href="https://dev.startree.ai/docs/pinot/recipes/real-time-offline-job" target="_blank" rel="noopener noreferrer">RealTimeToOffline job</a> to handle time gaps and proceed to the next time window when no segment matches the current one.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="empty-quickstart"></a>Empty QuickStart<a class="hash-link" href="#empty-quickstart" title="Direct link to heading">#</a></h2><p>Kenny Bastani added an empty QuickStart command, which lets you quickly spin up an empty Pinot cluster:</p><div class="codeBlockContainer_J+bg"><div class="codeBlockContent_csEI bash"><pre tabindex="0" class="prism-code language-bash codeBlock_rtdJ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_1zSZ"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> run </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -p </span><span class="token number">8000</span><span class="token plain">:8000 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -p </span><span class="token number">9000</span><span class="token plain">:9000 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> apachepinot/pinot:0.10.0 QuickStart </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -type empty</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_M3SB clean-btn">Copy</button></div></div><p>You can then ingest your own dataset without needing to worry about spinning up each of the Pinot components individually.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="data-ingestion"></a>Data Ingestion<a class="hash-link" href="#data-ingestion" title="Direct link to heading">#</a></h2><ul><li><p>Richard Startin fixed some issues with real-time ingestion where consumption of messages would stop if a bad batch of messages was consumed from Kafka.</p></li><li><p>Mohemmad Zaid Khan added the BoundedColumnValue partition function, which partitions segments based on column values.</p></li><li><p>Xiaobing Li added the fixed name segment generator, which can be used when you want to replace a specific existing segment.</p></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="other-changes"></a>Other changes<a class="hash-link" href="#other-changes" title="Direct link to heading">#</a></h2><ul><li>Richard Startin set LZ4 compression as the default for all metrics fields.</li><li>Mark Needham added the <code>ST_Within</code> geospatial function.</li><li>Rong Rong fixed a bug where query stats wouldn&#x27;t show if there was an error processing the query (e.g. if the query timed out).</li><li>Prashant Pandey fixed the query engine to handle extra columns added to a <code>SELECT *</code> statement.</li><li>Richard Startin added support for forward indexes on JSON columns.</li><li>Rong Rong added the GRPC broker request handler so that data can be streamed back from the server to the broker when processing queries.</li><li>deemoliu made it possible to add a default strategy when using the <a href="https://dev.startree.ai/docs/pinot/recipes/upserts-partial" target="_blank" rel="noopener noreferrer">partial upsert feature</a>.</li><li>Jeff Moszuti added support for the <code>TIMESTAMP</code> data type in the <a href="https://docs.pinot.apache.org/operators/configuration-recommendation-engine" target="_blank" rel="noopener noreferrer">configuration recommendation engine</a>.</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="dependency-updates"></a>Dependency updates<a class="hash-link" href="#dependency-updates" title="Direct link to heading">#</a></h2><p>The following dependencies were updated:</p><ul><li>async-http-client because the library moved to a different organization.</li><li>RoaringBitmap to 0.9.25</li><li>JsonPath to 2.7.0</li><li>Kafka to 2.8.1</li><li>Prometheus to 0.16.1</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="resources"></a>Resources<a class="hash-link" href="#resources" title="Direct link to heading">#</a></h2><p>If you want to try out Apache Pinot, the following resources will help you get started:</p><ul><li>Download page: <a href="https://pinot.apache.org/download/" target="_blank" rel="noopener noreferrer">https://pinot.apache.org/download/</a></li><li>Getting started: <a href="https://docs.pinot.apache.org/getting-started" target="_blank" rel="noopener noreferrer">https://docs.pinot.apache.org/getting-started</a></li><li>Apache Pinot Recipes: <a href="https://dev.startree.ai/docs/pinot/recipes/" target="_blank" rel="noopener noreferrer">https://dev.startree.ai/docs/pinot/recipes/</a></li><li>Join our Slack channel: <a href="https://communityinviter.com/apps/apache-pinot/apache-pinot" target="_blank" rel="noopener noreferrer">https://communityinviter.com/apps/apache-pinot/apache-pinot</a></li><li>See our upcoming events: <a href="https://www.meetup.com/apache-pinot" target="_blank" rel="noopener noreferrer">https://www.meetup.com/apache-pinot</a></li><li>Follow us on Twitter: <a href="https://twitter.com/startreedata" target="_blank" rel="noopener noreferrer">https://twitter.com/startreedata</a></li><li>Subscribe to our YouTube channel: <a href="https://www.youtube.com/c/StarTree" target="_blank" rel="noopener noreferrer">https://www.youtube.com/c/StarTree</a></li></ul></div><footer class="row docusaurus-mt-lg blogPostDetailsFull_xD8n"><div class="col"><b>Tags:</b><a class="margin-horiz--sm" href="/blog/tags/pinot">Pinot</a><a class="margin-horiz--sm" href="/blog/tags/data">Data</a><a class="margin-horiz--sm" href="/blog/tags/analytics">Analytics</a><a class="margin-horiz--sm" href="/blog/tags/user-facing-analytics">User-Facing Analytics</a><a class="margin-horiz--sm" href="/blog/tags/releases">Releases</a></div><div class="col margin-top--sm"><a href="https://github.com/apache/pinot-site/edit/dev/website/blog/2022-04-04-Announcing-Apache-Pinot-0-10.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></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><div class="pagination-nav__item"></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/blog/2021/06/16/LinkedIn-TextAnalytics"><div class="pagination-nav__sublabel">Older Post</div><div class="pagination-nav__label">Text analytics on LinkedIn Talent Insights using Apache Pinot »</div></a></div></nav></main><div class="col col--2"><div class="tableOfContents_vrFS thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#query-plans" class="table-of-contents__link">Query Plans</a></li><li><a href="#filter-clauses-for-aggregates" class="table-of-contents__link">FILTER Clauses for Aggregates</a></li><li><a href="#greatest-and-least" class="table-of-contents__link">greatest and least</a></li><li><a href="#distinctcountsmarthll" class="table-of-contents__link">DistinctCountSmartHLL</a></li><li><a href="#ui-updates" class="table-of-contents__link">UI updates</a></li><li><a href="#realtimetooffline-task" class="table-of-contents__link">RealTimeToOffline Task</a></li><li><a href="#empty-quickstart" class="table-of-contents__link">Empty QuickStart</a></li><li><a href="#data-ingestion" class="table-of-contents__link">Data Ingestion</a></li><li><a href="#other-changes" class="table-of-contents__link">Other changes</a></li><li><a href="#dependency-updates" class="table-of-contents__link">Dependency updates</a></li><li><a href="#resources" class="table-of-contents__link">Resources</a></li></ul></div></div></div></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.dfc58ce0.js"></script>
<script src="/assets/js/main.16915bd7.js"></script>
</body>
</html>