blob: d925ec7e7e102fcfaf6b26f32405e51771266e00 [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">30 posts tagged with &quot;pinot&quot; | Apache Pinot™</title><meta data-react-helmet="true" property="og:title" content="30 posts tagged with &quot;pinot&quot; | Apache Pinot™"><meta data-react-helmet="true" property="og:url" content="https://pinot.apache.org/blog/tags/pinot"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="blog_tags_posts"><meta data-react-helmet="true" name="keywords" content="Pinot,LinkedIn,Data Scaling,User-Facing Analytics,Real-time data platform"><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/tags/pinot"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/blog/tags/pinot" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://pinot.apache.org/blog/tags/pinot" 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-tags-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 class="sidebarItemLink_zyXk" 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"><header class="margin-bottom--xl"><h1>30 posts tagged with &quot;pinot&quot;</h1><a href="/blog/tags">View All Tags</a></header><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2022/04/04/Announcing-Apache-Pinot-0-10">Announcing Apache Pinot 0.10</a></h2><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"><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 text--right"><a aria-label="Read more about Announcing Apache Pinot 0.10" href="/blog/2022/04/04/Announcing-Apache-Pinot-0-10"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/06/16/LinkedIn-TextAnalytics">Text analytics on LinkedIn Talent Insights using Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-06-16T00:00:00.000Z">June 16, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>LinkedIn Talent Insights (LTI) is a platform that helps organizations understand the external labor market and their internal workforce, and enables the long term success of their employees. Users of LTI have the flexibility to construct searches using the various facets of the LinkedIn Economic Graph (skills, titles, location, company, etc.).</p><p><a href="https://engineering.linkedin.com/blog/2021/text-analytics-on-linkedin-talent-insights-using-apache-pinot" target="_blank" rel="noopener noreferrer">Read More at https://engineering.linkedin.com/blog/2021/text-analytics-on-linkedin-talent-insights-using-apache-pinot</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2021/06/ltipinot6.png" alt="Text analytics on LinkedIn Talent Insights using Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/data">Data</a><a class="margin-horiz--sm" href="/blog/tags/text-analytics">Text analytics</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</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></div><div class="col text--right"><a aria-label="Read more about Text analytics on LinkedIn Talent Insights using Apache Pinot" href="/blog/2021/06/16/LinkedIn-TextAnalytics"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/06/13/DevBlog-Geospatial">Introduction to Geospatial Queries in Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-06-13T00:00:00.000Z">June 13, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/kenny.jpeg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>Geospatial data has been widely used across the industry, spanning multiple verticals, such as ride-sharing and delivery, transportation infrastructure, defense and intel, public health. Deriving insights from timely and accurate geospatial data could enable mission-critical use cases in the organizations and fuel a vibrant marketplace across the industry. In the design document for this new Pinot feature, we discuss the challenges of analyzing geospatial at scale and propose the geospatial support in Pinot.</p><p>Read More at <a href="https://medium.com/apache-pinot-developer-blog/introduction-to-geospatial-queries-in-apache-pinot-b63e2362e2a9" target="_blank" rel="noopener noreferrer">https://medium.com/apache-pinot-developer-blog/introduction-to-geospatial-queries-in-apache-pinot-b63e2362e2a9</a></p><p><img src="https://miro.medium.com/max/1400/0*1xrDSs9lLZ5dD3zK" alt="Introduction to Geospatial Queries in Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/h-3">H3</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Introduction to Geospatial Queries in Apache Pinot" href="/blog/2021/06/13/DevBlog-Geospatial"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/04/29/Uber-Charon">Automating Merchant Live Monitoring with Real-Time Analytics - Charon</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-04-29T00:00:00.000Z">April 29, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pbs.twimg.com/profile_images/1192909783856103427/6A4s8gW2_400x400.png" alt="Uber"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer">Uber</a></div><small class="avatar__subtitle">Uber Data Team</small></div></div></header><div class="markdown"><p>At Uber, live monitoring and automation of Ops is critical to preserve marketplace health, maintain reliability, and gain efficiency in markets. By the virtue of the word “live”, this monitoring needs to show what is happening now, with prompt access to fresh data, and the ability to recommend appropriate actions based on that data. Uber’s data platform provides the self-serve tools which empower the Ops teams to build their own live monitoring tools, and support their regional teams by building rich solutions.</p><p>For this project, the requirement was to provide merchant level monitoring and handle the edge cases which remain unaddressed by the sophisticated internal marketplace management tools. We used a variety of Uber’s real-time data platform components to build a tool called Charon to reduce impact of poor marketplace reliability on the merchants.</p><p>Read More at <a href="https://eng.uber.com/charon/" target="_blank" rel="noopener noreferrer">https://eng.uber.com/charon/</a></p><p><img src="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2021/04/deliverDoor@3x-768x263.png" alt="Operating Apache Pinot at Uber Scale"></p></div><footer class="row docusaurus-mt-lg"><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/uber">Uber</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Automating Merchant Live Monitoring with Real-Time Analytics - Charon" href="/blog/2021/04/29/Uber-Charon"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/04/27/DevBlog-PinotInRetailChain">Deploying Apache Pinot at a Large Retail Chain</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-04-27T00:00:00.000Z">April 27, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain</p><p><a href="https://medium.com/apache-pinot-developer-blog/deploying-apache-pinot-at-a-large-retail-chain-42aed2921a38" target="_blank" rel="noopener noreferrer">Read More at https://medium.com/apache-pinot-developer-blog/deploying-apache-pinot-at-a-large-retail-chain-42aed2921a38</a></p><p><img src="https://miro.medium.com/max/1400/1*EtqD0vTPEe569jybXCt69w.png" alt="Deploying Apache Pinot at a Large Retail Chain"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Deploying Apache Pinot at a Large Retail Chain" href="/blog/2021/04/27/DevBlog-PinotInRetailChain"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/04/16/LinkedIn-Theta">Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-04-16T00:00:00.000Z">April 16, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>The Lambda architecture has become a popular architectural style that promises both speed and accuracy in data processing by using a hybrid approach of both batch processing and stream processing methods.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2021/pinot-and-theta-sketches" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2021/pinot-and-theta-sketches</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2021/04/thetasketches2.png" alt="From Lambda to Lambda-less Lessons learned"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches" href="/blog/2021/04/16/LinkedIn-Theta"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/04/08/DevBlog-UpsertsIntro">Introduction to Upserts in Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-04-08T00:00:00.000Z">April 8, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/kenny.jpeg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>Since the 0.6.0 release of Apache Pinot, a new feature was made available for stream ingestion that allows you to upsert events from an immutable log. Typically, upsert is a term used to describe inserting a record into a database if it does not already exist or update it if it does exist. In Apache Pinot’s case, upsert isn’t precisely the same concept, and I wanted to write this blog post to explain why it’s exciting and how you can start using it.</p><p>Read More at <a href="https://medium.com/apache-pinot-developer-blog/introduction-to-upserts-in-apache-pinot-987c12149d93" target="_blank" rel="noopener noreferrer">https://medium.com/apache-pinot-developer-blog/introduction-to-upserts-in-apache-pinot-987c12149d93</a></p><p><img src="https://miro.medium.com/max/1400/0*So3GjHjLY7DJAiaP" alt="Introduction to Upserts in Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/upsert">Upsert</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Introduction to Upserts in Apache Pinot" href="/blog/2021/04/08/DevBlog-UpsertsIntro"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/02/02/DevBlog-PrestoPinot">Real-time Analytics with Presto and Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-02-02T00:00:00.000Z">February 2, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://www.startree.ai/wp-content/uploads/2021/05/team-xiang-150x150.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>In this world, most analytics products either focus on ad-hoc analytics, which requires query flexibility without guaranteed latency, or low latency analytics with limited query capability. In this blog, we will explore how to get the best of both worlds using Apache Pinot and Presto.</p><p><a href="https://www.startree.ai/blogs/real-time-analytics-with-presto-and-apache-pinot-part-i/" target="_blank" rel="noopener noreferrer">Read Part 1 at https://www.startree.ai/blogs/real-time-analytics-with-presto-and-apache-pinot-part-i/</a></p><p><a href="https://www.startree.ai/blogs/real-time-analytics-with-presto-and-apache-pinot-part-ii/" target="_blank" rel="noopener noreferrer">Read Part 2 at https://www.startree.ai/blogs/real-time-analytics-with-presto-and-apache-pinot-part-ii/</a></p><p><img src="https://miro.medium.com/max/1400/0*hJc6aV9aBJaKyXcx" alt="Real-time Analytics with Presto and Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/presto">Presto</a><a class="margin-horiz--sm" href="/blog/tags/trino">Trino</a><a class="margin-horiz--sm" href="/blog/tags/presto-sql">PrestoSQL</a><a class="margin-horiz--sm" href="/blog/tags/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Real-time Analytics with Presto and Apache Pinot" href="/blog/2021/02/02/DevBlog-PrestoPinot"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2021/01/08/DevBlog-DebeziumCDC">Change Data Analysis with Debezium and Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2021-01-08T00:00:00.000Z">January 8, 2021</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/kenny.jpeg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>In this blog post, we’re going to explore an exciting new world of real-time analytics based on combining the popular CDC tool, Debezium, with the real-time OLAP datastore, Apache Pinot.</p><p><a href="https://medium.com/apache-pinot-developer-blog/change-data-analysis-with-debezium-and-apache-pinot-b4093dc178a7" target="_blank" rel="noopener noreferrer">Read More at https://medium.com/apache-pinot-developer-blog/change-data-analysis-with-debezium-and-apache-pinot-b4093dc178a7</a></p><p><img src="https://miro.medium.com/max/1400/1*dnSikeGxTrfrF95niX16PA.png" alt="Change Data Analysis with Debezium and Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/debezium">Debezium</a><a class="margin-horiz--sm" href="/blog/tags/cdc">CDC</a><a class="margin-horiz--sm" href="/blog/tags/change-data-analysis">Change Data Analysis</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Change Data Analysis with Debezium and Apache Pinot" href="/blog/2021/01/08/DevBlog-DebeziumCDC"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/12/01/LinkedIn-Lamda">From Lambda to Lambda-less Lessons learned</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-12-01T00:00:00.000Z">December 1, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>The Lambda architecture has become a popular architectural style that promises both speed and accuracy in data processing by using a hybrid approach of both batch processing and stream processing methods.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2020/lambda-to-lambda-less-architecture" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2020/lambda-to-lambda-less-architecture</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/03/pinotincubator2.png" alt="From Lambda to Lambda-less Lessons learned"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about From Lambda to Lambda-less Lessons learned" href="/blog/2020/12/01/LinkedIn-Lamda"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/10/20/Uber-Operating">Operating Apache Pinot at Uber Scale</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-10-20T00:00:00.000Z">October 20, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pbs.twimg.com/profile_images/1192909783856103427/6A4s8gW2_400x400.png" alt="Uber"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer">Uber</a></div><small class="avatar__subtitle">Uber Data Team</small></div></div></header><div class="markdown"><p>Uber has a complex marketplace consisting of riders, drivers, eaters, restaurants and so on. Operating that marketplace at a global scale requires real-time intelligence and decision making. For instance, identifying delayed Uber Eats orders or abandoned carts helps to enable our community operations team to take corrective action. Having a real-time dashboard of different events such as consumer demand, driver availability, or trips happening in a city is crucial for day-to-day operation, incident triaging, and financial intelligence.</p><p>Read More at <a href="https://eng.uber.com/operating-apache-pinot/" target="_blank" rel="noopener noreferrer">https://eng.uber.com/operating-apache-pinot/</a></p><p><img src="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2020/10/1224-5.png" alt="Operating Apache Pinot at Uber Scale"></p></div><footer class="row docusaurus-mt-lg"><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/uber">Uber</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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/financial-intelligence">financial intelligence</a></div><div class="col text--right"><a aria-label="Read more about Operating Apache Pinot at Uber Scale" href="/blog/2020/10/20/Uber-Operating"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/10/16/DevBlog-TwitterTrollAnalysis">Deep Analysis of Russian Twitter Trolls</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-10-16T00:00:00.000Z">October 16, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/kenny.jpeg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>The history behind Russian disinformation is a dense and continuously evolving subject. The world’s best research hasn’t seemed to hit the mainstream yet, which made this an excellent opportunity to see if I could use some open source tooling to surface new analytical evidence.</p><p>In this blog post, I’ll show you how to use Apache Pinot and Superset to analyze 3 million tweets by the Internet Research Agency (IRA) open-sourced by FiveThirtyEight.</p><p><a href="https://towardsdatascience.com/a-deep-analysis-of-russian-trolls-with-apache-pinot-and-superset-590c8c4d1843" target="_blank" rel="noopener noreferrer">Read More at https://towardsdatascience.com/a-deep-analysis-of-russian-trolls-with-apache-pinot-and-superset-590c8c4d1843</a></p><p><img src="https://miro.medium.com/max/4320/0*iqUTy0GkLFTcSYlR.png" alt="Deep Analysis of Russian Twitter Trolls"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Deep Analysis of Russian Twitter Trolls" href="/blog/2020/10/16/DevBlog-TwitterTrollAnalysis"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/08/08/DevBlog-IngestPlugins">Leverage Plugins to Ingest Parquet Files from S3 in Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-08-08T00:00:00.000Z">August 8, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>One of the primary advantages of using Pinot is its pluggable architecture. The plugins make it easy to add support for any third-party system which can be an execution framework, a filesystem, or input format.</p><p>In this tutorial, we will use three such plugins to easily ingest data and push it to our Pinot cluster. The plugins we will be using are -</p><ul><li>pinot-batch-ingestion-spark</li><li>pinot-s3</li><li>pinot-parquet</li></ul><p><a href="https://medium.com/apache-pinot-developer-blog/leverage-plugins-to-ingest-parquet-files-from-s3-in-pinot-decb12e4d09d" target="_blank" rel="noopener noreferrer">Read more at https://medium.com/apache-pinot-developer-blog/leverage-plugins-to-ingest-parquet-files-from-s3-in-pinot-decb12e4d09d</a></p><p><img src="https://miro.medium.com/max/6000/0*afbs7azGt-GpSVeP" alt="Leverage Plugins to Ingest Parquet Files from S3 in Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/sla">SLA</a><a class="margin-horiz--sm" href="/blog/tags/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Leverage Plugins to Ingest Parquet Files from S3 in Pinot" href="/blog/2020/08/08/DevBlog-IngestPlugins"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/08/08/DevBlog-SLAApps">Achieving 99th percentile latency SLA using Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-08-08T00:00:00.000Z">August 8, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>In this article, we talk about how users can build critical site-facing analytical applications requiring high throughput and strict p99th query latency SLA using Apache Pinot.</p><p><a href="https://medium.com/apache-pinot-developer-blog/achieving-99th-percentile-latency-sla-using-apache-pinot-2ba4ce1d9eff" target="_blank" rel="noopener noreferrer">Read more at https://medium.com/apache-pinot-developer-blog/achieving-99th-percentile-latency-sla-using-apache-pinot-2ba4ce1d9eff</a></p><p><img src="https://miro.medium.com/max/1140/0*VCPyrmNB2PteCmnC" alt="Achieving 99th percentile latency SLA using Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/sla">SLA</a><a class="margin-horiz--sm" href="/blog/tags/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Achieving 99th percentile latency SLA using Apache Pinot" href="/blog/2020/08/08/DevBlog-SLAApps"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/08/08/DevBlog-ScalarUDFs">Utilize UDFs to Supercharge Queries in Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-08-08T00:00:00.000Z">August 8, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>Apache Pinot is a realtime distributed OLAP datastore that can answer hundreds of thousands of queries with millisecond latencies. You can head over to <a href="https://pinot.apache.org/" target="_blank" rel="noopener noreferrer">https://pinot.apache.org/</a> to get started with Apache Pinot.</p><p>While using any database, we can come across a scenario where a function required for the query is not supported out of the box. In such time, we have to resort to raising a pull request for a new function or finding a tedious workaround.</p><p>Scalar Functions that allow users to write and add their functions as a plugin.</p><p><a href="https://medium.com/apache-pinot-developer-blog/utilize-udfs-to-supercharge-queries-in-apache-pinot-e488a0f164f1" target="_blank" rel="noopener noreferrer">Read more at https://medium.com/apache-pinot-developer-blog/utilize-udfs-to-supercharge-queries-in-apache-pinot-e488a0f164f1</a></p><p><img src="https://miro.medium.com/max/10368/0*VtswFI-HcaXyyjhK" alt="Utilize UDFs to Supercharge Queries in Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/sla">SLA</a><a class="margin-horiz--sm" href="/blog/tags/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Utilize UDFs to Supercharge Queries in Apache Pinot" href="/blog/2020/08/08/DevBlog-ScalarUDFs"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/08/08/DevBlog-PinotMonitoring">Monitoring Apache Pinot with JMX, Prometheus and Grafana</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-08-08T00:00:00.000Z">August 8, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="PinotDev"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">PinotDev</a></div><small class="avatar__subtitle">Pinot Editorial Team</small></div></div></header><div class="markdown"><p>I may be kicking open doors here, but a simple question has always helped me start from somewhere. When it comes to investigating degraded user experience caused by latency, can I observe high resource usage on all or some nodes of the system?</p><p><a href="https://medium.com/apache-pinot-developer-blog/monitoring-apache-pinot-99034050c1a5" target="_blank" rel="noopener noreferrer">Read more at https://medium.com/apache-pinot-developer-blog/monitoring-apache-pinot-99034050c1a5</a></p><p><img src="https://miro.medium.com/max/1400/1*5kWginewoWzzQHQoZdPAGQ.png" alt="Monitoring Apache Pinot with JMX, Prometheus and Grafana"></p></div><footer class="row docusaurus-mt-lg"><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/monitoring">Monitoring</a><a class="margin-horiz--sm" href="/blog/tags/jmx">JMX</a><a class="margin-horiz--sm" href="/blog/tags/prometheus">Prometheus</a><a class="margin-horiz--sm" href="/blog/tags/grafana">Grafana</a><a class="margin-horiz--sm" href="/blog/tags/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Monitoring Apache Pinot with JMX, Prometheus and Grafana" href="/blog/2020/08/08/DevBlog-PinotMonitoring"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/07/28/DevBlog-AnomalyDetection">Building a culture around metrics and anomaly detection</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-07-28T00:00:00.000Z">July 28, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>Anomaly detection is a very broad term. Usually it means that you want to see if things are running as usual. This could go from your business metrics down to the lowest level of how your systems are running. Anomaly detection is an entire process. It’s not just a tool that you get out of the box that measures time series data. Similar to DevOps, anomaly detection is a culture of different roles engaging in a process that combines tooling with human analysis.</p><p>Read More at <a href="https://medium.com/apache-pinot-developer-blog/building-a-culture-around-metrics-and-anomaly-detection-da740960fcc2" target="_blank" rel="noopener noreferrer">https://medium.com/apache-pinot-developer-blog/building-a-culture-around-metrics-and-anomaly-detection-da740960fcc2</a></p><p><img src="https://miro.medium.com/max/1400/0*xYm2ZURZVpyJ1JQ5" alt="Building a culture around metrics and anomaly detection"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Building a culture around metrics and anomaly detection" href="/blog/2020/07/28/DevBlog-AnomalyDetection"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/07/28/DevBlog-DevUpStack">Moving developers up the stack with Apache Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-07-28T00:00:00.000Z">July 28, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>Once upon a time, an internet company named LinkedIn faced the challenge of having petabytes of connected data with no way to analyze it in real-time. As this was a problem that was the first of its kind, there was only one solution. The company put together a talented team of engineers and tasked them with building the right tool for the job. Today, that tool goes by the name of Apache Pinot.</p><p>Read More at <a href="https://medium.com/apache-pinot-developer-blog/moving-developers-up-the-stack-with-apache-pinot-29d36717a3f4" target="_blank" rel="noopener noreferrer">https://medium.com/apache-pinot-developer-blog/moving-developers-up-the-stack-with-apache-pinot-29d36717a3f4</a></p><p><img src="https://miro.medium.com/max/1400/1*dnSikeGxTrfrF95niX16PA.png" alt="Moving developers up the stack with Apache Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Moving developers up the stack with Apache Pinot" href="/blog/2020/07/28/DevBlog-DevUpStack"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/07/14/LinkedIn-BatchRealtime">Bridging batch and stream processing for the Recruiter usage statistics dashboard</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-07-14T00:00:00.000Z">July 14, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>Batch and streaming computations are often combined together in the Lambda architecture,
but carry the cost of maintaining two different code bases for the same logic.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2020/bridging-batch-and-stream-processing" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2020/bridging-batch-and-stream-processing</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/07/bridging-1.png" alt="Bridging batch and stream processing for the Recruiter usage statistics dashboard"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Bridging batch and stream processing for the Recruiter usage statistics dashboard" href="/blog/2020/07/14/LinkedIn-BatchRealtime"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/06/29/LinkedIn-TalentInsight">Building LinkedIn Talent Insights to democratize data-driven decision making</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-06-29T00:00:00.000Z">June 29, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>LinkedIn is a mission-driven organization, and we take our mission of “connecting the world&#x27;s professionals to make them more productive and successful” very seriously.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2020/building-linkedin-talent-insights" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2020/building-linkedin-talent-insights</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/06/lti-1.png" alt="Building LinkedIn Talent Insights to democratize data-driven decision making"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Building LinkedIn Talent Insights to democratize data-driven decision making" href="/blog/2020/06/29/LinkedIn-TalentInsight"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/06/25/LinkedIn-SmartAlerts">Monitoring business performance data with ThirdEye smart alerts</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-06-25T00:00:00.000Z">June 25, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>Explain how ThirdEye smart alerts and automated dashboards helped the LinkedIn Premium business operations team monitor key metrics—such as new free trial signups—for the timely detection of outliers in business performance data.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2020/monitoring-business-performance-data-with-thirdeye-smart-alerts" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2020/monitoring-business-performance-data-with-thirdeye-smart-alerts</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/06/thirdeye_business_performance-3.png" alt="Monitoring business performance data with ThirdEye smart alerts"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Monitoring business performance data with ThirdEye smart alerts" href="/blog/2020/06/25/LinkedIn-SmartAlerts"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/04/10/DevBlog-AnalyzeGitEvents">Using Apache Pinot and Kafka to Analyze GitHub Events</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-04-10T00:00:00.000Z">April 10, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pinot.apache.org/authors/pinot_team.jpg" alt="Kenny Bastani"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://medium.com/apache-pinot-developer-blog" target="_blank" rel="noopener noreferrer">Kenny Bastani</a></div><small class="avatar__subtitle">Kenny Bastani</small></div></div></header><div class="markdown"><p>In this blog post, we’ll show you how Pinot and Kafka can be used together to ingest, query, and visualize event streams sourced from the public GitHub API. For the step-by-step instructions, please visit our documentation, which will guide you through the specifics of running this example in your development environment.</p><p>Read More at <a href="https://medium.com/apache-pinot-developer-blog/using-apache-pinot-and-kafka-to-analyze-github-events-93cdcb57d5f7" target="_blank" rel="noopener noreferrer">https://medium.com/apache-pinot-developer-blog/using-apache-pinot-and-kafka-to-analyze-github-events-93cdcb57d5f7</a></p><p><img src="https://miro.medium.com/max/4728/1*eR64jBH1ZvC3uNfPP56p5g.png" alt="Using Apache Pinot and Kafka to Analyze GitHub Events"></p></div><footer class="row docusaurus-mt-lg"><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/dev-blog">DevBlog</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Using Apache Pinot and Kafka to Analyze GitHub Events" href="/blog/2020/04/10/DevBlog-AnalyzeGitEvents"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/02/20/LinkedIn-Thirdeye">Analyzing anomalies with ThirdEye</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-02-20T00:00:00.000Z">February 20, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>Focus on the behind-the-scenes functionalities of ThirdEye that analyze the multi-dimensional time series data
and help our engineers understand why these anomalies happened through a dimension heatmap</p><p><a href="https://engineering.linkedin.com/blog/2020/analyzing-anomalies-with-thirdeye" target="_blank" rel="noopener noreferrer">Read More at https://engineering.linkedin.com/blog/2020/analyzing-anomalies-with-thirdeye</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/02/datacube-1.png" alt="Analyzing anomalies with ThirdEye"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Analyzing anomalies with ThirdEye" href="/blog/2020/02/20/LinkedIn-Thirdeye"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2020/01/15/Pinot-Presto-SQL">Engineering SQL Support on Apache Pinot at Uber</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2020-01-15T00:00:00.000Z">January 15, 2020</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pbs.twimg.com/profile_images/1192909783856103427/6A4s8gW2_400x400.png" alt="Uber"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer">Uber</a></div><small class="avatar__subtitle">Uber Data Team</small></div></div></header><div class="markdown"><p>Uber leverages real-time analytics on aggregate data to improve the user experience across our products, from fighting fraudulent behavior on Uber Eats to forecasting demand on our platform.</p><p>To resolve these issues, we built a solution that linked Presto, a query engine that supports full ANSI SQL, and Pinot, a real-time OLAP (online analytical processing) datastore. This married solution allows users to write ad-hoc SQL queries, empowering teams to unlock significant analysis capabilities.</p><p><a href="https://eng.uber.com/engineering-sql-support-on-apache-pinot/" target="_blank" rel="noopener noreferrer">Read More at https://eng.uber.com/engineering-sql-support-on-apache-pinot/</a></p><p><img src="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2020/01/Header-SQL-768x329.png" alt="SQL Support on Apache Pinot at Uber"></p></div><footer class="row docusaurus-mt-lg"><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/uber">Uber</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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/presto">Presto</a><a class="margin-horiz--sm" href="/blog/tags/sql">SQL</a></div><div class="col text--right"><a aria-label="Read more about Engineering SQL Support on Apache Pinot at Uber" href="/blog/2020/01/15/Pinot-Presto-SQL"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2019/07/11/LinkedIn-AutoTune">Auto-tuning Pinot real-time consumption</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2019-07-11T00:00:00.000Z">July 11, 2019</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>Focus on Auto tuning Pinot, a scalable distributed columnar OLAP data store developed at LinkedIn, delivers real-time analytics for site-facing use cases such as LinkedIn&#x27;s Who viewed my profile, Talent insights, and more.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2020/bridging-batch-and-stream-processing" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2020/bridging-batch-and-stream-processing</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/07/bridging-1.png" alt="Bridging batch and stream processing for the Recruiter usage statistics dashboard"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Auto-tuning Pinot real-time consumption" href="/blog/2019/07/11/LinkedIn-AutoTune"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2019/06/14/LinkedIn-StarTree">Star-tree index - Powering fast aggregations on Pinot</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2019-06-14T00:00:00.000Z">June 14, 2019</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>Introduced Star-Tree index to utilize the pre-aggregated documents in a smart way that achieves low query latencies,
while using the storage space efficiently.</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2019/06/star-tree-index--powering-fast-aggregations-on-pinot" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2019/06/star-tree-index--powering-fast-aggregations-on-pinot</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/06/startree3.png" alt="Star-tree index - Powering fast aggregations on Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about Star-tree index - Powering fast aggregations on Pinot" href="/blog/2019/06/14/LinkedIn-StarTree"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2019/01/09/LinkedIn-IntroThirdEye">Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2019-01-09T00:00:00.000Z">January 9, 2019</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>ThirdEye is a comprehensive platform for real-time monitoring of metrics that covers a wide variety of use-cases.
LinkedIn relies on ThirdEye to monitor site performance, track member growth, understand adoption of new features,
flag sustained attempts to circumvent system security, and many other areas</p><p>Read More at <a href="https://engineering.linkedin.com/blog/2019/01/introducing-thirdeye--linkedins-business-wide-monitoring-platfor" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/blog/2019/01/introducing-thirdeye--linkedins-business-wide-monitoring-platfor</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/06/startree3.png" alt="Star-tree index - Powering fast aggregations on Pinot"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</a><a class="margin-horiz--sm" href="/blog/tags/third-eye">ThirdEye</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></div><div class="col text--right"><a aria-label="Read more about Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform" href="/blog/2019/01/09/LinkedIn-IntroThirdEye"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2017/09/17/Restaurant-Manager">Engineering Restaurant Manager - UberEATS Analytics Dashboard</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2017-09-17T00:00:00.000Z">September 17, 2017</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://pbs.twimg.com/profile_images/1192909783856103427/6A4s8gW2_400x400.png" alt="Uber"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://eng.uber.com/category/articles/uberdata/" target="_blank" rel="noopener noreferrer">Uber</a></div><small class="avatar__subtitle">Uber Data Team</small></div></div></header><div class="markdown"><p>At Uber, we use data analytics to architect more magical user experiences across our products. Whenever possible, we harness these data engineering capabilities to empower our partners to better serve their customers. For instance, in late 2016, the UberEATS engineering team built a comprehensive analytics dashboard that provides restaurant partners with additional insights about the health of their business.</p><p>Read More at <a href="https://eng.uber.com/restaurant-manager/" target="_blank" rel="noopener noreferrer">https://eng.uber.com/restaurant-manager/</a></p><p><img src="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2017/09/image4-2.png" alt="Engineering Restaurant Manager - UberEATS Analytics Dashboard"></p></div><footer class="row docusaurus-mt-lg"><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/uber-data">Uber Data</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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/financial-intelligence">financial intelligence</a></div><div class="col text--right"><a aria-label="Read more about Engineering Restaurant Manager - UberEATS Analytics Dashboard" href="/blog/2017/09/17/Restaurant-Manager"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2015/06/10/Open-Sourcing-Pinot">Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2015-06-10T00:00:00.000Z">June 10, 2015</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://github.com/kishoreg" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://avatars.githubusercontent.com/kishoreg" alt="Kishore Gopalakrishna"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://github.com/kishoreg" target="_blank" rel="noopener noreferrer">Kishore Gopalakrishna</a></div><small class="avatar__subtitle">Apache Pinot Team</small></div></div></header><div class="markdown"><p>LinkedIn’s real-time analytics infrastructure, that we built to allow us to slice and dice across billions of rows in real-time across a wide variety of products. Read More at (<a href="https://engineering.linkedin.com/pinot/open-sourcing-pinot-scaling-wall-real-time-analytics" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/pinot/open-sourcing-pinot-scaling-wall-real-time-analytics</a>)</p></div><footer class="row docusaurus-mt-lg"><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/a-b-testing">A/B Testing</a><a class="margin-horiz--sm" href="/blog/tags/infrastructure">Infrastructure</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></div><div class="col text--right"><a aria-label="Read more about Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics" href="/blog/2015/06/10/Open-Sourcing-Pinot"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="blogPostTitle_d4p0"><a href="/blog/2015/05/16/LinkedIn-Scaling">A Brief History of Scaling LinkedIn</a></h2><div class="blogPostData_-Im+ margin-vert--md"><time datetime="2015-05-16T00:00:00.000Z">May 16, 2015</time> · One min read</div><div class="avatar margin-vert--md"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer" class="avatar__photo-link avatar__photo"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Linkedin_icon.svg/512px-Linkedin_icon.svg.png" alt="LinkedIn"></a><div class="avatar__intro"><div class="avatar__name"><a href="https://engineering.linkedin.com/blog/topic/pinot" target="_blank" rel="noopener noreferrer">LinkedIn</a></div><small class="avatar__subtitle">LinkedIn Engineering Team</small></div></div></header><div class="markdown"><p>LinkedIn started in 2003 with the goal of connecting to your network for better job opportunities. It had only 2,700 members the first week. Fast forward many years, and LinkedIn’s product portfolio, member base, and server load has grown tremendously.</p><p>Today, LinkedIn operates globally with more than 350 million members. We serve tens of thousands of web pages every second of every day. We&#x27;ve hit our mobile moment where mobile accounts for more than 50 percent of all global traffic. All those requests are fetching data from our backend systems, which in turn handle millions of queries per second.</p><p>Read More at <a href="https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin" target="_blank" rel="noopener noreferrer">https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin</a></p><p><img src="https://content.linkedin.com/content/dam/engineering/en-us/blog/migrated/data_centers_pops_0.png" alt="A Brief History of Scaling LinkedIn"></p></div><footer class="row docusaurus-mt-lg"><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/linked-in">LinkedIn</a><a class="margin-horiz--sm" href="/blog/tags/real-time-data-platform">real-time data platform</a><a class="margin-horiz--sm" href="/blog/tags/realtime">Realtime</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></div><div class="col text--right"><a aria-label="Read more about A Brief History of Scaling LinkedIn" href="/blog/2015/05/16/LinkedIn-Scaling"><b>Read More</b></a></div></footer></article></main></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>