| <!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)">'NL'</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'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 = 'NL')</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)">'NL'</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)">'AL'</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'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)">'NL'</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)">'SFN'</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'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)">'hllLog2m=8;hllConversionThreshold=10'</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'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'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'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'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> |