You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2025/02/19 00:15:14 UTC

(pinot-site) branch new-static-prod updated: Remove used pages

This is an automated email from the ASF dual-hosted git repository.

xiangfu pushed a commit to branch new-static-prod
in repository https://gitbox.apache.org/repos/asf/pinot-site.git


The following commit(s) were added to refs/heads/new-static-prod by this push:
     new 395b998d Remove used pages
395b998d is described below

commit 395b998d8bc335893a5e4a80ede7db7a6b59ec74
Author: Xiang Fu <xi...@gmail.com>
AuthorDate: Tue Feb 18 16:15:04 2025 -0800

    Remove used pages
---
 about.html                                         |   1 -
 about.txt                                          |  14 --
 blog.html                                          |   1 -
 blog.txt                                           |  13 --
 blog/2015/05/16/LinkedIn-Scaling.html              |   1 -
 blog/2015/05/16/LinkedIn-Scaling.txt               |  17 --
 blog/2015/06/10/Open-Sourcing-Pinot.html           |   1 -
 blog/2015/06/10/Open-Sourcing-Pinot.txt            |  17 --
 blog/2017/09/17/Restaurant-Manager.html            |   1 -
 blog/2017/09/17/Restaurant-Manager.txt             |  17 --
 blog/2019/01/09/LinkedIn-IntroThirdEye.html        |   1 -
 blog/2019/01/09/LinkedIn-IntroThirdEye.txt         |  17 --
 blog/2019/06/14/LinkedIn-StarTree.html             |   1 -
 blog/2019/06/14/LinkedIn-StarTree.txt              |  17 --
 blog/2019/07/11/LinkedIn-AutoTune.html             |   1 -
 blog/2019/07/11/LinkedIn-AutoTune.txt              |  17 --
 blog/2020/01/15/Pinot-Presto-SQL.html              |   1 -
 blog/2020/01/15/Pinot-Presto-SQL.txt               |  17 --
 blog/2020/02/20/LinkedIn-Thirdeye.html             |   1 -
 blog/2020/02/20/LinkedIn-Thirdeye.txt              |  17 --
 blog/2020/04/10/DevBlog-AnalyzeGitEvents.html      |   1 -
 blog/2020/04/10/DevBlog-AnalyzeGitEvents.txt       |  17 --
 blog/2020/06/25/LinkedIn-SmartAlerts.html          |   1 -
 blog/2020/06/25/LinkedIn-SmartAlerts.txt           |  17 --
 blog/2020/06/29/LinkedIn-TalentInsight.html        |   1 -
 blog/2020/06/29/LinkedIn-TalentInsight.txt         |  17 --
 blog/2020/07/14/LinkedIn-BatchRealtime.html        |   1 -
 blog/2020/07/14/LinkedIn-BatchRealtime.txt         |  17 --
 blog/2020/07/28/DevBlog-AnomalyDetection.html      |   1 -
 blog/2020/07/28/DevBlog-AnomalyDetection.txt       |  17 --
 blog/2020/07/28/DevBlog-DevUpStack.html            |   1 -
 blog/2020/07/28/DevBlog-DevUpStack.txt             |  17 --
 blog/2020/08/08/DevBlog-IngestPlugins.html         |   1 -
 blog/2020/08/08/DevBlog-IngestPlugins.txt          |  17 --
 blog/2020/08/08/DevBlog-PinotMonitoring.html       |   1 -
 blog/2020/08/08/DevBlog-PinotMonitoring.txt        |  17 --
 blog/2020/08/08/DevBlog-SLAApps.html               |   1 -
 blog/2020/08/08/DevBlog-SLAApps.txt                |  17 --
 blog/2020/08/08/DevBlog-ScalarUDFs.html            |   1 -
 blog/2020/08/08/DevBlog-ScalarUDFs.txt             |  17 --
 blog/2020/10/16/DevBlog-TwitterTrollAnalysis.html  |   1 -
 blog/2020/10/16/DevBlog-TwitterTrollAnalysis.txt   |  17 --
 blog/2020/10/20/Uber-Operating.html                |   1 -
 blog/2020/10/20/Uber-Operating.txt                 |  17 --
 blog/2020/12/01/LinkedIn-Lamda.html                |   1 -
 blog/2020/12/01/LinkedIn-Lamda.txt                 |  17 --
 blog/2021/01/08/DevBlog-DebeziumCDC.html           |   1 -
 blog/2021/01/08/DevBlog-DebeziumCDC.txt            |  17 --
 blog/2021/02/02/DevBlog-PrestoPinot.html           |   1 -
 blog/2021/02/02/DevBlog-PrestoPinot.txt            |  17 --
 blog/2021/04/08/DevBlog-UpsertsIntro.html          |   1 -
 blog/2021/04/08/DevBlog-UpsertsIntro.txt           |  17 --
 blog/2021/04/16/LinkedIn-Theta.html                |   1 -
 blog/2021/04/16/LinkedIn-Theta.txt                 |  17 --
 blog/2021/04/27/DevBlog-PinotInRetailChain.html    |   1 -
 blog/2021/04/27/DevBlog-PinotInRetailChain.txt     |  17 --
 blog/2021/04/29/Uber-Charon.html                   |   1 -
 blog/2021/04/29/Uber-Charon.txt                    |  17 --
 blog/2021/06/13/DevBlog-Geospatial.html            |   1 -
 blog/2021/06/13/DevBlog-Geospatial.txt             |  17 --
 blog/2021/06/16/LinkedIn-TextAnalytics.html        |   1 -
 blog/2021/06/16/LinkedIn-TextAnalytics.txt         |  17 --
 blog/2022/04/04/Announcing-Apache-Pinot-0-10.html  |  22 ---
 blog/2022/04/04/Announcing-Apache-Pinot-0-10.txt   |  19 --
 ...Function-For-Time-Series-Datasets-In-Pinot.html |  26 ---
 ...-Function-For-Time-Series-Datasets-In-Pinot.txt |  18 --
 .../08/Apache Pinot-How-do-I-see-my-indexes.html   |  40 ----
 .../11/08/Apache Pinot-How-do-I-see-my-indexes.txt |  18 --
 blog/2022/11/17/Apache Pinot-Inserts-from-SQL.html |  46 -----
 blog/2022/11/17/Apache Pinot-Inserts-from-SQL.txt  |  18 --
 .../2022/11/22/Apache-Pinot-Timestamp-Indexes.html | 102 ----------
 blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.txt |  19 --
 .../Apache-Pinot-Pausing-Real-Time-Ingestion.html  | 129 -------------
 .../Apache-Pinot-Pausing-Real-Time-Ingestion.txt   |  18 --
 ...he-Pinot-Deduplication-on-Real-Time-Tables.html | 206 ---------------------
 ...che-Pinot-Deduplication-on-Real-Time-Tables.txt |  18 --
 ...ache-Pinot-0-12-Configurable-Time-Boundary.html |  16 --
 ...pache-Pinot-0-12-Configurable-Time-Boundary.txt |  18 --
 .../30/Apache-Pinot-0-12-Consumer-Record-Lag.html  | 141 --------------
 .../30/Apache-Pinot-0-12-Consumer-Record-Lag.txt   |  18 --
 .../05/11/Geospatial-Indexing-in-Apache-Pinot.html |  94 ----------
 .../05/11/Geospatial-Indexing-in-Apache-Pinot.txt  |  18 --
 ...erstanding-the-impact-on-query-performance.html |  78 --------
 ...derstanding-the-impact-on-query-performance.txt |  18 --
 ...l-for-getting-started-a-step-by-step-guide.html |  45 -----
 ...al-for-getting-started-a-step-by-step-guide.txt |  18 --
 ...capture-with-apache-pinot-how-does-it-work.html |  85 ---------
 ...-capture-with-apache-pinot-how-does-it-work.txt |  18 --
 ...-streaming-data-from-kafka-to-apache-pinot.html | 187 -------------------
 ...t-streaming-data-from-kafka-to-apache-pinot.txt |  18 --
 ...th-apache-kafka-apache-pinot-and-streamlit.html | 128 -------------
 ...ith-apache-kafka-apache-pinot-and-streamlit.txt |  18 --
 ...-understanding-the-impact-in-real-customer.html |   1 -
 ...3-understanding-the-impact-in-real-customer.txt |  17 --
 ...nabled-tables-in-apache-pinot-3f30657aa077.html |  11 --
 ...enabled-tables-in-apache-pinot-3f30657aa077.txt |  18 --
 blog/2023/09/19/Annoucing-Apache-Pinot-1-0.html    |  38 ----
 blog/2023/09/19/Annoucing-Apache-Pinot-1-0.txt     |  19 --
 blog/2024/08/07/AWSxPinot.html                     |   1 -
 blog/2024/08/07/AWSxPinot.txt                      |  17 --
 blog/page/1.html                                   |   1 -
 blog/page/1.txt                                    |  93 ----------
 blog/page/10.html                                  |   1 -
 blog/page/10.txt                                   |  29 ---
 blog/page/2.html                                   |   1 -
 blog/page/2.txt                                    |  81 --------
 blog/page/3.html                                   |   1 -
 blog/page/3.txt                                    |  74 --------
 blog/page/4.html                                   |   1 -
 blog/page/4.txt                                    |  84 ---------
 blog/page/5.html                                   |   1 -
 blog/page/5.txt                                    |  46 -----
 blog/page/6.html                                   |   1 -
 blog/page/6.txt                                    |  48 -----
 blog/page/7.html                                   |   1 -
 blog/page/7.txt                                    |  48 -----
 blog/page/8.html                                   |   1 -
 blog/page/8.txt                                    |  48 -----
 blog/page/9.html                                   |   1 -
 blog/page/9.txt                                    |  46 -----
 download.html                                      |   1 -
 download.txt                                       |  13 --
 powered-by.html                                    |   1 -
 powered-by.txt                                     |  15 --
 who-uses.html                                      |   1 -
 who-uses.txt                                       |  14 --
 who_uses.html                                      |   1 -
 who_uses.txt                                       |  14 --
 128 files changed, 2957 deletions(-)

diff --git a/about.html b/about.html
deleted file mode 100644
index a57e704a..00000000
--- a/about.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac [...]
\ No newline at end of file
diff --git a/about.txt b/about.txt
deleted file mode 100644
index c68efb9f..00000000
--- a/about.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["about",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-8:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-d:I[413,["413","static/chunks/413-f9f40b83f7bb3f22.js","301","static/chunks/app/about/page-1c4be2855b19bdcc.js"],"Image"]
-e:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"About | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog.html b/blog.html
deleted file mode 100644
index 15f06bc6..00000000
--- a/blog.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac [...]
\ No newline at end of file
diff --git a/blog.txt b/blog.txt
deleted file mode 100644
index f76c7935..00000000
--- a/blog.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-8:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-4aeb45b849e53ba3.js"],""]
-d:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Blog | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical","h [...]
-c:null
diff --git a/blog/2015/05/16/LinkedIn-Scaling.html b/blog/2015/05/16/LinkedIn-Scaling.html
deleted file mode 100644
index ed163b61..00000000
--- a/blog/2015/05/16/LinkedIn-Scaling.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/en-us/blog/migrated/data_centers_pops_0.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.cs [...]
\ No newline at end of file
diff --git a/blog/2015/05/16/LinkedIn-Scaling.txt b/blog/2015/05/16/LinkedIn-Scaling.txt
deleted file mode 100644
index 0dbff709..00000000
--- a/blog/2015/05/16/LinkedIn-Scaling.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2015/05/16/LinkedIn-Scaling","c"],{"children":["__PAGE__?{\"slug\":[\"2015\",\"05\",\"16\",\"LinkedIn-Scaling\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"A Brief History of Scaling LinkedIn | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"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  [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"A Brief History of Scaling LinkedIn\",\"datePublished\":\"2015-05-16T00:00:00.000Z\",\"dateModified\":\"2015-05-16T00:00:00.000Z\",\"description\":\"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 Linked [...]
-d:null
diff --git a/blog/2015/06/10/Open-Sourcing-Pinot.html b/blog/2015/06/10/Open-Sourcing-Pinot.html
deleted file mode 100644
index 131316d1..00000000
--- a/blog/2015/06/10/Open-Sourcing-Pinot.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c130d1629644f070.css" crossorigin="" data-prece [...]
\ No newline at end of file
diff --git a/blog/2015/06/10/Open-Sourcing-Pinot.txt b/blog/2015/06/10/Open-Sourcing-Pinot.txt
deleted file mode 100644
index 6509eb95..00000000
--- a/blog/2015/06/10/Open-Sourcing-Pinot.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2015/06/10/Open-Sourcing-Pinot","c"],{"children":["__PAGE__?{\"slug\":[\"2015\",\"06\",\"10\",\"Open-Sourcing-Pinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Introducing Pinot which allow to slice and dice across billions of rows in real-time across a wide variety of products"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name": [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics\",\"datePublished\":\"2015-06-10T00:00:00.000Z\",\"dateModified\":\"2015-06-10T00:00:00.000Z\",\"description\":\"Introducing Pinot which allow to slice and dice across billions of rows in real-time across a wide variety of products\",\"image\":\"/static/images/tw [...]
-d:null
diff --git a/blog/2017/09/17/Restaurant-Manager.html b/blog/2017/09/17/Restaurant-Manager.html
deleted file mode 100644
index 8c60cfbf..00000000
--- a/blog/2017/09/17/Restaurant-Manager.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2017/09/image4-2.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.cs [...]
\ No newline at end of file
diff --git a/blog/2017/09/17/Restaurant-Manager.txt b/blog/2017/09/17/Restaurant-Manager.txt
deleted file mode 100644
index 4ac64c60..00000000
--- a/blog/2017/09/17/Restaurant-Manager.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2017/09/17/Restaurant-Manager","c"],{"children":["__PAGE__?{\"slug\":[\"2017\",\"09\",\"17\",\"Restaurant-Manager\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Engineering Restaurant Manager - UberEATS Analytics Dashboard | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Restaurant Manager is a comprehensive analytics dashboard and pipeline for our restaurant partners. In this article, we discuss how we architected this analytics platform and its robust data pipeline."}],["$ [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Engineering Restaurant Manager - UberEATS Analytics Dashboard\",\"datePublished\":\"2017-09-17T00:00:00.000Z\",\"dateModified\":\"2017-09-17T00:00:00.000Z\",\"description\":\"Restaurant Manager is a comprehensive analytics dashboard and pipeline for our restaurant partners. In this article, we discuss how we architected thi [...]
-d:null
diff --git a/blog/2019/01/09/LinkedIn-IntroThirdEye.html b/blog/2019/01/09/LinkedIn-IntroThirdEye.html
deleted file mode 100644
index 40fa79ba..00000000
--- a/blog/2019/01/09/LinkedIn-IntroThirdEye.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/06/startree3.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1a [...]
\ No newline at end of file
diff --git a/blog/2019/01/09/LinkedIn-IntroThirdEye.txt b/blog/2019/01/09/LinkedIn-IntroThirdEye.txt
deleted file mode 100644
index 9d9d2783..00000000
--- a/blog/2019/01/09/LinkedIn-IntroThirdEye.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2019/01/09/LinkedIn-IntroThirdEye","c"],{"children":["__PAGE__?{\"slug\":[\"2019\",\"01\",\"09\",\"LinkedIn-IntroThirdEye\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"ThirdEye is a comprehensive platform for real-time monitoring of metrics that covers a wide variety of use-cases."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name" [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform\",\"datePublished\":\"2019-01-09T00:00:00.000Z\",\"dateModified\":\"2019-01-09T00:00:00.000Z\",\"description\":\"ThirdEye is a comprehensive platform for real-time monitoring of metrics that covers a wide variety of use-cases.\",\"image\":\"/static/images/t [...]
-d:null
diff --git a/blog/2019/06/14/LinkedIn-StarTree.html b/blog/2019/06/14/LinkedIn-StarTree.html
deleted file mode 100644
index 5cc7b59a..00000000
--- a/blog/2019/06/14/LinkedIn-StarTree.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/06/startree3.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1a [...]
\ No newline at end of file
diff --git a/blog/2019/06/14/LinkedIn-StarTree.txt b/blog/2019/06/14/LinkedIn-StarTree.txt
deleted file mode 100644
index be2f870d..00000000
--- a/blog/2019/06/14/LinkedIn-StarTree.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2019/06/14/LinkedIn-StarTree","c"],{"children":["__PAGE__?{\"slug\":[\"2019\",\"06\",\"14\",\"LinkedIn-StarTree\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Star-tree index - Powering fast aggregations on Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"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."}],["$","meta","4",{"name":"robots","content":"index, f [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Star-tree index - Powering fast aggregations on Pinot\",\"datePublished\":\"2019-06-14T00:00:00.000Z\",\"dateModified\":\"2019-06-14T00:00:00.000Z\",\"description\":\"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 [...]
-d:null
diff --git a/blog/2019/07/11/LinkedIn-AutoTune.html b/blog/2019/07/11/LinkedIn-AutoTune.html
deleted file mode 100644
index 30098f34..00000000
--- a/blog/2019/07/11/LinkedIn-AutoTune.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/07/bridging-1.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1 [...]
\ No newline at end of file
diff --git a/blog/2019/07/11/LinkedIn-AutoTune.txt b/blog/2019/07/11/LinkedIn-AutoTune.txt
deleted file mode 100644
index 19267546..00000000
--- a/blog/2019/07/11/LinkedIn-AutoTune.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2019/07/11/LinkedIn-AutoTune","c"],{"children":["__PAGE__?{\"slug\":[\"2019\",\"07\",\"11\",\"LinkedIn-AutoTune\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Auto-tuning Pinot real-time consumption | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an adve [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Auto-tuning Pinot real-time consumption\",\"datePublished\":\"2019-07-11T00:00:00.000Z\",\"dateModified\":\"2019-07-11T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targete [...]
-d:null
diff --git a/blog/2020/01/15/Pinot-Presto-SQL.html b/blog/2020/01/15/Pinot-Presto-SQL.html
deleted file mode 100644
index 508de258..00000000
--- a/blog/2020/01/15/Pinot-Presto-SQL.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2020/01/Header-SQL-768x329.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b [...]
\ No newline at end of file
diff --git a/blog/2020/01/15/Pinot-Presto-SQL.txt b/blog/2020/01/15/Pinot-Presto-SQL.txt
deleted file mode 100644
index e332142c..00000000
--- a/blog/2020/01/15/Pinot-Presto-SQL.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/01/15/Pinot-Presto-SQL","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"01\",\"15\",\"Pinot-Presto-SQL\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Engineering SQL Support on Apache Pinot at Uber | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Talks about solution that linked Presto, a query engine that supports full ANSI SQL, and Pinot, a real-time OLAP (online analytical processing) datastore."}],["$","meta","4",{"name":"robots","content":"index, follow"}],[" [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Engineering SQL Support on Apache Pinot at Uber\",\"datePublished\":\"2020-01-15T00:00:00.000Z\",\"dateModified\":\"2020-01-15T00:00:00.000Z\",\"description\":\"Talks about solution that linked Presto, a query engine that supports full ANSI SQL, and Pinot, a real-time OLAP (online analytical processing) datastore.\",\"image [...]
-d:null
diff --git a/blog/2020/02/20/LinkedIn-Thirdeye.html b/blog/2020/02/20/LinkedIn-Thirdeye.html
deleted file mode 100644
index a9ecea5f..00000000
--- a/blog/2020/02/20/LinkedIn-Thirdeye.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/02/datacube-1.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1 [...]
\ No newline at end of file
diff --git a/blog/2020/02/20/LinkedIn-Thirdeye.txt b/blog/2020/02/20/LinkedIn-Thirdeye.txt
deleted file mode 100644
index 746547f4..00000000
--- a/blog/2020/02/20/LinkedIn-Thirdeye.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/02/20/LinkedIn-Thirdeye","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"02\",\"20\",\"LinkedIn-Thirdeye\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Analyzing anomalies with ThirdEye | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertisin [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Analyzing anomalies with ThirdEye\",\"datePublished\":\"2020-02-20T00:00:00.000Z\",\"dateModified\":\"2020-02-20T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audi [...]
-d:null
diff --git a/blog/2020/04/10/DevBlog-AnalyzeGitEvents.html b/blog/2020/04/10/DevBlog-AnalyzeGitEvents.html
deleted file mode 100644
index a87d3328..00000000
--- a/blog/2020/04/10/DevBlog-AnalyzeGitEvents.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/4728/1*eR64jBH1ZvC3uNfPP56p5g.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence=" [...]
\ No newline at end of file
diff --git a/blog/2020/04/10/DevBlog-AnalyzeGitEvents.txt b/blog/2020/04/10/DevBlog-AnalyzeGitEvents.txt
deleted file mode 100644
index b7bec388..00000000
--- a/blog/2020/04/10/DevBlog-AnalyzeGitEvents.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/04/10/DevBlog-AnalyzeGitEvents","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"04\",\"10\",\"DevBlog-AnalyzeGitEvents\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Using Apache Pinot and Kafka to Analyze GitHub Events | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Show you how Pinot and Kafka can be used together to ingest, query, and visualize event streams sourced from the public GitHub API."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"n [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Using Apache Pinot and Kafka to Analyze GitHub Events\",\"datePublished\":\"2021-04-10T00:00:00.000Z\",\"dateModified\":\"2021-04-10T00:00:00.000Z\",\"description\":\"Show you how Pinot and Kafka can be used together to ingest, query, and visualize event streams sourced from the public GitHub API.\",\"image\":\"/static/imag [...]
-d:null
diff --git a/blog/2020/06/25/LinkedIn-SmartAlerts.html b/blog/2020/06/25/LinkedIn-SmartAlerts.html
deleted file mode 100644
index ee4e03b4..00000000
--- a/blog/2020/06/25/LinkedIn-SmartAlerts.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/06/thirdeye_business_performance-3.png"/><link rel="stylesheet" href="/_next/ [...]
\ No newline at end of file
diff --git a/blog/2020/06/25/LinkedIn-SmartAlerts.txt b/blog/2020/06/25/LinkedIn-SmartAlerts.txt
deleted file mode 100644
index 1bdbccfb..00000000
--- a/blog/2020/06/25/LinkedIn-SmartAlerts.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/06/25/LinkedIn-SmartAlerts","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"06\",\"25\",\"LinkedIn-SmartAlerts\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Monitoring business performance data with ThirdEye smart alerts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in mult [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Monitoring business performance data with ThirdEye smart alerts\",\"datePublished\":\"2020-06-25T00:00:00.000Z\",\"dateModified\":\"2020-06-25T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the  [...]
-d:null
diff --git a/blog/2020/06/29/LinkedIn-TalentInsight.html b/blog/2020/06/29/LinkedIn-TalentInsight.html
deleted file mode 100644
index 30d423db..00000000
--- a/blog/2020/06/29/LinkedIn-TalentInsight.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/06/lti-1.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac [...]
\ No newline at end of file
diff --git a/blog/2020/06/29/LinkedIn-TalentInsight.txt b/blog/2020/06/29/LinkedIn-TalentInsight.txt
deleted file mode 100644
index 8e38d2c8..00000000
--- a/blog/2020/06/29/LinkedIn-TalentInsight.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/06/29/LinkedIn-TalentInsight","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"06\",\"29\",\"LinkedIn-TalentInsight\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Building LinkedIn Talent Insights to democratize data-driven decision making | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when fact [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Building LinkedIn Talent Insights to democratize data-driven decision making\",\"datePublished\":\"2020-06-29T00:00:00.000Z\",\"dateModified\":\"2020-06-29T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently fi [...]
-d:null
diff --git a/blog/2020/07/14/LinkedIn-BatchRealtime.html b/blog/2020/07/14/LinkedIn-BatchRealtime.html
deleted file mode 100644
index 3e5dbcf1..00000000
--- a/blog/2020/07/14/LinkedIn-BatchRealtime.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2020/07/bridging-1.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1 [...]
\ No newline at end of file
diff --git a/blog/2020/07/14/LinkedIn-BatchRealtime.txt b/blog/2020/07/14/LinkedIn-BatchRealtime.txt
deleted file mode 100644
index 3ba75204..00000000
--- a/blog/2020/07/14/LinkedIn-BatchRealtime.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/07/14/LinkedIn-BatchRealtime","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"07\",\"14\",\"LinkedIn-BatchRealtime\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Bridging batch and stream processing for the Recruiter usage statistics dashboard | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Bridging batch and stream processing for the Recruiter usage statistics dashboard\",\"datePublished\":\"2020-07-14T00:00:00.000Z\",\"dateModified\":\"2020-07-14T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficient [...]
-d:null
diff --git a/blog/2020/07/28/DevBlog-AnomalyDetection.html b/blog/2020/07/28/DevBlog-AnomalyDetection.html
deleted file mode 100644
index 7b7ed8a8..00000000
--- a/blog/2020/07/28/DevBlog-AnomalyDetection.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/0*xYm2ZURZVpyJ1JQ5"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2020/07/28/DevBlog-AnomalyDetection.txt b/blog/2020/07/28/DevBlog-AnomalyDetection.txt
deleted file mode 100644
index 506e8354..00000000
--- a/blog/2020/07/28/DevBlog-AnomalyDetection.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/07/28/DevBlog-AnomalyDetection","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"07\",\"28\",\"DevBlog-AnomalyDetection\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Building a culture around metrics and anomaly detection | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"ThirdEye as a system is a platform that allows you to integrate your metrics (quantitative information) with events (knowledge or qualitative information) and combine the two so you can distinguish between meaning [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Building a culture around metrics and anomaly detection\",\"datePublished\":\"2020-07-28T00:00:00.000Z\",\"dateModified\":\"2020-07-28T00:00:00.000Z\",\"description\":\"ThirdEye as a system is a platform that allows you to integrate your metrics (quantitative information) with events (knowledge or qualitative information) a [...]
-d:null
diff --git a/blog/2020/07/28/DevBlog-DevUpStack.html b/blog/2020/07/28/DevBlog-DevUpStack.html
deleted file mode 100644
index 69a30033..00000000
--- a/blog/2020/07/28/DevBlog-DevUpStack.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/1*dnSikeGxTrfrF95niX16PA.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence=" [...]
\ No newline at end of file
diff --git a/blog/2020/07/28/DevBlog-DevUpStack.txt b/blog/2020/07/28/DevBlog-DevUpStack.txt
deleted file mode 100644
index ba060882..00000000
--- a/blog/2020/07/28/DevBlog-DevUpStack.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/07/28/DevBlog-DevUpStack","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"07\",\"28\",\"DevBlog-DevUpStack\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Moving developers up the stack with Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people arou [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Moving developers up the stack with Apache Pinot\",\"datePublished\":\"2020-07-28T00:00:00.000Z\",\"dateModified\":\"2020-07-28T00:00:00.000Z\",\"description\":\"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley  [...]
-d:null
diff --git a/blog/2020/08/08/DevBlog-IngestPlugins.html b/blog/2020/08/08/DevBlog-IngestPlugins.html
deleted file mode 100644
index 903f0876..00000000
--- a/blog/2020/08/08/DevBlog-IngestPlugins.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/6000/0*afbs7azGt-GpSVeP"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2020/08/08/DevBlog-IngestPlugins.txt b/blog/2020/08/08/DevBlog-IngestPlugins.txt
deleted file mode 100644
index cc8103f4..00000000
--- a/blog/2020/08/08/DevBlog-IngestPlugins.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/08/08/DevBlog-IngestPlugins","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"08\",\"08\",\"DevBlog-IngestPlugins\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Leverage Plugins to Ingest Parquet Files from S3 in Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"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."}],["$","meta","4",{"name":"robots","co [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Leverage Plugins to Ingest Parquet Files from S3 in Pinot\",\"datePublished\":\"2020-08-08T00:00:00.000Z\",\"dateModified\":\"2020-08-08T00:00:00.000Z\",\"description\":\"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, [...]
-d:null
diff --git a/blog/2020/08/08/DevBlog-PinotMonitoring.html b/blog/2020/08/08/DevBlog-PinotMonitoring.html
deleted file mode 100644
index 1cee3046..00000000
--- a/blog/2020/08/08/DevBlog-PinotMonitoring.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/1*5kWginewoWzzQHQoZdPAGQ.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence=" [...]
\ No newline at end of file
diff --git a/blog/2020/08/08/DevBlog-PinotMonitoring.txt b/blog/2020/08/08/DevBlog-PinotMonitoring.txt
deleted file mode 100644
index e22392fe..00000000
--- a/blog/2020/08/08/DevBlog-PinotMonitoring.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/08/08/DevBlog-PinotMonitoring","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"08\",\"08\",\"DevBlog-PinotMonitoring\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Monitoring Apache Pinot with JMX, Prometheus and Grafana | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{" [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Monitoring Apache Pinot with JMX, Prometheus and Grafana\",\"datePublished\":\"2020-08-08T00:00:00.000Z\",\"dateModified\":\"2020-08-08T00:00:00.000Z\",\"description\":\"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain\",\"image\":\"/static/ima [...]
-d:null
diff --git a/blog/2020/08/08/DevBlog-SLAApps.html b/blog/2020/08/08/DevBlog-SLAApps.html
deleted file mode 100644
index 0a69b804..00000000
--- a/blog/2020/08/08/DevBlog-SLAApps.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1140/0*VCPyrmNB2PteCmnC"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2020/08/08/DevBlog-SLAApps.txt b/blog/2020/08/08/DevBlog-SLAApps.txt
deleted file mode 100644
index ccc4625d..00000000
--- a/blog/2020/08/08/DevBlog-SLAApps.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/08/08/DevBlog-SLAApps","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"08\",\"08\",\"DevBlog-SLAApps\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Achieving 99th percentile latency SLA using Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"How users can build critical site-facing analytical applications requiring high throughput and strict p99th query latency SLA"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Achieving 99th percentile latency SLA using Apache Pinot\",\"datePublished\":\"2020-08-08T00:00:00.000Z\",\"dateModified\":\"2020-08-08T00:00:00.000Z\",\"description\":\"How users can build critical site-facing analytical applications requiring high throughput and strict p99th query latency SLA\",\"image\":\"/static/images/ [...]
-d:null
diff --git a/blog/2020/08/08/DevBlog-ScalarUDFs.html b/blog/2020/08/08/DevBlog-ScalarUDFs.html
deleted file mode 100644
index a0079411..00000000
--- a/blog/2020/08/08/DevBlog-ScalarUDFs.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/10368/0*VtswFI-HcaXyyjhK"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><l [...]
\ No newline at end of file
diff --git a/blog/2020/08/08/DevBlog-ScalarUDFs.txt b/blog/2020/08/08/DevBlog-ScalarUDFs.txt
deleted file mode 100644
index 764ce426..00000000
--- a/blog/2020/08/08/DevBlog-ScalarUDFs.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/08/08/DevBlog-ScalarUDFs","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"08\",\"08\",\"DevBlog-ScalarUDFs\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Utilize UDFs to Supercharge Queries in Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Scalar Functions that allow users to write and add their functions as a plugin."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-p [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Utilize UDFs to Supercharge Queries in Apache Pinot\",\"datePublished\":\"2020-08-08T00:00:00.000Z\",\"dateModified\":\"2020-08-08T00:00:00.000Z\",\"description\":\"Scalar Functions that allow users to write and add their functions as a plugin.\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pinot.apache.o [...]
-d:null
diff --git a/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.html b/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.html
deleted file mode 100644
index ec0fed50..00000000
--- a/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/4320/0*iqUTy0GkLFTcSYlR.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/ [...]
\ No newline at end of file
diff --git a/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.txt b/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.txt
deleted file mode 100644
index 82add90a..00000000
--- a/blog/2020/10/16/DevBlog-TwitterTrollAnalysis.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/10/16/DevBlog-TwitterTrollAnalysis","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"10\",\"16\",\"DevBlog-TwitterTrollAnalysis\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Deep Analysis of Russian Twitter Trolls | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Show you how to use Apache Pinot and Superset to analyze 3 million tweets by the Internet Research Agency (IRA) open-sourced by FiveThirtyEight."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"na [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Deep Analysis of Russian Twitter Trolls\",\"datePublished\":\"2020-10-16T00:00:00.000Z\",\"dateModified\":\"2020-10-16T00:00:00.000Z\",\"description\":\"Show you how to use Apache Pinot and Superset to analyze 3 million tweets by the Internet Research Agency (IRA) open-sourced by FiveThirtyEight.\",\"image\":\"/static/image [...]
-d:null
diff --git a/blog/2020/10/20/Uber-Operating.html b/blog/2020/10/20/Uber-Operating.html
deleted file mode 100644
index 5bfc0974..00000000
--- a/blog/2020/10/20/Uber-Operating.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2020/10/1224-5.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" [...]
\ No newline at end of file
diff --git a/blog/2020/10/20/Uber-Operating.txt b/blog/2020/10/20/Uber-Operating.txt
deleted file mode 100644
index 1d3ada60..00000000
--- a/blog/2020/10/20/Uber-Operating.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/10/20/Uber-Operating","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"10\",\"20\",\"Uber-Operating\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Operating Apache Pinot at Uber Scale | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Present details of this platform and how it fits in Uber’s ecosystem. Explain how uber scaled from a few use cases to a multi-cluster powering hundreds of use cases for querying terabyte-scale data with millisecond latencies."}],["$ [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Operating Apache Pinot at Uber Scale\",\"datePublished\":\"2020-10-20T00:00:00.000Z\",\"dateModified\":\"2020-10-20T00:00:00.000Z\",\"description\":\"Present details of this platform and how it fits in Uber’s ecosystem. Explain how uber scaled from a few use cases to a multi-cluster powering hundreds of use cases for queryi [...]
-d:null
diff --git a/blog/2020/12/01/LinkedIn-Lamda.html b/blog/2020/12/01/LinkedIn-Lamda.html
deleted file mode 100644
index 0fc330d1..00000000
--- a/blog/2020/12/01/LinkedIn-Lamda.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2019/03/pinotincubator2.png"/><link rel="stylesheet" href="/_next/static/css/9e925 [...]
\ No newline at end of file
diff --git a/blog/2020/12/01/LinkedIn-Lamda.txt b/blog/2020/12/01/LinkedIn-Lamda.txt
deleted file mode 100644
index 46e39d5d..00000000
--- a/blog/2020/12/01/LinkedIn-Lamda.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2020/12/01/LinkedIn-Lamda","c"],{"children":["__PAGE__?{\"slug\":[\"2020\",\"12\",\"01\",\"LinkedIn-Lamda\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"From Lambda to Lambda-less Lessons learned | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"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."}],["$","meta","4",{" [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"From Lambda to Lambda-less Lessons learned\",\"datePublished\":\"2020-12-01T00:00:00.000Z\",\"dateModified\":\"2020-12-01T00:00:00.000Z\",\"description\":\"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 proces [...]
-d:null
diff --git a/blog/2021/01/08/DevBlog-DebeziumCDC.html b/blog/2021/01/08/DevBlog-DebeziumCDC.html
deleted file mode 100644
index aab6444f..00000000
--- a/blog/2021/01/08/DevBlog-DebeziumCDC.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/1*dnSikeGxTrfrF95niX16PA.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence=" [...]
\ No newline at end of file
diff --git a/blog/2021/01/08/DevBlog-DebeziumCDC.txt b/blog/2021/01/08/DevBlog-DebeziumCDC.txt
deleted file mode 100644
index 08a6b522..00000000
--- a/blog/2021/01/08/DevBlog-DebeziumCDC.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/01/08/DevBlog-DebeziumCDC","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"01\",\"08\",\"DevBlog-DebeziumCDC\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Change Data Analysis with Debezium and Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people a [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Change Data Analysis with Debezium and Apache Pinot\",\"datePublished\":\"2021-01-08T00:00:00.000Z\",\"dateModified\":\"2021-01-08T00:00:00.000Z\",\"description\":\"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Vall [...]
-d:null
diff --git a/blog/2021/02/02/DevBlog-PrestoPinot.html b/blog/2021/02/02/DevBlog-PrestoPinot.html
deleted file mode 100644
index 462ffcd4..00000000
--- a/blog/2021/02/02/DevBlog-PrestoPinot.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/0*hJc6aV9aBJaKyXcx"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2021/02/02/DevBlog-PrestoPinot.txt b/blog/2021/02/02/DevBlog-PrestoPinot.txt
deleted file mode 100644
index 89773ee2..00000000
--- a/blog/2021/02/02/DevBlog-PrestoPinot.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/02/02/DevBlog-PrestoPinot","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"02\",\"02\",\"DevBlog-PrestoPinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Real-time Analytics with Presto and Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"g [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Real-time Analytics with Presto and Apache Pinot\",\"datePublished\":\"2021-02-02T00:00:00.000Z\",\"dateModified\":\"2021-02-02T00:00:00.000Z\",\"description\":\"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain\",\"image\":\"/static/images/twit [...]
-d:null
diff --git a/blog/2021/04/08/DevBlog-UpsertsIntro.html b/blog/2021/04/08/DevBlog-UpsertsIntro.html
deleted file mode 100644
index d3594836..00000000
--- a/blog/2021/04/08/DevBlog-UpsertsIntro.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/0*So3GjHjLY7DJAiaP"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2021/04/08/DevBlog-UpsertsIntro.txt b/blog/2021/04/08/DevBlog-UpsertsIntro.txt
deleted file mode 100644
index c7950a98..00000000
--- a/blog/2021/04/08/DevBlog-UpsertsIntro.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/04/08/DevBlog-UpsertsIntro","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"04\",\"08\",\"DevBlog-UpsertsIntro\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Introduction to Upserts in Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Introduction to Pinot Upsert and explain why it’s exciting and how you can start using it."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-pr [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Introduction to Upserts in Apache Pinot\",\"datePublished\":\"2021-04-08T00:00:00.000Z\",\"dateModified\":\"2021-04-08T00:00:00.000Z\",\"description\":\"Introduction to Pinot Upsert and explain why it’s exciting and how you can start using it.\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pinot.apache.or [...]
-d:null
diff --git a/blog/2021/04/16/LinkedIn-Theta.html b/blog/2021/04/16/LinkedIn-Theta.html
deleted file mode 100644
index 404634cf..00000000
--- a/blog/2021/04/16/LinkedIn-Theta.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2021/04/thetasketches2.png"/><link rel="stylesheet" href="/_next/static/css/9e925a [...]
\ No newline at end of file
diff --git a/blog/2021/04/16/LinkedIn-Theta.txt b/blog/2021/04/16/LinkedIn-Theta.txt
deleted file mode 100644
index 1d1bdb7a..00000000
--- a/blog/2021/04/16/LinkedIn-Theta.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/04/16/LinkedIn-Theta","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"04\",\"16\",\"LinkedIn-Theta\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches\",\"datePublished\":\"2021-04-16T00:00:00.000Z\",\"dateModified\":\"2021-04-16T00:00:00.000Z\",\"description\":\"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to effi [...]
-d:null
diff --git a/blog/2021/04/27/DevBlog-PinotInRetailChain.html b/blog/2021/04/27/DevBlog-PinotInRetailChain.html
deleted file mode 100644
index abea59a9..00000000
--- a/blog/2021/04/27/DevBlog-PinotInRetailChain.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/1*EtqD0vTPEe569jybXCt69w.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence=" [...]
\ No newline at end of file
diff --git a/blog/2021/04/27/DevBlog-PinotInRetailChain.txt b/blog/2021/04/27/DevBlog-PinotInRetailChain.txt
deleted file mode 100644
index 2e3f6383..00000000
--- a/blog/2021/04/27/DevBlog-PinotInRetailChain.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/04/27/DevBlog-PinotInRetailChain","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"04\",\"27\",\"DevBlog-PinotInRetailChain\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Deploying Apache Pinot at a Large Retail Chain | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"goo [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Deploying Apache Pinot at a Large Retail Chain\",\"datePublished\":\"2021-04-27T00:00:00.000Z\",\"dateModified\":\"2021-04-27T00:00:00.000Z\",\"description\":\"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain\",\"image\":\"/static/images/twitte [...]
-d:null
diff --git a/blog/2021/04/29/Uber-Charon.html b/blog/2021/04/29/Uber-Charon.html
deleted file mode 100644
index 25704906..00000000
--- a/blog/2021/04/29/Uber-Charon.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2021/04/deliverDoor@3x-768x263.png"/><link rel="stylesheet" href="/_next/static/css/9e925 [...]
\ No newline at end of file
diff --git a/blog/2021/04/29/Uber-Charon.txt b/blog/2021/04/29/Uber-Charon.txt
deleted file mode 100644
index 96f0d6f9..00000000
--- a/blog/2021/04/29/Uber-Charon.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/04/29/Uber-Charon","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"04\",\"29\",\"Uber-Charon\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Automating Merchant Live Monitoring with Real-Time Analytics - Charon | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Focus on Uber’s real-time data platform components to build a tool called Charon to reduce impact of poor marketplace reliability on the merchants."}],["$","meta","4",{"name":"robots","content":"inde [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Automating Merchant Live Monitoring with Real-Time Analytics - Charon\",\"datePublished\":\"2021-04-29T00:00:00.000Z\",\"dateModified\":\"2021-04-29T00:00:00.000Z\",\"description\":\"Focus on Uber’s real-time data platform components to build a tool called Charon to reduce impact of poor marketplace reliability on the merch [...]
-d:null
diff --git a/blog/2021/06/13/DevBlog-Geospatial.html b/blog/2021/06/13/DevBlog-Geospatial.html
deleted file mode 100644
index 71c53020..00000000
--- a/blog/2021/06/13/DevBlog-Geospatial.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/max/1400/0*1xrDSs9lLZ5dD3zK"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><li [...]
\ No newline at end of file
diff --git a/blog/2021/06/13/DevBlog-Geospatial.txt b/blog/2021/06/13/DevBlog-Geospatial.txt
deleted file mode 100644
index 520ec68f..00000000
--- a/blog/2021/06/13/DevBlog-Geospatial.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/06/13/DevBlog-Geospatial","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"06\",\"13\",\"DevBlog-Geospatial\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Introduction to Geospatial Queries in Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Discuss the challenges of analyzing geospatial at scale and propose the geospatial support in Pinot."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Introduction to Geospatial Queries in Apache Pinot\",\"datePublished\":\"2021-06-13T00:00:00.000Z\",\"dateModified\":\"2021-06-13T00:00:00.000Z\",\"description\":\"Discuss the challenges of analyzing geospatial at scale and propose the geospatial support in Pinot.\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"ht [...]
-d:null
diff --git a/blog/2021/06/16/LinkedIn-TextAnalytics.html b/blog/2021/06/16/LinkedIn-TextAnalytics.html
deleted file mode 100644
index 3d7ceeb1..00000000
--- a/blog/2021/06/16/LinkedIn-TextAnalytics.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://content.linkedin.com/content/dam/engineering/site-assets/images/blog/posts/2021/06/ltipinot6.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1a [...]
\ No newline at end of file
diff --git a/blog/2021/06/16/LinkedIn-TextAnalytics.txt b/blog/2021/06/16/LinkedIn-TextAnalytics.txt
deleted file mode 100644
index d716cd76..00000000
--- a/blog/2021/06/16/LinkedIn-TextAnalytics.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2021/06/16/LinkedIn-TextAnalytics","c"],{"children":["__PAGE__?{\"slug\":[\"2021\",\"06\",\"16\",\"LinkedIn-TextAnalytics\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Text analytics on LinkedIn Talent Insights using Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Introduction 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"}],[ [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Text analytics on LinkedIn Talent Insights using Apache Pinot\",\"datePublished\":\"2021-06-16T00:00:00.000Z\",\"dateModified\":\"2021-06-16T00:00:00.000Z\",\"description\":\"Introduction LinkedIn Talent Insights (LTI) is a platform that helps organizations understand the external labor market and their internal workforce,  [...]
-d:null
diff --git a/blog/2022/04/04/Announcing-Apache-Pinot-0-10.html b/blog/2022/04/04/Announcing-Apache-Pinot-0-10.html
deleted file mode 100644
index 5dc4456f..00000000
--- a/blog/2022/04/04/Announcing-Apache-Pinot-0-10.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c130d1629644f070.css" crossorigin="" data-prece [...]
-</span><span class="code-line"><span class="token keyword">SELECT</span> <span class="token operator">*</span>
-</span><span class="code-line"><span class="token keyword">FROM</span> baseballStats
-</span><span class="code-line"><span class="token keyword">WHERE</span> league <span class="token operator">=</span> <span class="token string">&#x27;NL&#x27;</span>
-</span></code></pre></div><p>If we run this query, we&#x27;ll see the following results:</p><div class="w-full overflow-x-auto"><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, leag [...]
-</span><span class="code-line">       <span class="token function">SUM</span><span class="token punctuation">(</span>homeRuns<span class="token punctuation">)</span> FILTER<span class="token punctuation">(</span><span class="token keyword">WHERE</span> league <span class="token operator">=</span> <span class="token string">&#x27;AL&#x27;</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> alHomeRuns
-</span><span class="code-line"><span class="token keyword">FROM</span> baseballStats
-</span></code></pre></div><p>If we run this query, we&#x27;ll see the following output:</p><div class="w-full overflow-x-auto"><table><thead><tr><th>nlHomeRuns</th><th>alHomeRuns</th></tr></thead><tbody><tr><td>135486</td><td>135990</td></tr></tbody></table></div><h2 id="greatest-and-least"><a href="#greatest-and-least" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>greatest and least</h2><p>Richard Startin added the <code>greatest</code> and <code>least</code>  [...]
-</span><span class="code-line">       least<span class="token punctuation">(</span><span class="token number">5.0</span><span class="token punctuation">,</span> <span class="token function">max</span><span class="token punctuation">(</span>homeRuns<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> homeRuns<span class="token punctuation">,</span>
-</span><span class="code-line">	   greatest<span class="token punctuation">(</span><span class="token number">5.0</span><span class="token punctuation">,</span> <span class="token function">max</span><span class="token punctuation">(</span>hits<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> hits
-</span><span class="code-line"><span class="token keyword">FROM</span> baseballStats
-</span><span class="code-line"><span class="token keyword">WHERE</span> league <span class="token operator">=</span> <span class="token string">&#x27;NL&#x27;</span> <span class="token operator">AND</span> teamID <span class="token operator">=</span> <span class="token string">&#x27;SFN&#x27;</span>
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> playerID
-</span><span class="code-line"><span class="token keyword">LIMIT</span> <span class="token number">5</span>
-</span></code></pre></div><p>If we run this query, we&#x27;ll see the following output:</p><div class="w-full overflow-x-auto"><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></div><h2 id="distinctcounts [...]
-</span><span class="code-line"><span class="token keyword">FROM</span> baseballStats
-</span></code></pre></div><p>If we run this query, we&#x27;ll see the following output:</p><div class="w-full overflow-x-auto"><table><thead><tr><th>distinctcountsmarthll(homeRuns)</th></tr></thead><tbody><tr><td>66</td></tr></tbody></table></div><h2 id="ui-updates"><a href="#ui-updates" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>UI updates</h2><p>There were also a bunch of updates to the Pinot Data Explorer, by Sanket Shah and Johan Adami.</p><p>The display [...]
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">8000</span>:8000 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">9000</span>:9000 <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.10.0 QuickStart <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-type</span> empty
-</span></code></pre></div><p>You can then ingest your own dataset without needing to worry about spinning up each of the Pinot components individually.</p><h2 id="data-ingestion"><a href="#data-ingestion" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Data Ingestion</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 Kha [...]
\ No newline at end of file
diff --git a/blog/2022/04/04/Announcing-Apache-Pinot-0-10.txt b/blog/2022/04/04/Announcing-Apache-Pinot-0-10.txt
deleted file mode 100644
index a5479dc8..00000000
--- a/blog/2022/04/04/Announcing-Apache-Pinot-0-10.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/04/04/Announcing-Apache-Pinot-0-10","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"04\",\"04\",\"Announcing-Apache-Pinot-0-10\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Announcing Apache Pinot 0.10 | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content": [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[413,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],"Image"]
-13:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Announcing Apache Pinot 0.10\",\"datePublished\":\"2022-04-04T00:00:00.000Z\",\"dateModified\":\"2022-04-04T00:00:00.000Z\",\"description\":\"Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product.\",\"image\":\"/static/images/twitter-card.png\",\"url [...]
-d:null
diff --git a/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.html b/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.html
deleted file mode 100644
index 5934c127..00000000
--- a/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1661700264-entities-emitting-data.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1661700333-par [...]
-</span><span class="code-line"><span class="token keyword">FROM</span> <span class="token punctuation">(</span>
-</span><span class="code-line">    <span class="token keyword">SELECT</span> GAPFILL<span class="token punctuation">(</span>time_col<span class="token punctuation">,</span><span class="token string">&#x27;1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS&#x27;</span><span class="token punctuation">,</span><span class="token string">&#x27;2021-10-01 09:00:00.000&#x27;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                   <span class="token string">&#x27;2021-10-01 12:00:00.000&#x27;</span><span class="token punctuation">,</span><span class="token string">&#x27;30:MINUTES&#x27;</span><span class="token punctuation">,</span> FILL<span class="token punctuation">(</span><span class="token keyword">status</span><span class="token punctuation">,</span> <span class="token string">&#x27;FILL_PREVIOUS_VALUE&#x27;</span><span class="token punctuation">)</span><span [...]
-</span><span class="code-line">                    TIMESERIESON<span class="token punctuation">(</span>lot_id<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> lot_id<span class="token punctuation">,</span> <span class="token keyword">status</span>
-</span><span class="code-line">    <span class="token keyword">FROM</span> <span class="token punctuation">(</span>
-</span><span class="code-line">        <span class="token keyword">SELECT</span> DATETIMECONVERT<span class="token punctuation">(</span>event_time<span class="token punctuation">,</span><span class="token string">&#x27;1:MILLISECONDS:EPOCH&#x27;</span><span class="token punctuation">,</span>
-</span><span class="code-line">               <span class="token string">&#x27;1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS&#x27;</span><span class="token punctuation">,</span><span class="token string">&#x27;30:MINUTES&#x27;</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> time_col<span class="token punctuation">,</span>
-</span><span class="code-line">               lot_id<span class="token punctuation">,</span> lastWithTime<span class="token punctuation">(</span>is_occupied<span class="token punctuation">,</span> event_time<span class="token punctuation">,</span> <span class="token string">&#x27;INT&#x27;</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token keyword">status</span>
-</span><span class="code-line">        <span class="token keyword">FROM</span> parking_data
-</span><span class="code-line">        <span class="token keyword">WHERE</span> event_time <span class="token operator">&gt;=</span> <span class="token number">1633078800000</span> <span class="token operator">AND</span>  event_time <span class="token operator">&lt;=</span> <span class="token number">1633089600000</span>
-</span><span class="code-line">        <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span>
-</span><span class="code-line">        <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> <span class="token number">1</span>
-</span><span class="code-line">        <span class="token keyword">LIMIT</span> <span class="token number">100</span><span class="token punctuation">)</span>
-</span><span class="code-line">    <span class="token keyword">LIMIT</span> <span class="token number">100</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token number">1</span>
-</span><span class="code-line"><span class="token keyword">LIMIT</span> <span class="token number">100</span>
-</span></code></pre></div><p>This query suggests three main steps:</p><ol><li>The raw data will be aggregated;</li><li>The aggregated data will be gapfilled;</li><li>The gapfilled data will be aggregated.</li></ol><p>We make one assumption that the raw data is sorted by timestamp. The Gapfill and Post-Gapfill Aggregation will not sort the data.</p><h3 id="query-components"><a href="#query-components" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Query component [...]
-</span><span class="code-line">               <span class="token string">&#x27;1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS&#x27;</span><span class="token punctuation">,</span><span class="token string">&#x27;30:MINUTES&#x27;</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> time_col<span class="token punctuation">,</span>
-</span><span class="code-line">               lot_id<span class="token punctuation">,</span> lastWithTime<span class="token punctuation">(</span>is_occupied<span class="token punctuation">,</span> event_time<span class="token punctuation">,</span> <span class="token string">&#x27;INT&#x27;</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token keyword">status</span>
-</span><span class="code-line">        <span class="token keyword">FROM</span> parking_data
-</span><span class="code-line">        <span class="token keyword">WHERE</span> event_time <span class="token operator">&gt;=</span> <span class="token number">1633078800000</span> <span class="token operator">AND</span>  event_time <span class="token operator">&lt;=</span> <span class="token number">1633089600000</span>
-</span><span class="code-line">        <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span>
-</span><span class="code-line">        <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> <span class="token number">1</span>
-</span><span class="code-line">        <span class="token keyword">LIMIT</span> <span class="token number">100</span>
-</span></code></pre></div><h3 id="execution-plan"><a href="#execution-plan" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Execution Plan</h3><p>The sample execution plan for this query is as shown in the figure below:</p><p><img alt="Sample query execution plan" src="https://www.datocms-assets.com/75153/1661700642-execution-plan.png" title="Sample query execution plan"/></p><h3 id="time-and-space-complexity"><a href="#time-and-space-complexity" aria-hidden="tru [...]
\ No newline at end of file
diff --git a/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.txt b/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.txt
deleted file mode 100644
index 43d9e6b7..00000000
--- a/blog/2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"08\",\"02\",\"GapFill-Function-For-Time-Series-Datasets-In-Pinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"GapFill Function For Time-Series Datasets In Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Gapfilling functions in Pinot to provide the on-the-fly interpolation (filling the missing data) functionality to better handle time-series data."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","me [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"GapFill Function For Time-Series Datasets In Pinot\",\"datePublished\":\"2022-08-02T00:00:00.000Z\",\"dateModified\":\"2022-08-02T00:00:00.000Z\",\"description\":\"Gapfilling functions in Pinot to provide the on-the-fly interpolation (filling the missing data) functionality to better handle time-series data.\",\"image\":\"/ [...]
-d:null
diff --git a/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.html b/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.html
deleted file mode 100644
index 9c25348b..00000000
--- a/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.html	
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1667915561-image1-edittable.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1667915654-image3.pn [...]
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">8000</span>:8000 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">9000</span>:9000 <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.11.0 <span class="token punctuation">\</span>
-</span><span class="code-line">  QuickStart <span class="token parameter variable">-type</span> BATCH
-</span></code></pre></div><p>Or if you’re on a Mac M1, change the name of the image to have the arm-64 suffix, like this:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">8000</span>:8000 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-p</span> <span class="token number">9000</span>:9000 <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.11.0-arm64 <span class="token punctuation">\</span>
-</span><span class="code-line">  QuickStart <span class="token parameter variable">-type</span> BATCH
-</span></code></pre></div><p>Once that’s up and running, navigate to <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/#/">http://localhost:9000/#/</a> and click on Tables. Under the tables section click on airlineStats_OFFLINE. You should see a page that looks like this:</p><p><img alt="airlineStats_OFFLINE page" src="https://www.datocms-assets.com/75153/1667915561-image1-edittable.png" title="airlineStats_OFFLINE page"/></p><p>Click on Edit Table. This will show  [...]
-</span><span class="code-line">  <span class="token property">&quot;rangeIndexVersion&quot;</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;autoGeneratedInvertedIndex&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;createInvertedIndexDuringSegmentGeneration&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;enableDefaultStarTree&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;enableDynamicStarTreeCreation&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;aggregateMetrics&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;nullHandlingEnabled&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;optimizeDictionaryForMetrics&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;noDictionarySizeRatioThreshold&quot;</span><span class="token operator">:</span> <span class="token number">0</span>
-</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span></code></pre></div><p>From reading this config we learn that no indexes have been explicitly defined.</p><p>Now for fieldConfigList, which is defined below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token property">&quot;fieldConfigList&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">  <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;encodingType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;DICTIONARY&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;indexType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;indexTypes&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">      <span class="token string">&quot;TIMESTAMP&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;timestampConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;granularities&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token string">&quot;DAY&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token string">&quot;WEEK&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token string">&quot;MONTH&quot;</span>
-</span><span class="code-line">      <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line">  <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span></code></pre></div><p>From reading this config we learn that a timestamp index is being applied to the <em>ts</em> column. It is applied at DAY, WEEK, and MONTH granularities, which means that the derived columns <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi><mi>s</mi></mrow><annotation encoding="application/x-tex">ts</annotation></semantics></math></span><span class="katex- [...]
\ No newline at end of file
diff --git a/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.txt b/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.txt
deleted file mode 100644
index e87b0fff..00000000
--- a/blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes.txt	
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/11/08/Apache%20Pinot-How-do-I-see-my-indexes","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"11\",\"08\",\"Apache Pinot-How-do-I-see-my-indexes\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.11 - How do I see my indexes? | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"How you can work out which indexes are currently defined on a Pinot table"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, m [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.11 - How do I see my indexes?\",\"datePublished\":\"2022-11-08T00:00:00.000Z\",\"dateModified\":\"2022-11-08T00:00:00.000Z\",\"description\":\"How you can work out which indexes are currently defined on a Pinot table\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pinot.apache.org/blog/2022 [...]
-d:null
diff --git a/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.html b/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.html
deleted file mode 100644
index fc776be3..00000000
--- a/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.html	
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1668701275-image4.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1668701353-image1.png"/><link  [...]
-</span><span class="code-line">    <span class="token atrule key">name</span><span class="token punctuation">:</span> <span class="token string">&#x27;standalone&#x27;</span>
-</span><span class="code-line">    <span class="token atrule key">segmentGenerationJobRunnerClassName</span><span class="token punctuation">:</span> <span class="token string">&#x27;org.apache.pinot.plugin.ingestion.batch.standalone.SegmentGenerationJobRunner&#x27;</span>
-</span><span class="code-line">    <span class="token atrule key">segmentTarPushJobRunnerClassName</span><span class="token punctuation">:</span> <span class="token string">&#x27;org.apache.pinot.plugin.ingestion.batch.standalone.SegmentTarPushJobRunner&#x27;</span>
-</span><span class="code-line">    <span class="token atrule key">segmentUriPushJobRunnerClassName</span><span class="token punctuation">:</span> <span class="token string">&#x27;org.apache.pinot.plugin.ingestion.batch.standalone.SegmentUriPushJobRunner&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">jobType</span><span class="token punctuation">:</span> SegmentCreationAndTarPush
-</span><span class="code-line"><span class="token atrule key">inputDirURI</span><span class="token punctuation">:</span> <span class="token string">&#x27;s3://marks-st-cloud-bucket/events/&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">includeFileNamePattern</span><span class="token punctuation">:</span> <span class="token string">&#x27;glob:**/*.json&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">outputDirURI</span><span class="token punctuation">:</span> <span class="token string">&#x27;/data&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">overwriteOutput</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>
-</span><span class="code-line"><span class="token atrule key">pinotFSSpecs</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token punctuation">-</span> <span class="token atrule key">scheme</span><span class="token punctuation">:</span> s3
-</span><span class="code-line">      <span class="token atrule key">className</span><span class="token punctuation">:</span> org.apache.pinot.plugin.filesystem.S3PinotFS
-</span><span class="code-line">      <span class="token atrule key">configs</span><span class="token punctuation">:</span>
-</span><span class="code-line">          <span class="token atrule key">region</span><span class="token punctuation">:</span> <span class="token string">&#x27;eu-west-2&#x27;</span>
-</span><span class="code-line">    <span class="token punctuation">-</span> <span class="token atrule key">scheme</span><span class="token punctuation">:</span> file
-</span><span class="code-line">      <span class="token atrule key">className</span><span class="token punctuation">:</span> org.apache.pinot.spi.filesystem.LocalPinotFS
-</span><span class="code-line"><span class="token atrule key">recordReaderSpec</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token atrule key">dataFormat</span><span class="token punctuation">:</span> <span class="token string">&#x27;json&#x27;</span>
-</span><span class="code-line">    <span class="token atrule key">className</span><span class="token punctuation">:</span> <span class="token string">&#x27;org.apache.pinot.plugin.inputformat.json.JSONRecordReader&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">tableSpec</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token atrule key">tableName</span><span class="token punctuation">:</span> <span class="token string">&#x27;events&#x27;</span>
-</span><span class="code-line"><span class="token atrule key">pinotClusterSpecs</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token punctuation">-</span> <span class="token atrule key">controllerURI</span><span class="token punctuation">:</span> <span class="token string">&#x27;http://${PINOT_CONTROLLER}:9000&#x27;</span>
-</span></code></pre></div><p>At a high level, this file describes a batch import job that will ingest files from the S3 bucket at s3://marks-st-cloud-bucket/events/ where the files match the glob:**/*.json pattern.</p><p>We can import the data by running the following command from the terminal:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">--network</span> ingest-json-files-s3 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-e</span> <span class="token variable assign-left">AWS_ACCESS_KEY_ID</span><span class="token operator">=</span>AKIARCOCT6DWLUB7F77Z <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-e</span> <span class="token variable assign-left">AWS_SECRET_ACCESS_KEY</span><span class="token operator">=</span>gfz71RX+Tj4udve43YePCBqMsIeN1PvHXrVFyxJS <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.11.0 LaunchDataIngestionJob <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-jobSpecFile</span> /config/job-spec.yml <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-values</span> <span class="token variable assign-left">PINOT_CONTROLLER</span><span class="token operator">=</span>pinot-controller
-</span></code></pre></div><p>And don’t worry, those credentials have already been deleted; I find it easier to understand what values go where if we use real values.</p><p>Once we’ve run this command, if we go to the Pinot UI at <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/">http://localhost:9000</a> and click through to the events table from the Query Console menu, we’ll see that the records have been imported, as shown in the screenshot below:</p><p><img alt [...]
-</span><span class="code-line">  <span class="token property">&quot;taskTypeConfigsMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">&quot;SegmentGenerationAndPushTask&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>As long as you’ve done those two things, we’re ready to write our import query! A query that imports JSON files from my S3 bucket is shown below:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> events
-</span><span class="code-line"><span class="token keyword">FROM</span> <span class="token keyword">FILE</span> <span class="token string">&#x27;s3://marks-st-cloud-bucket/events/&#x27;</span>
-</span><span class="code-line"><span class="token keyword">OPTION</span><span class="token punctuation">(</span>
-</span><span class="code-line">  taskName<span class="token operator">=</span>events<span class="token operator">-</span>task<span class="token punctuation">,</span>
-</span><span class="code-line">  includeFileNamePattern<span class="token operator">=</span>glob:<span class="token operator">*</span><span class="token operator">*</span><span class="token operator">/</span><span class="token operator">*</span><span class="token punctuation">.</span>json<span class="token punctuation">,</span>
-</span><span class="code-line">  input<span class="token punctuation">.</span>fs<span class="token punctuation">.</span>className<span class="token operator">=</span>org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>pinot<span class="token punctuation">.</span>plugin<span class="token punctuation">.</span>filesystem<span class="token punctuation">.</span>S3PinotFS<span class="token punctuation">,</span>
-</span><span class="code-line">  input<span class="token punctuation">.</span>fs<span class="token punctuation">.</span>prop<span class="token punctuation">.</span>accessKey<span class="token operator">=</span>AKIARCOCT6DWLUB7F77Z<span class="token punctuation">,</span>
-</span><span class="code-line">  input<span class="token punctuation">.</span>fs<span class="token punctuation">.</span>prop<span class="token punctuation">.</span>secretKey<span class="token operator">=</span>gfz71RX<span class="token operator">+</span>Tj4udve43YePCBqMsIeN1PvHXrVFyxJS<span class="token punctuation">,</span>
-</span><span class="code-line">  input<span class="token punctuation">.</span>fs<span class="token punctuation">.</span>prop<span class="token punctuation">.</span>region<span class="token operator">=</span>eu<span class="token operator">-</span>west<span class="token operator">-</span><span class="token number">2</span>
-</span><span class="code-line"><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span></code></pre></div><p>If we run this query, we’ll see the following output:</p><p><img alt="Sample events_OFFLINE query result" src="https://www.datocms-assets.com/75153/1668701654-image5.png" title="Sample events_OFFLINE query result"/></p><p>We can check on the state of the ingestion job via the Swagger REST API. If we navigate to <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/help#/Task/getTaskState">http://localhost:9000/help#/Task/getTaskState</a>, p [...]
\ No newline at end of file
diff --git a/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.txt b/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.txt
deleted file mode 100644
index eaefb4d8..00000000
--- a/blog/2022/11/17/Apache Pinot-Inserts-from-SQL.txt	
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/11/17/Apache%20Pinot-Inserts-from-SQL","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"11\",\"17\",\"Apache Pinot-Inserts-from-SQL\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.11 - Inserts from SQL | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Explore the INSERT INTO clause, which makes ingesting batch data into Pinot as easy as writing a SQL query."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follo [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.11 - Inserts from SQL\",\"datePublished\":\"2022-11-17T00:00:00.000Z\",\"dateModified\":\"2022-11-17T00:00:00.000Z\",\"description\":\"Explore the INSERT INTO clause, which makes ingesting batch data into Pinot as easy as writing a SQL query.\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https:// [...]
-d:null
diff --git a/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.html b/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.html
deleted file mode 100644
index 778866a1..00000000
--- a/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1669133004-image1.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1669132979-image3.png"/><link  [...]
-</span><span class="code-line">  <span class="token variable parameter">-p</span> <span class="token number">8000</span>:8000 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-p</span> <span class="token number">9000</span>:9000 <span class="token punctuation">\</span>
-</span><span class="code-line"> <span class="token variable parameter">--name</span> pinot-timestamp-blog <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.11.0 <span class="token punctuation">\</span>
-</span><span class="code-line">  QuickStart <span class="token variable parameter">-type</span> EMPTY
-</span></code></pre></div><p>Or if you’re on a Mac M1, change the name of the image to have the arm-64 suffix, like this:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-p</span> <span class="token number">8000</span>:8000 <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">-p</span> <span class="token number">9000</span>:9000 <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line"> <span class="token variable parameter">--name</span> pinot-timestamp-blog <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.11.0-arm64 <span class="token punctuation">\</span>
-</span><span class="code-line">  QuickStart <span class="token variable parameter">-type</span> EMPTY
-</span></code></pre></div><p>Once that’s up and running, we’ll be able to access the Pinot Data Explorer at <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/">http://localhost:9000</a>, but at the moment, we don’t have any data to play with.</p><h2 id="importing-chicago-crime-dataset"><a href="#importing-chicago-crime-dataset" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Importing Chicago Crime Dataset</h2><p>The <a target="_blank" rel= [...]
-</span><span class="code-line">   <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-schemaFile</span> /config/schema.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-tableConfigFile</span> /config/table.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-controllerHost</span> pinot-timestamp-blog <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">-exec</span>
-</span><span class="code-line">
-</span></code></pre></div><p>We should see the following output:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line">  <span class="token number">2022</span>/11/03 <span class="token number">13</span>:07:57.169 INFO <span class="token punctuation">\</span><span class="token punctuation">[</span>AddTableCommand<span class="token punctuation">\</span><span class="token punctuation">]</span> <span class="token punctuation">\</span><span class="to [...]
-</span></code></pre></div><p>A screenshot of the schema is shown below:</p><p><img alt="Chicago crime dataset table schema" src="https://www.datocms-assets.com/75153/1669132979-image3.png" title="Chicago crime dataset table schema"/></p><p>We won’t go through the table config and schema files in this blog post because we did that in the last post, but you can find them in the <a target="_blank" rel="noopener noreferrer" href="https://github.com/startreedata/pinot-recipes/tree/main/recipe [...]
-</span><span class="code-line">   <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/data:/data <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 LaunchDataIngestionJob <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">-jobSpecFile</span> /config/job-spec.yml <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-values</span> <span class="token variable assign-left">controllerHost</span><span class="token operator">=</span>pinot-timestamp-blog
-</span></code></pre></div><p>It will take a few minutes to load, but once that command has finished, we’re ready to query the crimes table.</p><h2 id="querying-crimes-by-date"><a href="#querying-crimes-by-date" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Querying crimes by date</h2><p>The following query finds the number of crimes that happened after 16th January 2017, grouped by week of the year, with the most crime-filled weeks shown first:</p><div class="r [...]
-</span><span class="code-line"><span class="token keyword">from</span> crimes
-</span><span class="code-line"><span class="token keyword">WHERE</span> tsWeek <span class="token operator">&gt;</span> fromDateTime<span class="token punctuation">(</span><span class="token string">&#x27;2017-01-16&#x27;</span><span class="token punctuation">,</span> <span class="token string">&#x27;yyyy-MM-dd&#x27;</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">group</span> <span class="token keyword">by</span> tsWeek
-</span><span class="code-line"><span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">DESC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>If we run that query, we’ll see the following results:</p><p><img alt="Chicago crime dataset query result" src="https://www.datocms-assets.com/75153/1669133027-image6.png" title="Chicago crime dataset query result"/></p><p>And, if we look above the query result, there’s metadata about the query, including the time that it took to run.</p><p><img alt="Chicago crime dataset metadata about the query, including the time that it took to run" src="https://www.datoc [...]
-</span><span class="code-line">  <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;DateEpoch&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;encodingType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;DICTIONARY&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;indexTypes&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;timestampConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;granularities&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token string">&quot;DAY&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token string">&quot;WEEK&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token string">&quot;MONTH&quot;</span>
-</span><span class="code-line">      <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line">  <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span></code></pre></div><p><em>encodingType</em> will always be ‘DICTIONARY’ and <em>indexTypes</em> must contain ‘TIMESTAMP’. We should specify granularities based on our query patterns.</p><p>As a rule of thumb, work out which values you most commonly pass as the first argument to the <a target="_blank" rel="noopener noreferrer" href="https://docs.pinot.apache.org/configuration-reference/functions/datetrunc">datetrunc function</a> in your queries and include those values.</p><p>The f [...]
-</span><span class="code-line">   <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-schemaFile</span> /config/schema-index.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-tableConfigFile</span> /config/table-index.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-controllerHost</span> pinot-timestamp-blog <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">-exec</span>
-</span></code></pre></div><p>We’ll populate that table by copying the segment that we created earlier for the crimes table.</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">--network</span> timestamp_blog <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/data:/data <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 LaunchDataIngestionJob <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">-jobSpecFile</span> /config/job-spec-download.yml <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-values</span> <span class="token variable assign-left">controllerHost</span><span class="token operator">=</span>pinot-timestamp-blog
-</span></code></pre></div><p>If you’re curious how that job spec works, I <a target="_blank" rel="noopener noreferrer" href="https://www.markhneedham.com/blog/2021/12/06/apache-pinot-copy-segment-new-table/">wrote a blog post explaining it in a bit more detail</a>.</p><p>Once the Pinot Server has downloaded this segment, it will apply the timestamp index to the DateEpoch column.</p><p>For the curious, we can see this happening in the log files by connecting to the Pinot container and run [...]
-</span><span class="code-line">  <span class="token function">grep</span> <span class="token variable parameter">-rni</span> <span class="token variable parameter">-A10</span> <span class="token string">&quot;Successfully downloaded segment:.*crimes_indexed_OFFLINE.*&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  logs/pinot-all.log
-</span></code></pre></div><p>We’ll see something like the following (tidied up for brevity):</p><div class="relative"><pre><code class="code-highlight language-log"><span class="code-line"><span class="token punctuation">[</span>BaseTableDataManager<span class="token punctuation">]</span>  <span class="token property">Successfully downloaded segment:</span> <span class="token property">crimes_OFFLINE_0 of table:</span> <span class="token property">crimes_indexed_OFFLINE to index dir:</sp [...]
-</span><span class="code-line"><span class="token punctuation">[</span>V3DefaultColumnHandler<span class="token punctuation">]</span>  <span class="token property">Starting default column action:</span> <span class="token property">ADD_DATE_TIME on column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>DAY
-</span><span class="code-line"><span class="token punctuation">[</span>SegmentDictionaryCreator<span class="token punctuation">]</span>  <span class="token property">Created dictionary for LONG column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>DAY with cardinality<span class="token operator">:</span> <span class="token number">7969</span><span class="token punctuation">,</span> range<span class="token operator">:</span> <span class="token n [...]
-</span><span class="code-line"><span class="token punctuation">[</span>V3DefaultColumnHandler<span class="token punctuation">]</span>  <span class="token property">Starting default column action:</span> <span class="token property">ADD_DATE_TIME on column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>WEEK
-</span><span class="code-line"><span class="token punctuation">[</span>SegmentDictionaryCreator<span class="token punctuation">]</span>  <span class="token property">Created dictionary for LONG column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>WEEK with cardinality<span class="token operator">:</span> <span class="token number">1139</span><span class="token punctuation">,</span> range<span class="token operator">:</span> <span class="token  [...]
-</span><span class="code-line"><span class="token punctuation">[</span>V3DefaultColumnHandler<span class="token punctuation">]</span>  <span class="token property">Starting default column action:</span> <span class="token property">ADD_DATE_TIME on column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>MONTH
-</span><span class="code-line"><span class="token punctuation">[</span>SegmentDictionaryCreator<span class="token punctuation">]</span>  <span class="token property">Created dictionary for LONG column:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>MONTH with cardinality<span class="token operator">:</span> <span class="token number">262</span><span class="token punctuation">,</span> range<span class="token operator">:</span> <span class="token  [...]
-</span><span class="code-line"><span class="token punctuation">[</span>RangeIndexHandler<span class="token punctuation">]</span>  <span class="token property">Creating new range index for segment:</span> crimes_OFFLINE_0<span class="token punctuation">,</span> column<span class="token operator">:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>DAY
-</span><span class="code-line"><span class="token punctuation">[</span>RangeIndexHandler<span class="token punctuation">]</span>  <span class="token property">Created range index for segment:</span> crimes_OFFLINE_0<span class="token punctuation">,</span> column<span class="token operator">:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>DAY
-</span><span class="code-line"><span class="token punctuation">[</span>RangeIndexHandler<span class="token punctuation">]</span>  <span class="token property">Creating new range index for segment:</span> crimes_OFFLINE_0<span class="token punctuation">,</span> column<span class="token operator">:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>WEEK
-</span><span class="code-line"><span class="token punctuation">[</span>RangeIndexHandler<span class="token punctuation">]</span>  <span class="token property">Created range index for segment:</span> crimes_OFFLINE_0<span class="token punctuation">,</span> column<span class="token operator">:</span> <span class="token operator">$</span>DateEpoch<span class="token operator">$</span>WEEK
-</span><span class="code-line">
-</span></code></pre></div><h2 id="what-does-a-timestamp-index-do"><a href="#what-does-a-timestamp-index-do" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>What does a timestamp index do?</h2><p>So, the timestamp index has now been created, but what does it actually do?</p><p>When we add a timestamp index on a column, Pinot creates a derived column for each granularity and adds a range index for each new column.</p><p>In our case, that means we’ll have these extr [...]
-</span><span class="code-line"><span class="token keyword">from</span> crimes_indexed
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> tsWeek
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>Would be rewritten as:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">select</span>  $DateEpoch$WEEK <span class="token keyword">as</span> tsWeek<span class="token punctuation">,</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">from</span> crimes_indexed
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span> tsWeek
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>And our query:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">select</span> datetrunc<span class="token punctuation">(</span><span class="token string">&#x27;WEEK&#x27;</span><span class="token punctuation">,</span> DateEpoch<span class="token punctuation">)</span> <span class="token keyword">as</span> tsWeek<span class="token punctuation">,</span> <span class="token function">count< [...]
-</span><span class="code-line"><span class="token keyword">from</span> crimes
-</span><span class="code-line"><span class="token keyword">WHERE</span> tsWeek <span class="token operator">&gt;</span> fromDateTime<span class="token punctuation">(</span><span class="token string">&#x27;2017-01-16&#x27;</span><span class="token punctuation">,</span> <span class="token string">&#x27;yyyy-MM-dd&#x27;</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">group</span> <span class="token keyword">by</span> tsWeek
-</span><span class="code-line"><span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">DESC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>Would be rewritten as:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">select</span> $DateEpoch$WEEK <span class="token keyword">as</span> tsWeek<span class="token punctuation">,</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">from</span> crimes
-</span><span class="code-line"><span class="token keyword">WHERE</span> tsWeek <span class="token operator">&gt;</span> fromDateTime<span class="token punctuation">(</span><span class="token string">&#x27;2017-01-16&#x27;</span><span class="token punctuation">,</span> <span class="token string">&#x27;yyyy-MM-dd&#x27;</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">group</span> <span class="token keyword">by</span> tsWeek
-</span><span class="code-line"><span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">DESC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><h2 id="re-running-the-query"><a href="#re-running-the-query" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Re-running the query</h2><p>Let’s now run our initial query against the <em>crimes_indexed</em> table. We’ll get exactly the same results as before, but let’s take a look at the query stats:</p><p><img alt="Chicago crime dataset updated query stats" src="https://www.datocms-assets.com/75153/1669133083-image4.png" title="Chicago c [...]
\ No newline at end of file
diff --git a/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.txt b/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.txt
deleted file mode 100644
index 685569be..00000000
--- a/blog/2022/11/22/Apache-Pinot-Timestamp-Indexes.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/11/22/Apache-Pinot-Timestamp-Indexes","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"11\",\"22\",\"Apache-Pinot-Timestamp-Indexes\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.11 - Timestamp Indexes | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Users write queries that use the datetrunc function to filter at a coarser grain of functionality. Unfortunately, this approach results in scanning data and time value conversion work that takes a long time at large data volumes.  [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[7246,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-13:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.11 - Timestamp Indexes\",\"datePublished\":\"2022-11-22T00:00:00.000Z\",\"dateModified\":\"2022-11-22T00:00:00.000Z\",\"description\":\"Users write queries that use the datetrunc function to filter at a coarser grain of functionality. Unfortunately, this approach results in scanning data and time value conve [...]
-d:null
diff --git a/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.html b/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.html
deleted file mode 100644
index 7865fd0d..00000000
--- a/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://i3.ytimg.com/vi/u9CwDpMZRog/maxresdefault.jpg"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1669733133-pinot_0-11-realtime_inje [...]
-</span><span class="code-line"><span class="token keyword">import</span> uuid
-</span><span class="code-line"><span class="token keyword">import</span> random
-</span><span class="code-line"><span class="token keyword">import</span> json
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span>
-</span><span class="code-line">    ts <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">&quot;%Y-%m-%dT%H:%M:%S.%fZ&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">    <span class="token builtin">id</span> <span class="token operator">=</span> <span class="token builtin">str</span><span class="token punctuation">(</span>uuid<span class="token punctuation">.</span>uuid4<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
-</span><span class="code-line">    count <span class="token operator">=</span> random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span>
-</span><span class="code-line">    <span class="token keyword">print</span><span class="token punctuation">(</span>
-</span><span class="code-line">        json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">&quot;tsString&quot;</span><span class="token punctuation">:</span> ts<span class="token punctuation">,</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">:</span> <span class="token builtin">id</span><span class="token punctuation">,</span> <span class="toke [...]
-</span><span class="code-line">    <span class="token punctuation">)</span>
-</span></code></pre></div><p>We can view the data generated by this script by pasting the above code into a file called datagen.py and then running the following command:</p><p>python datagen.py 2&gt;/dev/null | head -n3 | jq</p><p>We’ll see the following output:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2022-11-23T12:08:44.127481Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;e1c58795-a009-4e21-ae76-cdd66e090797&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">203</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2022-11-23T12:08:44.127531Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;4eedce04-d995-4e99-82ab-6f836b35c580&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">216</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2022-11-23T12:08:44.127550Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;6d72411b-55f5-4f9f-84e4-7c8c5c4581ff&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">721</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>We’re going to pipe this data into a Kafka stream called ‘events’ like this:</p><p>python datagen.py | kcat -P -b localhost:9092 -t events</p><p>We’re not setting a key for these messages in Kafka for simplicity’s sake, but Robin Moffat has an <a target="_blank" rel="noopener noreferrer" href="https://rmoff.net/2020/09/30/setting-key-value-when-piping-from-jq-to-kafkacat/">excellent blog post that explains how to do it</a>.</p><h2 id="pinot-schematable-config [...]
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</sp [...]
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;count&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span [...]
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Note that the timestamp field is called ts and not tsString, as it is in the Kafka stream. We will transform the DateTime string value held in that field into a proper timestamp using a transformation function.</p><p>Our table config is described below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka-pause-resume:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;FromDateTime(tsString, &#x27;YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SS&#x27;&#x27;Z&#x27;&#x27;&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Our transformation has a subtle error. The second parameter passed to the FromDateTime function describes the format of the DateTime string, which we defined as:</p><p>YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SS&#x27;&#x27;Z&#x27;&#x27;</p><p>But tsString has values in the following format:</p><p>2022-11-23T12:08:44.127550Z</p><p>i.e., we don’t have enough S values - there should be 5 rather than 2.</p><p>If we create the table using the following command: [...]
-</span><span class="code-line">   <span class="token parameter variable">--network</span>  pause-resume <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token parameter variable">-v</span> <span class="token constant environment">$PWD</span>/pinot/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-schemaFile</span> /config/schema.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-tableConfigFile</span> /config/table.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-controllerHost</span> pinot-controller-pause-resume <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token parameter variable">-exec</span>
-</span></code></pre></div><p>Pinot will immediately start trying to ingest data from Kafka, and it will throw a lot of exceptions that look like this:</p><div class="relative"><pre><code class="code-highlight language-log"><span class="code-line"><span class="token property">java.lang.RuntimeException:</span> <span class="token property">Caught exception while executing function:</span> fromDateTime<span class="token operator">(</span>tsString<span class="token punctuation">,</span><span [...]
-</span><span class="code-line">…
-</span><span class="code-line"><span class="token property">Caused by:</span> <span class="token property">java.lang.IllegalStateException:</span> <span class="token property">Caught exception while invoking method:</span> public static long org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>pinot<span class="token punctuation">.</span>common<span class="token punctuation">.</span>function<span class="token punctuation">.</span>scalar<span class="tok [...]
-</span><span class="code-line">
-</span></code></pre></div><p>At this point, we’d usually be stuck and would need to fix the transformation function and then restart the Pinot server. With the pause/resume feature, we can fix this problem without resorting to such drastic measures.</p><h2 id="the-pauseresume-flow"><a href="#the-pauseresume-flow" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>The Pause/Resume Flow</h2><p>Instead, we can follow these steps:</p><ul><li>Pause ingestion for the tabl [...]
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/events/pauseConsumption&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><p>The response should be something like this:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;pauseFlag&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;consumingSegments&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;events__0__0__20221123T1106Z&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;description&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Pause flag is set. Consuming segments are being committed. Use /pauseStatus endpoint in a few moments to check if all consuming segments have been committed.&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Let’s follow the response’s advice and check the consuming segments status:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">curl</span> <span class="token parameter variable">-X</span> GET <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/events/pauseStatus&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><p>We’ll see the following response:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;pauseFlag&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;consumingSegments&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>So far, so good. Now we need to fix the table. We have a config, table-fixed.json, that contains a working transformation config. These are the lines of interest:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;FromDateTime(tsString, &#x27;YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SSSSSS&#x27;&#x27;Z&#x27;&#x27;&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>We now have five S values rather than two, which should sort out our ingestion.</p><p>Update the table config:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">curl</span> <span class="token parameter variable">-X</span> PUT <span class="token string">&quot;http://localhost:9000/tables/events&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line"> <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line"> <span class="token parameter variable">-H</span> <span class="token string">&quot;Content-Type: application/json&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line"> <span class="token parameter variable">-d</span> @pinot/config/table-fixed.json
-</span></code></pre></div><p>And then resume ingestion. You can pass in the query string parameter consumeFrom, which takes a value of smallest or largest. We’ll pass in smallest since no data has been consumed yet:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">curl</span> <span class="token parameter variable">-X</span> POST <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/events/resumeConsumption?consumeFrom=smallest&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><p>The response will be like this:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;pauseFlag&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;consumingSegments&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;description&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Pause flag is cleared. Consuming segments are being created. Use /pauseStatus endpoint in a few moments to double check.&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Again, let’s check the consuming segments status:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">curl</span> <span class="token parameter variable">-X</span> GET <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/events/pauseStatus&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><p>This time we will see some consuming segments:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;pauseFlag&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;consumingSegments&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;events__0__22__20221123T1124Z&quot;</span><span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Navigate to <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/#/query">http://localhost:9000/#/query</a> and click on the events table. You should see the following:</p><p><img alt="Sample events table containing records" src="https://www.datocms-assets.com/75153/1669668611-image2.png" title="Sample events table containing records"/></p><p>We have records! We can also run our data generator again, and more events will be ingested.</p><h [...]
\ No newline at end of file
diff --git a/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.txt b/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.txt
deleted file mode 100644
index a30cee5c..00000000
--- a/blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion","c"],{"children":["__PAGE__?{\"slug\":[\"2022\",\"11\",\"28\",\"Apache-Pinot-Pausing-Real-Time-Ingestion\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.11 - Pausing Real-Time Ingestion | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Learn about a feature that lets you pause and resume real-time data ingestion in Apache Pinot"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow,  [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.11 - Pausing Real-Time Ingestion\",\"datePublished\":\"2022-11-28T00:00:00.000Z\",\"dateModified\":\"2022-11-28T00:00:00.000Z\",\"description\":\"Learn about a feature that lets you pause and resume real-time data ingestion in Apache Pinot\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pin [...]
-d:null
diff --git a/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.html b/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.html
deleted file mode 100644
index 4c98f33b..00000000
--- a/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1673273173-image4.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1673273248-image3.png"/><link  [...]
-</span><span class="code-line"><span class="token atrule key">services</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token atrule key">zookeeper</span><span class="token punctuation">:</span>
-</span><span class="code-line">        <span class="token atrule key">image</span><span class="token punctuation">:</span> zookeeper<span class="token punctuation">:</span>3.8.0
-</span><span class="code-line">        <span class="token atrule key">hostname</span><span class="token punctuation">:</span> zookeeper
-</span><span class="code-line">        <span class="token atrule key">container_name</span><span class="token punctuation">:</span> zookeeper<span class="token punctuation">-</span>dedup<span class="token punctuation">-</span>blog
-</span><span class="code-line">        <span class="token atrule key">ports</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> <span class="token string">&#x27;2181:2181&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">environment</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token atrule key">ZOOKEEPER_CLIENT_PORT</span><span class="token punctuation">:</span> <span class="token number">2181</span>
-</span><span class="code-line">            <span class="token atrule key">ZOOKEEPER_TICK_TIME</span><span class="token punctuation">:</span> <span class="token number">2000</span>
-</span><span class="code-line">        <span class="token atrule key">networks</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> dedup_blog
-</span><span class="code-line">    <span class="token atrule key">kafka</span><span class="token punctuation">:</span>
-</span><span class="code-line">        <span class="token atrule key">image</span><span class="token punctuation">:</span> wurstmeister/kafka<span class="token punctuation">:</span>latest
-</span><span class="code-line">        <span class="token atrule key">restart</span><span class="token punctuation">:</span> unless<span class="token punctuation">-</span>stopped
-</span><span class="code-line">        <span class="token atrule key">container_name</span><span class="token punctuation">:</span> <span class="token string">&#x27;kafka-dedup-blog&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">ports</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> <span class="token string">&#x27;9092:9092&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">expose</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> <span class="token string">&#x27;9093&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">depends_on</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> zookeeper
-</span><span class="code-line">        <span class="token atrule key">environment</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token atrule key">KAFKA_ZOOKEEPER_CONNECT</span><span class="token punctuation">:</span> zookeeper<span class="token punctuation">-</span>dedup<span class="token punctuation">-</span>blog<span class="token punctuation">:</span>2181/kafka
-</span><span class="code-line">            <span class="token atrule key">KAFKA_BROKER_ID</span><span class="token punctuation">:</span> <span class="token number">0</span>
-</span><span class="code-line">            <span class="token atrule key">KAFKA_ADVERTISED_HOST_NAME</span><span class="token punctuation">:</span> kafka<span class="token punctuation">-</span>dedup<span class="token punctuation">-</span>blog
-</span><span class="code-line">            <span class="token atrule key">KAFKA_ADVERTISED_LISTENERS</span><span class="token punctuation">:</span> PLAINTEXT<span class="token punctuation">:</span>//kafka<span class="token punctuation">-</span>dedup<span class="token punctuation">-</span>blog<span class="token punctuation">:</span><span class="token number">9093</span><span class="token punctuation">,</span>OUTSIDE<span class="token punctuation">:</span>//localhost<span class="token punc [...]
-</span><span class="code-line">            <span class="token atrule key">KAFKA_LISTENERS</span><span class="token punctuation">:</span> PLAINTEXT<span class="token punctuation">:</span>//0.0.0.0<span class="token punctuation">:</span><span class="token number">9093</span><span class="token punctuation">,</span>OUTSIDE<span class="token punctuation">:</span>//0.0.0.0<span class="token punctuation">:</span><span class="token number">9092</span>
-</span><span class="code-line">            <span class="token atrule key">KAFKA_LISTENER_SECURITY_PROTOCOL_MAP</span><span class="token punctuation">:</span> PLAINTEXT<span class="token punctuation">:</span>PLAINTEXT<span class="token punctuation">,</span>OUTSIDE<span class="token punctuation">:</span>PLAINTEXT
-</span><span class="code-line">        <span class="token atrule key">networks</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> dedup_blog
-</span><span class="code-line">    <span class="token atrule key">pinot-controller</span><span class="token punctuation">:</span>
-</span><span class="code-line">        <span class="token atrule key">image</span><span class="token punctuation">:</span> apachepinot/pinot<span class="token punctuation">:</span>0.11.0<span class="token punctuation">-</span>arm64
-</span><span class="code-line">        <span class="token atrule key">command</span><span class="token punctuation">:</span> <span class="token string">&#x27;QuickStart -type EMPTY&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">container_name</span><span class="token punctuation">:</span> <span class="token string">&#x27;pinot-controller-dedup-blog&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">volumes</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> ./config<span class="token punctuation">:</span>/config
-</span><span class="code-line">        <span class="token atrule key">restart</span><span class="token punctuation">:</span> unless<span class="token punctuation">-</span>stopped
-</span><span class="code-line">        <span class="token atrule key">ports</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> <span class="token string">&#x27;9000:9000&#x27;</span>
-</span><span class="code-line">        <span class="token atrule key">networks</span><span class="token punctuation">:</span>
-</span><span class="code-line">            <span class="token punctuation">-</span> dedup_blog
-</span><span class="code-line"><span class="token atrule key">networks</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token atrule key">dedup_blog</span><span class="token punctuation">:</span>
-</span><span class="code-line">        <span class="token atrule key">name</span><span class="token punctuation">:</span> dedup_blog
-</span></code></pre></div><p>We can spin up our infrastructure using the following command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker-compose</span> up
-</span></code></pre></div><h2 id="data-generation"><a href="#data-generation" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Data Generation</h2><p>Let’s imagine that we want to ingest events generated by the following Python script:</p><div class="relative"><pre><code class="code-highlight language-python"><span class="code-line"><span class="token keyword">import</span> datetime
-</span><span class="code-line"><span class="token keyword">import</span> uuid
-</span><span class="code-line"><span class="token keyword">import</span> random
-</span><span class="code-line"><span class="token keyword">import</span> json
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span>
-</span><span class="code-line">    ts <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">&quot;%Y-%m-%dT%H:%M:%S.%fZ&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">    <span class="token builtin">id</span> <span class="token operator">=</span> <span class="token builtin">str</span><span class="token punctuation">(</span>uuid<span class="token punctuation">.</span>uuid4<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
-</span><span class="code-line">    count <span class="token operator">=</span> random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span>
-</span><span class="code-line">    <span class="token keyword">print</span><span class="token punctuation">(</span>
-</span><span class="code-line">        json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">&quot;tsString&quot;</span><span class="token punctuation">:</span> ts<span class="token punctuation">,</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">:</span> <span class="token builtin">id</span><span class="token punctuation">[</span><span class="token [...]
-</span><span class="code-line">    <span class="token punctuation">)</span>
-</span></code></pre></div><p>We can view the data generated by this script by pasting the above code into a file called datagen.py and then running the following command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py <span class="token operator"><span class="token file-descriptor important">2</span>&gt;</span>/dev/null <span class="token operator">|</span> <span class="token function">head</span> <span class="token para [...]
-</span></code></pre></div><p>We’ll see the following output:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2023-01-03T10:59:17.355081Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;f94&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">541</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2023-01-03T10:59:17.355125Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;057&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">96</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2023-01-03T10:59:17.355141Z&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span> <span class="token string">&quot;d7b&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;count&quot;</span><span class="token operator">:</span> <span class="token number">288</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>If we generate only 25,000 events, we’ll get some duplicates, which we can see by running the following command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py <span class="token operator"><span class="token file-descriptor important">2</span>&gt;</span>/dev/null  <span class="token operator">|</span>
-</span><span class="code-line">jq <span class="token parameter variable">-r</span> <span class="token string">&#x27;.uuid&#x27;</span> <span class="token operator">|</span> <span class="token function">head</span> <span class="token parameter variable">-n25000</span> <span class="token operator">|</span> <span class="token function">uniq</span> <span class="token parameter variable">-cd</span>
-</span></code></pre></div><p>The results of running that command are shown below:</p><div class="relative"><pre><code class="code-highlight language-text"><span class="code-line">2 3a2
-</span><span class="code-line">2 a04
-</span><span class="code-line">2 433
-</span><span class="code-line">2 291
-</span><span class="code-line">2 d73
-</span></code></pre></div><p>We’re going to pipe this data into a Kafka stream called events, like this:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py <span class="token operator"><span class="token file-descriptor important">2</span>&gt;</span>/dev/null <span class="token operator">|</span>
-</span><span class="code-line">jq <span class="token parameter variable">-cr</span> <span class="token parameter variable">--arg</span> sep 😊 <span class="token string">&#x27;[.uuid, tostring] | join($sep)&#x27;</span> <span class="token operator">|</span>
-</span><span class="code-line">kcat <span class="token parameter variable">-P</span> <span class="token parameter variable">-b</span> localhost:9092 <span class="token parameter variable">-t</span> events -K😊
-</span></code></pre></div><p>The construction of the key/value structure comes from Robin Moffatt’s <a target="_blank" rel="noopener noreferrer" href="https://rmoff.net/2020/09/30/setting-key-value-when-piping-from-jq-to-kafkacat/">excellent blog post</a>. Since that blog post was written, kcat has started supporting multi byte separators, which is why we can use a smiley face to separate our key and value.</p><h2 id="pinot-schematable-config"><a href="#pinot-schematable-config" aria-hid [...]
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</sp [...]
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;count&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span [...]
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Note that the timestamp field is called ts and not tsString, as it is in the Kafka stream. We’re going to transform the DateTime string value held in that field into a proper timestamp using a transformation function.</p><p>Our table config is described below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka-dedup-blog:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;FromDateTime(tsString, &#x27;YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SSSSSS&#x27;&#x27;Z&#x27;&#x27;&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Let’s create the table using the following command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token parameter variable">--network</span> dedup_blog <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token parameter variable">-v</span> <span class="token constant environment">$PWD</span>/pinot/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.11.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-schemaFile</span> /config/schema.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-tableConfigFile</span> /config/table.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token parameter variable">-controllerHost</span> <span class="token string">&quot;pinot-controller-dedup-blog&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token parameter variable">-exec</span>
-</span></code></pre></div><p>Now we can navigate to <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/">http://localhost:9000</a> and run a query that will return a count of the number of each uuid:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">select</span> uuid<span class="token punctuation">,</span> <span class="token function">count</span><span class="token punctuation">(</span><span  [...]
-</span><span class="code-line"><span class="token keyword">from</span> events
-</span><span class="code-line"><span class="token keyword">group</span> <span class="token keyword">by</span> uuid
-</span><span class="code-line"><span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>The results of this query are shown below:</p><p><img alt="Sample Apache Pinot real-time query response stats including duplicates" src="https://www.datocms-assets.com/75153/1673273173-image4.png" title="Sample Apache Pinot real-time query response stats including duplicates"/></p><p>We can see loads of duplicates!</p><p>Now let’s add a table and schema that uses the de-duplicate feature, starting with the schema:</p><div class="relative"><pre><code class="co [...]
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events_dedup&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;primaryKeyColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;uuid&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</sp [...]
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;count&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span [...]
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The main difference between this schema and the events schema is that we need to specify a primary key. This key can be any number of fields, but in this case, we’re only using the uuid field.</p><p>Next, the table config:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events_dedup&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events_dedup&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka-dedup-blog:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;routing&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">&quot;instanceSelectorType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;strictReplicaGroup&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dedupConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">&quot;dedupEnabled&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token property">&quot;hashFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;NONE&quot; [...]
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;FromDateTime(tsString, &#x27;YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SSSSSS&#x27;&#x27;Z&#x27;&#x27;&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The changes to notice here are:</p><ul><li><code>&quot;dedupConfig&quot;: {&quot;dedupEnabled&quot;: true, &quot;hashFunction&quot;: &quot;NONE&quot;}</code> - This enables the feature and indicates that we won’t use a hash function on our primary key.</li><li><code>&quot;routing&quot;: {&quot;instanceSelectorType&quot;: &quot;strictReplicaGroup&quot;}</code> - This makes sure that all segments of the same partition are served from the same server to ensure d [...]
-</span><span class="code-line">    <span class="token parameter variable">--network</span> dedup_blog <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token parameter variable">-v</span> <span class="token constant environment">$PWD</span>/pinot/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">    apachepinot/pinot:0.11.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">        <span class="token parameter variable">-schemaFile</span> /config/schema-dedup.json <span class="token punctuation">\</span>
-</span><span class="code-line">        <span class="token parameter variable">-tableConfigFile</span> /config/table-dedup.json <span class="token punctuation">\</span>
-</span><span class="code-line">        <span class="token parameter variable">-controllerHost</span> <span class="token string">&quot;pinot-controller-dedup-blog&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">        <span class="token parameter variable">-exec</span>
-</span><span class="code-line">
-</span><span class="code-line">    <span class="token keyword">select</span> uuid, count<span class="token punctuation">(</span>*<span class="token punctuation">)</span>
-</span><span class="code-line">    from events_dedup
-</span><span class="code-line">    group by uuid
-</span><span class="code-line">    order by count<span class="token punctuation">(</span>*<span class="token punctuation">)</span>
-</span><span class="code-line">    limit <span class="token number">10</span>
-</span></code></pre></div><p><img alt="Sample Apache Pinot real-time query response stats deduplicated" src="https://www.datocms-assets.com/75153/1673273248-image3.png" title="Sample Apache Pinot real-time query response stats deduplicated"/></p><p>We have every combination of hex values (16^3=4096) and no duplicates! Pinot’s de-duplication feature has done its job.</p><h2 id="how-does-it-work"><a href="#how-does-it-work" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></sp [...]
\ No newline at end of file
diff --git a/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.txt b/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.txt
deleted file mode 100644
index 1160b98c..00000000
--- a/blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"01\",\"29\",\"Apache-Pinot-Deduplication-on-Real-Time-Tables\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.11 - Deduplication on Real-Time Tables | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Learn about the deduplication for the real-time tables feature in Apache Pinot"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.11 - Deduplication on Real-Time Tables\",\"datePublished\":\"2023-01-29T00:00:00.000Z\",\"dateModified\":\"2023-01-29T00:00:00.000Z\",\"description\":\"Learn about the deduplication for the real-time tables feature in Apache Pinot\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pinot.apache [...]
-d:null
diff --git a/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.html b/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.html
deleted file mode 100644
index 6af2e45e..00000000
--- a/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://i3.ytimg.com/vi/lB3RaKJ0Hbs/maxresdefault.jpg"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1676991003-image2.png"/><link rel=" [...]
-</span></code></pre></div><p>The ingestion frequency can either be 1 hour or 1 day, so one of these values will be used.</p><p>When a query for a hybrid table is received by a Pinot Broker, the broker sends a time boundary annotated version of the query to the offline and real-time tables. Any records from or before the time boundary are read from the offline table; anything greater than the boundary comes from the real-time table.</p><p><img alt="Apache Pinot computing the time boundary [...]
-</span><span class="code-line"><span class="token keyword">FROM</span> events
-</span></code></pre></div><p>The broker would send the following query to the offline table:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">SELECT</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">FROM</span> events_OFFLINE
-</span><span class="code-line"><span class="token keyword">WHERE</span> timeColumn <span class="token operator">&lt;=</span> $timeBoundary
-</span></code></pre></div><p>And the following query to the real-time table:</p><div class="relative"><pre><code class="code-highlight language-sql"><span class="code-line"><span class="token keyword">SELECT</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">FROM</span> events_REALTIME
-</span><span class="code-line"><span class="token keyword">WHERE</span> timeColumn <span class="token operator">&gt;</span> $timeBoundary
-</span></code></pre></div><p>The results of the two queries are merged by the broker before being returned to the client.</p><h2 id="so-whats-the-problem"><a href="#so-whats-the-problem" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>So, what’s the problem?</h2><p>If we have some overlap in the data in our offline and real-time tables, this approach works well, but if we have no overlap, we will end up with unexpected results.</p><p>For example, let’s say that t [...]
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/{tableName}/timeBoundary&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><p>In this case, that will result in a new boundary time of 2023-01-09T18:41:17, which is exactly what we need.</p><p>We’ll then be able to query the events table and have it read the offline table to get all records on or before 2023-01-09T18:41:17 and the real-time table for everything else.</p><h2 id="neat-anything-else-i-should-know"><a href="#neat-anything-else-i-should-know" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Neat, any [...]
-</span><span class="code-line">  <span class="token string">&quot;http://localhost:9000/tables/{tableName}/timeBoundary&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-H</span> <span class="token string">&quot;accept: application/json&quot;</span>
-</span></code></pre></div><h2 id="summary"><a href="#summary" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Summary</h2><p>I love this feature, and it solves a problem I’ve struggled with when using my datasets. I hope you’ll find it just as useful.</p><p>Give it a try, and let us know how you get on. If you have any questions about this feature, feel free to join us on <a target="_blank" rel="noopener noreferrer" href="https://stree.ai/slack">Slack</a>, where  [...]
\ No newline at end of file
diff --git a/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.txt b/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.txt
deleted file mode 100644
index 394791a2..00000000
--- a/blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"02\",\"21\",\"Apache-Pinot-0-12-Configurable-Time-Boundary\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.12 - Configurable Time Boundary | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"This post will explore the ability to configure the time boundary when working with hybrid tables."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, foll [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.12 - Configurable Time Boundary\",\"datePublished\":\"2023-02-21T00:00:00.000Z\",\"dateModified\":\"2023-02-21T00:00:00.000Z\",\"description\":\"This post will explore the ability to configure the time boundary when working with hybrid tables.\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https:/ [...]
-d:null
diff --git a/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.html b/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.html
deleted file mode 100644
index e9c08295..00000000
--- a/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://i3.ytimg.com/vi/JJEh_kBfJts/maxresdefault.jpg"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1680190272-image2.png"/><link rel=" [...]
-</span><span class="code-line">--bootstrap-server localhost:9092 <span class="token punctuation">\</span>
-</span><span class="code-line"><span class="token parameter variable">--partitions</span> <span class="token number">5</span> <span class="token punctuation">\</span>
-</span><span class="code-line"><span class="token parameter variable">--topic</span> events <span class="token punctuation">\</span>
-</span><span class="code-line"><span class="token parameter variable">--create</span>
-</span></code></pre></div><p>We’re going to populate this topic with data from a data generator, which is shown below:</p><div class="relative"><pre><code class="code-highlight language-python"><span class="code-line"><span class="token keyword">import</span> datetime<span class="token punctuation">,</span> uuid<span class="token punctuation">,</span> random<span class="token punctuation">,</span> json<span class="token punctuation">,</span> click<span class="token punctuation">,</span> time
-</span><span class="code-line">
-</span><span class="code-line"><span class="token punctuation annotation decorator">@click<span class="token punctuation">.</span>command</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token punctuation annotation decorator">@click<span class="token punctuation">.</span>option</span><span class="token punctuation">(</span><span class="token string">&#x27;--sleep&#x27;</span><span class="token punctuation">,</span> default<span class="token operator">=</span><span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token builtin">help</span><span class="token operator">=</span><span class="toke [...]
-</span><span class="code-line"><span class="token keyword">def</span> <span class="token function">generate</span><span class="token punctuation">(</span>sleep<span class="token punctuation">)</span><span class="token punctuation">:</span>
-</span><span class="code-line">    <span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span>
-</span><span class="code-line">        ts <span class="token operator">=</span> datetime<span class="token punctuation">.</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">&quot;%Y-%m-%dT%H:%M:%S.%fZ&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">        <span class="token builtin">id</span> <span class="token operator">=</span> <span class="token builtin">str</span><span class="token punctuation">(</span>uuid<span class="token punctuation">.</span>uuid4<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
-</span><span class="code-line">        count <span class="token operator">=</span> random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span>
-</span><span class="code-line">        <span class="token keyword">print</span><span class="token punctuation">(</span>json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">&quot;tsString&quot;</span><span class="token punctuation">:</span> ts<span class="token punctuation">,</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">:</span> <span class="to [...]
-</span><span class="code-line">        time<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span>sleep<span class="token punctuation">)</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">&#x27;__main__&#x27;</span><span class="token punctuation">:</span>
-</span><span class="code-line">    generate<span class="token punctuation">(</span><span class="token punctuation">)</span>
-</span></code></pre></div><p>We can see an example of the messages generated by this script by running the following:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py <span class="token parameter variable">--sleep</span> <span class="token number">0.01</span> <span class="token operator"><span class="token file-descriptor important">2</span>&gt;</span>/dev/null <span class="token operator">|</span> <span class="token funct [...]
-</span></code></pre></div><p>You should see something like this:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span><span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span><span class="token string">&quot;2023-03-17T12:10:03.854680Z&quot;</span><span class="token punctuation">,</span><span class="token property">&quot;uuid&quot;</span><span class="token operator">:</ [...]
-</span><span class="code-line"><span class="token punctuation">{</span><span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span><span class="token string">&quot;2023-03-17T12:10:03.864815Z&quot;</span><span class="token punctuation">,</span><span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span><span class="token string">&quot;eac57622-4b58-4456-bb38-96d1ef5a1ed5&quot;</span><span class="token punctuation">,</span><spa [...]
-</span><span class="code-line"><span class="token punctuation">{</span><span class="token property">&quot;tsString&quot;</span><span class="token operator">:</span><span class="token string">&quot;2023-03-17T12:10:03.875723Z&quot;</span><span class="token punctuation">,</span><span class="token property">&quot;uuid&quot;</span><span class="token operator">:</span><span class="token string">&quot;65926a80-208a-408b-90d0-36cf74c8923a&quot;</span><span class="token punctuation">,</span><spa [...]
-</span></code></pre></div><p>So far, so good. Let’s now ingest this data into Kafka:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py <span class="token parameter variable">--sleep</span> <span class="token number">0.01</span> <span class="token operator"><span class="token file-descriptor important">2</span>&gt;</span>/dev/null <span class="token operator">|</span>
-</span><span class="code-line">jq <span class="token parameter variable">-cr</span> <span class="token parameter variable">--arg</span> sep ø <span class="token string">&#x27;[.uuid, tostring] | join($sep)&#x27;</span> <span class="token operator">|</span>
-</span><span class="code-line">kcat <span class="token parameter variable">-P</span> <span class="token parameter variable">-b</span> localhost:9092 <span class="token parameter variable">-t</span> events <span class="token parameter variable">-K</span>
-</span></code></pre></div><p>Next we’re going to create a Pinot schema and table. First, the schema config:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;uuid&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</sp [...]
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;count&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span [...]
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>And now, the table config:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka-lag-blog:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;realtime.segment.flush.threshold.rows&quot;</span><span class="token operator">:</span> <span class="token string">&quot;10000000&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;FromDateTime(tsString, &#x27;YYYY-MM-dd&#x27;&#x27;T&#x27;&#x27;HH:mm:ss.SSSSSS&#x27;&#x27;Z&#x27;&#x27;&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>We can create both the table and schema using the <em>AddTable</em> command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">--network</span> lag_blog <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-v</span> <span class="token constant environment">$PWD</span>/config:/config <span class="token punctuation">\</span>
-</span><span class="code-line">  apachepinot/pinot:0.12.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-schemaFile</span> /config/schema.json <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-tableConfigFile</span> /config/table.json <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-controllerHost</span> <span class="token string">&quot;pinot-controller-lag-blog&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token parameter variable">-exec</span>
-</span></code></pre></div><p>Now let’s call the /consumingSegmentsInfo endpoint to see what’s going on:</p><p><code>curl &quot;http://localhost:9000/tables/events/consumingSegmentsInfo&quot; 2&gt;/dev/null | jq</code></p><p>The output of calling this end point is shown below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token property">&quot;_segmentToConsumingInfoMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;events__0__0__20230317T1133Z&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">      <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;serverName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Server_172.29.0.4_8098&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;consumerState&quot;</span><span class="token operator">:</span> <span class="token string">&quot;CONSUMING&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;lastConsumedTimestamp&quot;</span><span class="token operator">:</span> <span class="token number">1679052823350</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;partitionToOffsetMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">          <span class="token property">&quot;0&quot;</span><span class="token operator">:</span> <span class="token string">&quot;969&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;partitionOffsetInfo&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">          <span class="token property">&quot;currentOffsetsMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;0&quot;</span><span class="token operator">:</span> <span class="token string">&quot;969&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;latestUpstreamOffsetMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;0&quot;</span><span class="token operator">:</span> <span class="token string">&quot;969&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;recordsLagMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;0&quot;</span><span class="token operator">:</span> <span class="token string">&quot;0&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;availabilityLagMsMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;0&quot;</span><span class="token operator">:</span> <span class="token string">&quot;26&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">      <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">…
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>If we look under <em>partitionOffsetInfo</em>, we can see what’s going on:</p><ul><li>currentOffsetsMap is Pinot’s current offset</li><li>latestUpstreamOffsetMap is Kafka’s offset</li><li>recordsLagMap is the record lag</li><li>availabilityLagMsMap is the time lag</li></ul><p>This output is a bit unwieldy, so let’s create a bash function to tidy up the output into something that’s easier to consume:</p><div class="relative"><pre><code class="code-highlight la [...]
-</span><span class="code-line">  curl <span class="token string">&quot;http://localhost:9000/tables/events/consumingSegmentsInfo&quot;</span> <span class="token number">2</span><span class="token operator">&gt;</span><span class="token operator">/</span>dev<span class="token operator">/</span>null <span class="token operator">|</span>
-</span><span class="code-line">  jq <span class="token operator">-</span>rc &#x27;<span class="token punctuation">[</span><span class="token punctuation">.</span>_segmentToConsumingInfoMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token pu [...]
-</span><span class="code-line">    segment<span class="token punctuation">:</span> $k<span class="token punctuation">,</span>
-</span><span class="code-line">    kafka<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>currentOffsetsMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class= [...]
-</span><span class="code-line">    pinot<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>latestUpstreamOffsetMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span  [...]
-</span><span class="code-line">    recordLag<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>recordsLagMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class= [...]
-</span><span class="code-line">    timeLagMs<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>availabilityLagMsMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span [...]
-</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">|</span>keys_unsorted <span class="token operator">|</span> @tsv<span class=" [...]
-</span><span class="code-line">  printf <span class="token string">&quot;\n&quot;</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Let’s call the function:</p><p><code>consuming\_info</code></p><p>We’ll see the following output:</p><p><img alt="Consumer record lag output" src="https://www.datocms-assets.com/75153/1680190272-image2.png" title="Consumer record lag output"/></p><p>Now let’s put it in a script and call the watch command so that it will be refreshed every couple of seconds:</p><div class="relative"><pre><code class="code-highlight language-python"><span class="code-line">!<sp [...]
-</span><span class="code-line">
-</span><span class="code-line">function consuming_info<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">  curl <span class="token string">&quot;http://localhost:9000/tables/events/consumingSegmentsInfo&quot;</span> <span class="token number">2</span><span class="token operator">&gt;</span><span class="token operator">/</span>dev<span class="token operator">/</span>null <span class="token operator">|</span>
-</span><span class="code-line">  jq <span class="token operator">-</span>rc &#x27;<span class="token punctuation">[</span><span class="token punctuation">.</span>_segmentToConsumingInfoMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token pu [...]
-</span><span class="code-line">    segment<span class="token punctuation">:</span> $k<span class="token punctuation">,</span>
-</span><span class="code-line">    kafka<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>currentOffsetsMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class= [...]
-</span><span class="code-line">    pinot<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>latestUpstreamOffsetMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span  [...]
-</span><span class="code-line">    recordLag<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>recordsLagMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span class= [...]
-</span><span class="code-line">    timeLagMs<span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token punctuation">.</span>partitionOffsetInfo<span class="token punctuation">.</span>availabilityLagMsMap <span class="token operator">|</span> keys<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">as</span> $k <span class="token operator">|</span> <span class="token punctuation">(</span><span [...]
-</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">|</span> <span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">|</span>keys_unsorted <span class="token operator">|</span> @tsv<span class=" [...]
-</span><span class="code-line">  printf <span class="token string">&quot;\n&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line">
-</span><span class="code-line">export <span class="token operator">-</span>f consuming_info
-</span><span class="code-line">watch bash <span class="token operator">-</span>c consuming_info
-</span><span class="code-line">
-</span></code></pre></div><p>Give permissions to run it as a script:</p><p><code>chmod u+x watch\_consuming\_info.sh</code></p><p>And finally, run it:</p><p><code>./watch\_consuming\_info.sh</code></p><p>This will print out a new table every two seconds. Let’s now make things more interesting by removing the sleep from our ingestion command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">python datagen.py  <span class="token operator"><sp [...]
-</span><span class="code-line">jq <span class="token parameter variable">-cr</span> <span class="token parameter variable">--arg</span> sep ø <span class="token string">&#x27;[.uuid, tostring] | join($sep)&#x27;</span> <span class="token operator">|</span>
-</span><span class="code-line">kcat <span class="token parameter variable">-P</span> <span class="token parameter variable">-b</span> localhost:9092 <span class="token parameter variable">-t</span> events -Kø
-</span></code></pre></div><p>And now if we look at the watch output:</p><p><img alt="Apache Pinot Consumer Record Lag" src="https://www.datocms-assets.com/75153/1680190286-image1.png" title="Apache Pinot Consumer Record Lag"/></p><p>We get some transitory lag, but it generally goes away by the next time the command is run.</p><h2 id="summary"><a href="#summary" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Summary</h2><p>I love this feature, and it solves a pro [...]
\ No newline at end of file
diff --git a/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.txt b/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.txt
deleted file mode 100644
index ba140dd4..00000000
--- a/blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"03\",\"30\",\"Apache-Pinot-0-12-Consumer-Record-Lag\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™ 0.12 - Consumer Record Lag | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","conte [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot™ 0.12 - Consumer Record Lag\",\"datePublished\":\"2023-03-30T00:00:00.000Z\",\"dateModified\":\"2023-03-30T00:00:00.000Z\",\"description\":\"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.\",\"image\":\"/static/images/twitter-card.png\",\ [...]
-d:null
diff --git a/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.html b/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.html
deleted file mode 100644
index 6e05d769..00000000
--- a/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://i3.ytimg.com/vi/J-4iHPolZz0/maxresdefault.jpg"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1683813508-image5.png"/><link rel=" [...]
-</span><span class="code-line">
-</span><span class="code-line">
-</span><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">  <span class="token string">&quot;trainCompany&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;CrossCountry&quot;</span>,
-</span><span class="code-line">  <span class="token string">&quot;atocCode&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;XC&quot;</span>,
-</span><span class="code-line">  <span class="token string">&quot;lat&quot;</span><span class="token builtin class-name">:</span> <span class="token number">50.692726</span>,
-</span><span class="code-line">  <span class="token string">&quot;lon&quot;</span><span class="token builtin class-name">:</span> -3.5040767,
-</span><span class="code-line">  <span class="token string">&quot;ts&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;2023-03-09 10:57:11.1678359431&quot;</span>,
-</span><span class="code-line">  <span class="token string">&quot;trainId&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;202303096771054&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>We’re going to ingest this data into Pinot, so let’s create a schema:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trains&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trainCompany&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trainId&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;atocCode&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;point&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;BYTES&quot;</span> <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;TIMESTAMP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The point column will store a point object that represents the current location of a train. We’ll see how that column gets populated from our table config, as shown below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trains&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trains&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;fieldConfigList&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;point&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;encodingType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;RAW&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;indexType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;H3&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">&quot;resolutions&quot;</span><span class="token operator">:</span> <span class="token string">&quot;7&quot;</span> <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;noDictionaryColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;point&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;trains&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka-geospatial:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;point&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STPoint(lon, lat, 1)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The point column is populated by the following function under <code>transformConfigs</code>:</p><p><code>STPoint(lon, lat, 1)</code></p><p>In earlier versions of Pinot, you’d need to ensure that the schema included lat and lon columns, but that no longer applies.</p><p>We define the geospatial index on the point column under <code>fieldConfigList</code>. We can configure what H3 calls <a target="_blank" rel="noopener noreferrer" href="https://h3geo.org/docs/c [...]
-</span><span class="code-line">       STDistance<span class="token punctuation">(</span>
-</span><span class="code-line">         <span class="token keyword">point</span><span class="token punctuation">,</span>
-</span><span class="code-line">         toSphericalGeography<span class="token punctuation">(</span>ST_GeomFromText<span class="token punctuation">(</span><span class="token string">&#x27;POINT (-0.13624 51.499507)&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token keyword">AS</span> distance
-</span><span class="code-line"><span class="token keyword">from</span> trains
-</span><span class="code-line"><span class="token keyword">WHERE</span> distance <span class="token operator">&lt;</span> <span class="token number">10000</span>
-</span><span class="code-line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span> distance<span class="token punctuation">,</span> ts <span class="token keyword">DESC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>These results from running the query would follow:</p><p><img alt="Sample Geospatial Indexing In Apache Pinot Query Result" src="https://www.datocms-assets.com/75153/1683813581-image1.png" title="Sample Geospatial Indexing In Apache Pinot Query Result"/></p><p>Let’s now go into a bit more detail about what happens when we run the query.</p><p>The 10 km radius covers the area inside the white circle on the diagram below:</p><p><img alt="Geospatial Indexing In  [...]
-</span><span class="code-line"><span class="token keyword">from</span> trains
-</span><span class="code-line"><span class="token keyword">WHERE</span> StWithin<span class="token punctuation">(</span>
-</span><span class="code-line">      <span class="token keyword">point</span><span class="token punctuation">,</span>
-</span><span class="code-line">      toSphericalGeography<span class="token punctuation">(</span>ST_GeomFromText<span class="token punctuation">(</span><span class="token string">&#x27;POLYGON((
-</span></span><span class="code-line"><span class="token string">        -0.1296371966600418 51.508053828550544,
-</span></span><span class="code-line"><span class="token string">        -0.1538461446762085 51.497007194317064,
-</span></span><span class="code-line"><span class="token string">        -0.13032652437686923 51.488276935884414,
-</span></span><span class="code-line"><span class="token string">        -0.10458670556545259 51.497003019756846,
-</span></span><span class="code-line"><span class="token string">        -0.10864421725273131 51.50817152245844,
-</span></span><span class="code-line"><span class="token string">        -0.1296371966600418 51.508053828550544))&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token number">1</span>
-</span><span class="code-line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span> ts <span class="token keyword">DESC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">10</span>
-</span></code></pre></div><p>The results from running the query are shown below:</p><p><img alt="Sample Geospatial Indexing In Apache Pinot Query Result" src="https://www.datocms-assets.com/75153/1683813749-image4.png" title="Sample Geospatial Indexing In Apache Pinot Query Result"/></p><p>If we change the query to show trains outside of a central London polygon, we’d see the following results:</p><p><img alt="Sample Geospatial Indexing In Apache Pinot Query Result" src="https://www.dato [...]
-</span><span class="code-line">fullyContained <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">]</span>
-</span></code></pre></div><p>First, compute newFullyContained to find all the records not in potential:</p><p><code>newFullyContained = [4,5,6,7,8,9]</code></p><p>Then we can remove the values in fullyContained, which gives us:</p><p><code>newFullyContained = [7,8,9]</code></p><p>We will return all the records in <code>newFullyContained</code> and apply the <code>STWithin</code> or <code>StContains</code> predicate to work out which records to return from the potential list.</p><h2 id="h [...]
\ No newline at end of file
diff --git a/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.txt b/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.txt
deleted file mode 100644
index d1b16e68..00000000
--- a/blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/05/11/Geospatial-Indexing-in-Apache-Pinot","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"05\",\"11\",\"Geospatial-Indexing-in-Apache-Pinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Geospatial Indexing in Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka."}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":" [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Geospatial Indexing in Apache Pinot\",\"datePublished\":\"2023-05-11T00:00:00.000Z\",\"dateModified\":\"2023-05-11T00:00:00.000Z\",\"description\":\"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.\",\"image\":\"/static/images/twitter-card.png\",\"url\ [...]
-d:null
diff --git a/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.html b/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.html
deleted file mode 100644
index c64d2b60..00000000
--- a/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684246698-image5.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684246806-image7.png"/><link  [...]
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">          <span class="token property">&quot;dimensionsSplitOrder&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token string">&quot;dropoff_date_str&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;dropoff_month&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;dropoff_year&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;skipStarNodeCreationForDimensions&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;functionColumnPairs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token string">&quot;COUNT__*&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;SUM__passenger_count&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;SUM__total_amount&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;SUM__trip_distance&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;AVG__passenger_count&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;AVG__total_amount&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;AVG__trip_distance&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MIN__passenger_count&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MIN__total_amount&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MIN__trip_distance&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MAX__passenger_count&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MAX__total_amount&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token string">&quot;MAX__trip_distance&quot;</span>
-</span><span class="code-line">          <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">          <span class="token property">&quot;maxLeafRecords&quot;</span><span class="token operator">:</span> <span class="token number">10000</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">      <span class="token punctuation">]</span>
-</span></code></pre></div><p>This one star-tree index can get us insights to questions such as:</p><ul><li>How many trips were completed in a given day, month or year?</li><li>How many passengers traveled in a given day, month or year?</li><li>What is the daily / monthly / annual average trip revenue?</li><li>What is the daily / monthly / annual average trip revenue, trip duration and distance traveled?</li><li>What is the daily / monthly / annual breakdown of total number of trips, tota [...]
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">SELECT</span>
-</span><span class="code-line">      toDateTime<span class="token punctuation">(</span>tpep_dropoff_datetime<span class="token operator">/</span><span class="token number">1000</span><span class="token punctuation">,</span> <span class="token string">&#x27;yyyy-MM-dd&#x27;</span><span class="token punctuation">)</span> <span class="token string">&quot;Date&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token string">&quot;Total # of Trips&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>trip_distance<span class="token punctuation">)</span> <span class="token string">&quot;Total distance traveled&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>passenger_count<span class="token punctuation">)</span> <span class="token string">&quot;Total # of Passengers&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>total_amount<span class="token punctuation">)</span> <span class="token string">&quot;Total Revenue&quot;</span>
-</span><span class="code-line"><span class="token keyword">FROM</span>
-</span><span class="code-line">      nyc_taxi_demo
-</span><span class="code-line"><span class="token keyword">WHERE</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token operator">BETWEEN</span> <span class="token string">&#x27;2015-01-01&#x27;</span> <span class="token operator">AND</span> <span class="token string">&#x27;2015-12-31&#x27;</span>
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span>
-</span><span class="code-line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token keyword">ASC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">1000</span>
-</span></code></pre></div><p>This was a wide time range query (365 days). It required scanning across ~146M out of ~633M documents. In addition, it involved performing an expensive ToDateTime transformation on the tpep_dropoff_datetime entry in each of those ~146M documents during query time.</p><p>Result: The query took 131,425 milliseconds (~131.4s; ~2m 11s) to complete.</p><h3 id="iteration-2-w-inverted-index"><a href="#iteration-2-w-inverted-index" aria-hidden="true" tabindex="-1"><s [...]
-</span><span class="code-line"><span class="token keyword">SELECT</span>
-</span><span class="code-line">      dropoff_date_str <span class="token string">&quot;Date&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token string">&quot;Total # of Trips&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>trip_distance<span class="token punctuation">)</span> <span class="token string">&quot;Total distance traveled&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>passenger_count<span class="token punctuation">)</span> <span class="token string">&quot;Total # of Passengers&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>total_amount<span class="token punctuation">)</span> <span class="token string">&quot;Total Revenue&quot;</span>
-</span><span class="code-line"><span class="token keyword">FROM</span>
-</span><span class="code-line">      nyc_taxi_demo
-</span><span class="code-line"><span class="token keyword">WHERE</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token operator">BETWEEN</span> <span class="token string">&#x27;2015-01-01&#x27;</span> <span class="token operator">AND</span> <span class="token string">&#x27;2015-12-31&#x27;</span>
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span>
-</span><span class="code-line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token keyword">ASC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">1000</span>
-</span><span class="code-line"><span class="token keyword">option</span><span class="token punctuation">(</span>useStarTree<span class="token operator">=</span><span class="token boolean">false</span><span class="token punctuation">,</span> timeoutMs<span class="token operator">=</span><span class="token number">20000</span><span class="token punctuation">)</span>
-</span></code></pre></div><p><img alt="" src="https://www.datocms-assets.com/75153/1684246716-image1.png"/></p><p>Result: The query completed in 1,513 milliseconds. (~1.5s); from ~131s to ~1.5s was a BIG improvement. However, results still took more than a second — which is a relatively long time for an OLAP database, especially if it is faced with multiple concurrent queries.</p><h3 id="iteration-3-w-star-tree-index"><a href="#iteration-3-w-star-tree-index" aria-hidden="true" tabindex=" [...]
-</span><span class="code-line"><span class="token keyword">SELECT</span>
-</span><span class="code-line">      dropoff_date_str <span class="token string">&quot;Date&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">count</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token string">&quot;Total # of Trips&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>trip_distance<span class="token punctuation">)</span> <span class="token string">&quot;Total distance traveled&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>passenger_count<span class="token punctuation">)</span> <span class="token string">&quot;Total # of Passengers&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token function">sum</span><span class="token punctuation">(</span>total_amount<span class="token punctuation">)</span> <span class="token string">&quot;Total Revenue&quot;</span>
-</span><span class="code-line"><span class="token keyword">FROM</span>
-</span><span class="code-line">      nyc_taxi_demo
-</span><span class="code-line"><span class="token keyword">WHERE</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token operator">BETWEEN</span> <span class="token string">&#x27;2015-01-01&#x27;</span> <span class="token operator">AND</span> <span class="token string">&#x27;2015-12-31&#x27;</span>
-</span><span class="code-line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span>
-</span><span class="code-line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span>
-</span><span class="code-line">    <span class="token string">&quot;Date&quot;</span> <span class="token keyword">ASC</span>
-</span><span class="code-line"><span class="token keyword">limit</span> <span class="token number">1000</span>
-</span><span class="code-line"><span class="token keyword">option</span><span class="token punctuation">(</span>useStarTree<span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">)</span>
-</span></code></pre></div><p><img alt="" src="https://www.datocms-assets.com/75153/1684246852-image9.png"/></p><p>Result: The query completed in 4 milliseconds! Notice in particular that the numDocsScanned came down from ~146M to 409!</p><h3 id="comparison"><a href="#comparison" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Comparison:</h3><p>Let’s take a closer look at the <a target="_blank" rel="noopener noreferrer" href="https://docs.pinot.apache.org/users/a [...]
\ No newline at end of file
diff --git a/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.txt b/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.txt
deleted file mode 100644
index 7f4cc12d..00000000
--- a/blog/2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/05/16/star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"05\",\"16\",\"star-tree-indexes-in-apache-pinot-part-1-understanding-the-impact-on-query-performance\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOri [...]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"StarTree Indexes in Apache Pinot Part-1 - Understanding the Impact on Query Performance | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The blog post explains the star-tree index in Apache Pinot and its benefits compared to traditional materialized views. By implementing a star-tree index, query performance signific [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"StarTree Indexes in Apache Pinot Part-1 - Understanding the Impact on Query Performance\",\"datePublished\":\"2023-05-16T00:00:00.000Z\",\"dateModified\":\"2023-05-16T00:00:00.000Z\",\"description\":\"The blog post explains the star-tree index in Apache Pinot and its benefits compared to traditional materialized views. By i [...]
-d:null
diff --git a/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.html b/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.html
deleted file mode 100644
index 412dfc98..00000000
--- a/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684419409-image7.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684420004-image3.png"/><link  [...]
-</span></code></pre></div><p>You can also download the latest version like so:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><span class="token function">docker</span> pull apachepinot/pinot:latest
-</span></code></pre></div><p>Here, apachepinot is the name of the repository in Docker Hub, pinot is the name of the image, and :latest or :0.12.0 is the version for the image.  Note that we will be using the 0.12.0 version for this blog post.</p><p><em>Docker Hub is the world’s largest repository of container images in the world.</em></p><p>You can verify the image was downloaded or pulled by running the following command:</p><div class="relative"><pre><code class="language-bash code-hi [...]
-</span></code></pre></div><p>It should show you the image like so:</p><p><img alt="Docker images command" src="https://www.datocms-assets.com/75153/1684420004-image3.png" title="Docker images command"/></p><h3 id="step-3"><a href="#step-3" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Step 3:</h3><p>Let’s run a container using the Docker image that we downloaded:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><s [...]
-</span></code></pre></div><p><img alt="Running a container with downloaded Docker image" src="https://www.datocms-assets.com/75153/1684420103-image4.png" title="Running a container with downloaded Docker image"/></p><p>The docker run command runs the image. The -p 9000:00 option maps the docker container port 9000 to the local machine port 9000. This allows us to access the Pinot UI, which defaults to port 9000 to be accessible from the localhost. We are using the –entrypoint to override [...]
-</span></code></pre></div><p>pinot-admin.sh is a shell script for starting the various components. The &amp; allows us to continue using the Bash shell. ZooKeeper is responsible for the configuration for the Pinot cluster and needs to be started first.</p><p>We can start the remaining components using these commands one at a time:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line">./pinot-admin.sh StartController <span class="token operator"> [...]
-</span><span class="code-line">./pinot-admin.sh StartBroker <span class="token operator">&amp;</span>
-</span><span class="code-line">./pinot-admin.sh StartServer <span class="token operator">&amp;</span>
-</span></code></pre></div><p>The controller controls the cluster health and coordinates with ZooKeeper for configuration and status changes. The broker is responsible for query distribution and result collation, sometimes called Scatter-Gather. Servers manage individual table segments and perform the actual read/writes. To get a better understanding of each component, read this <a target="_blank" rel="noopener noreferrer" href="https://startree.ai/blog/introduction-to-apache-pinot-a-begi [...]
-</span></code></pre></div><p>You will notice that there are the following files listed here:</p><div class="relative"><pre><code class="code-highlight language-js"><span class="code-line">baseballStats_offline_table_config<span class="token punctuation">.</span><span class="token property-access">json</span>
-</span><span class="code-line">baseballStats_schema<span class="token punctuation">.</span><span class="token property-access">json</span>
-</span><span class="code-line">ingestionJobSpec<span class="token punctuation">.</span><span class="token property-access">yaml</span>
-</span><span class="code-line">sparkIngestionJobSpec<span class="token punctuation">.</span><span class="token property-access">yaml</span>
-</span><span class="code-line">rawdata
-</span></code></pre></div><p>From the names, we can see that there is a schema file, a table config file, an ingestion job, and Apache Spark™ ingestion job files as well as a raw data folder.</p><p>The content of the schema file contains both metric and dimension like so (abbreviated):</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line"> <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line"> <span class="token punctuation">{</span>
-</span><span class="code-line"> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;playerStint&quot;</span>
-</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line"> …
-</span><span class="code-line"> <span class="token punctuation">{</span>
-</span><span class="code-line"> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;baseOnBalls&quot;</span>
-</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line"> <span class="token punctuation">{</span>
-</span><span class="code-line"> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;playerID&quot;</span>
-</span><span class="code-line"> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line"> ….
-</span><span class="code-line"> <span class="token punctuation">{</span>
-</span><span class="code-line"> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;playerName&quot;</span>
-</span><span class="code-line"> <span class="token punctuation">}</span>
-</span><span class="code-line"> <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line"> <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;baseballStats&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>To create a schema and table for the baseball stats file, run the following command from the /app/pinot/bin folder:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line">./pinot-admin.sh AddTable <span class="token parameter variable">-schemaFile</span> /opt/pinot/examples/batch/baseballStats/baseballStats_schema.json <span class="token parameter variable">-tableConfigFile</span> /opt/pinot/examples/batch/baseballSta [...]
-</span></code></pre></div><p>You should now see the schema and table created:</p><p><img alt="Apache Pinot tables created" src="https://www.datocms-assets.com/75153/1684421406-image12.png" title="Apache Pinot tables created"/></p><p>Next, we’ll want to load some data into the table that we created. We have some sample data in the folder rawdata that we can use to load. We will need a YAML file to perform the actual ingestion job and can use the following command to import data:</p><div c [...]
-</span><span class="code-line">
-</span></code></pre></div><p>If you run into trouble on this step like I did, edit the ingestJobSpec.yaml file using Docker Desktop to change the inputDirURI from relative to absolute path. Then rerun the above command.</p><p><img alt="Editing the .yaml file with Docker Desktop" src="https://www.datocms-assets.com/75153/1684419802-image1.png" title="Editing the .yaml file with Docker Desktop"/></p><p>You should now be able to see the table has been populated like so:</p><p><img alt="Apac [...]
-</span><span class="code-line"><span class="token keyword">select</span> <span class="token function">sum</span><span class="token punctuation">(</span>runs<span class="token punctuation">)</span><span class="token punctuation">,</span> playerName <span class="token keyword">from</span> baseballStats <span class="token keyword">group</span> <span class="token keyword">by</span> playerName <span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token fu [...]
-</span></code></pre></div><p>You should see results like so:</p><p><img alt="Apache Pinot query console" src="https://www.datocms-assets.com/75153/1684421163-image6.png" title="Apache Pinot query console"/></p><p>And there you have it!</p><h2 id="whats-under-the-hood"><a href="#whats-under-the-hood" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>What’s under the hood?</h2><p>If you’re curious to go a step further and see what the segments look like and what the  [...]
\ No newline at end of file
diff --git a/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.txt b/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.txt
deleted file mode 100644
index 2434b787..00000000
--- a/blog/2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/05/18/apache-pinot-tutorial-for-getting-started-a-step-by-step-guide","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"05\",\"18\",\"apache-pinot-tutorial-for-getting-started-a-step-by-step-guide\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot Tutorial for Getting Started - A Step-by-Step Guide | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"This blog post is a guide to getting started with Apache Pinot, including installing and running the necessary components of a Pinot cluster. It also explains how to set up schemas, tables, and load data  [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Apache Pinot Tutorial for Getting Started - A Step-by-Step Guide\",\"datePublished\":\"2023-05-18T00:00:00.000Z\",\"dateModified\":\"2023-05-18T00:00:00.000Z\",\"description\":\"This blog post is a guide to getting started with Apache Pinot, including installing and running the necessary components of a Pinot cluster. It al [...]
-d:null
diff --git a/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.html b/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.html
deleted file mode 100644
index f89eea81..00000000
--- a/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684857872-image3.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1684857250-image5.png"/><link  [...]
-</span><span class="code-line">  <span class="token property">&quot;schema&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>...<span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">  <span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;before&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;user_id&quot;</span><span class="token operator">:</span> <span class="token number">1004</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;first_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Anne&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;last_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Kretchmar&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;email&quot;</span><span class="token operator">:</span> <span class="token string">&quot;annek@noanswer.org&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;after&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;user_id&quot;</span><span class="token operator">:</span> <span class="token number">1004</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;first_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Anne Marie&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;last_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Kretchmar&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;email&quot;</span><span class="token operator">:</span> <span class="token string">&quot;annek@noanswer.org&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;source&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2.2.0.Final&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;dbserver1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;server_id&quot;</span><span class="token operator">:</span> <span class="token number">223344</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;ts_sec&quot;</span><span class="token operator">:</span> <span class="token number">1486501486</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;gtid&quot;</span><span class="token operator">:</span> <span class="token keyword null">null</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;file&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mysql-bin.000003&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;pos&quot;</span><span class="token operator">:</span> <span class="token number">364</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;row&quot;</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;snapshot&quot;</span><span class="token operator">:</span> <span class="token keyword null">null</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;thread&quot;</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;db&quot;</span><span class="token operator">:</span> <span class="token string">&quot;inventory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;table&quot;</span><span class="token operator">:</span> <span class="token string">&quot;customers&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;op&quot;</span><span class="token operator">:</span> <span class="token string">&quot;u&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ts_ms&quot;</span><span class="token operator">:</span> <span class="token number">1486501486308</span>
-</span><span class="code-line">  <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>A few elements to note:</p><ul><li><p>The schema element never changes and defines the schema of the payload</p></li><li><p>The payload element holds three different elements:</p><ul><li>before: shows the state of the record before it was changed; if this is null, then you can assume that the transaction is an INSERT</li><li>after: shows the state of the record after the record was changed; if this is null, then you can assume that the transaction is a DELETE [...]
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;customers&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;user_id&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;first_name&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;last_name&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;email&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;op&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;before&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;after&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;source&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;ts_ms&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;LONG&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd&#x27;T&#x27;HH:mm:ss.SSS&#x27;Z&#x27;&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;primaryKeyColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;user_id&quot;</span><span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>You may have an alternative schema depending on your use case. You don’t need any of the fields I preserved. If at the end you only want the latest version, you can do that easily by only preserving the columns that matter to you.</p><h2 id="materialized-views"><a href="#materialized-views" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Materialized Views</h2><p>When looking up your record in Pinot, you only need to provide a WHERE c [...]
-</span><span class="code-line">    <span class="token property">&quot;primaryKeyColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;user_id&quot;</span><span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>You can further configure the behavior of the upsert to allow for different behaviors: FULL or PARTIAL.</p><p>A FULL upsert means that a new record will replace the older record completely if they share the same primary key.</p><p>PARTIAL only allows updates to specific columns and employs additional strategies.</p><p><img alt="Table describing the strategy and descriptions of stream ingestion with upsert" src="https://www.datocms-assets.com/75153/1684857317- [...]
-</span></code></pre></div><p>Upsert simplifies client queries in an extremely powerful way. More importantly, upsert assures the accuracy of any aggregations applied to updated columns, which proves especially important when the analytics lead to critical decisions.</p><h2 id="summary"><a href="#summary" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Summary</h2><p>Change data capture is the best way to capture changes in a database. Other options require compar [...]
\ No newline at end of file
diff --git a/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.txt b/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.txt
deleted file mode 100644
index 5a72a42e..00000000
--- a/blog/2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/05/23/change-data-capture-with-apache-pinot-how-does-it-work","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"05\",\"23\",\"change-data-capture-with-apache-pinot-how-does-it-work\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Change Data Capture with Apache Pinot - How Does It Work? | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"This blog post discusses the use of Change Data Capture (CDC) in Apache Pinot and the data format used in Debezium for efficient querying and analytics. It explains the elements of the format and its usage in in [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Change Data Capture with Apache Pinot - How Does It Work?\",\"datePublished\":\"2023-05-23T00:00:00.000Z\",\"dateModified\":\"2023-05-23T00:00:00.000Z\",\"description\":\"This blog post discusses the use of Change Data Capture (CDC) in Apache Pinot and the data format used in Debezium for efficient querying and analytics. I [...]
-d:null
diff --git a/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.html b/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.html
deleted file mode 100644
index 953756e6..00000000
--- a/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1685462020-image1.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1685462274-image7.png"/><link  [...]
-</span><span class="code-line"><span class="token function">curl</span> https://downloads.apache.org/kafka/3.4.0/kafka_2.12-3.4.0.tgz <span class="token parameter variable">--output</span> kafka.tgz <span class="token parameter variable">--output</span> kafka.tgz
-</span></code></pre></div><p>It should look this:</p><p><img alt="Code with Apache Pinot speed results" src="https://www.datocms-assets.com/75153/1685462322-image8.png" title="Code with Apache Pinot speed results"/></p><p>Note that we’ve changed the directory to keep the Kafka folder separate from the Pinot folder.</p><p>Now, let’s expand the downloaded TAR file, rename the folder for convenience, and delete the downloaded file:</p><div class="relative"><pre><code class="language-bash co [...]
-</span><span class="code-line"><span class="token function">mv</span> kafka_2.12-3.4.0 kafka
-</span><span class="code-line"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> kafka.tgz
-</span></code></pre></div><p>It should look like this:</p><p><img alt="Code with Apache Kafka" src="https://www.datocms-assets.com/75153/1685462061-image2.png" title="Code with Apache Kafka"/></p><p><img alt="Code with kafka version" src="https://www.datocms-assets.com/75153/1685462480-image12.png" title="Code with kafka version"/></p><p>Now, Kafka and Pinot reside locally on our Docker container with Pinot up and running. Let’s run the Kafka service. Kafka will use the existing ZooKeepe [...]
-</span><span class="code-line">./bin/kafka-server-start.sh config/server.properties
-</span></code></pre></div><p>It should look like this:</p><p><img alt="Code with cd kafka" src="https://www.datocms-assets.com/75153/1685462400-image10.png" title="Code with cd kafka"/></p><p>To verify that Kafka is running, let’s look at our ZooKeeper configs by browsing to <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/#/zookeeper">http://localhost:9000/#/zookeeper:</a></p><p><img alt="Zookeeper Browser" src="https://www.datocms-assets.com/75153/1685462099-ima [...]
-</span><span class="code-line"><span class="token function">apt</span> <span class="token function">install</span> nodejs
-</span></code></pre></div><p>Node.js takes a few minutes to install. Next, we will create a script to consume the events called wikievents.js. Cut and paste the following code to this file:</p><div class="relative"><pre><code class="code-highlight language-javascript"><span class="code-line"><span class="token keyword">var</span> <span class="token maybe-class-name">EventSource</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punc [...]
-</span><span class="code-line"><span class="token keyword">var</span> fs <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#x27;fs&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line"><span class="token keyword">var</span> path <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#x27;path&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line"><span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token maybe-class-name">Kafka</span> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#x27;kafkajs&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">var</span> url <span class="token operator">=</span> <span class="token string">&#x27;https://stream.wikimedia.org/v2/stream/recentchange&#x27;</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">const</span> kafka <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Kafka</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property literal-property">clientId</span><span class="token operator">:</span> <span class="token string">&#x27;wikievents&#x27;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property literal-property">brokers</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&#x27;localhost:9092&#x27;</span><span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">const</span> producer <span class="token operator">=</span> kafka<span class="token punctuation">.</span><span class="token function property-access method">producer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token keyword control-flow">await</span> producer<span class="token punctuation">.</span><span class="token function property-access method">connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">    <span class="token function">startEvents</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token keyword">function</span> <span class="token function">startEvents</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token class-name console">console</span><span class="token punctuation">.</span><span class="token function property-access method">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token string template-punctuation">`</span><span class="token string">Connecting to EventStreams at </span><span class="token interpolation"><span class="token punctuation interpolation-punctuation">${</span>url<s [...]
-</span><span class="code-line">    <span class="token keyword">var</span> eventSource <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">EventSource</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line">    eventSource<span class="token punctuation">.</span><span class="token function property-access method function-variable method-variable">onopen</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token class-name console">console</span><span class="token punctuation">.</span><span class="token function property-access method">log</span><span class="token punctuation">(</span><span class="token string">&#x27;--- Opened connection.&#x27;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line">    eventSource<span class="token punctuation">.</span><span class="token function property-access method function-variable method-variable">onerror</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token class-name console">console</span><span class="token punctuation">.</span><span class="token function property-access method">error</span><span class="token punctuation">(</span><span class="token string">&#x27;--- Encountered error&#x27;</span><span class="token punctuation">,</span> event<span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">;</span>
-</span><span class="code-line">
-</span><span class="code-line">    eventSource<span class="token punctuation">.</span><span class="token function property-access method function-variable method-variable">onmessage</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token class-name known-class-name">JSON</span><span class="token punctuation">.</span><span class="token function property-access method">parse</span><span class="token punctuation">(</span>event<span class="token punctuation">.</span><span class="token property-access">data</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">        <span class="token keyword">const</span> eventPath <span class="token operator">=</span> path<span class="token punctuation">.</span><span class="token function property-access method">join</span><span class="token punctuation">(</span>__dirname<span class="token punctuation">,</span> <span class="token string">&#x27;./events&#x27;</span><span class="token punctuation">,</span> data<span class="token punctuation">.</span><span class="token property- [...]
-</span><span class="code-line">        fs<span class="token punctuation">.</span><span class="token function property-access method">existsSync</span><span class="token punctuation">(</span>eventPath<span class="token punctuation">)</span> <span class="token operator">||</span> fs<span class="token punctuation">.</span><span class="token function property-access method">mkdirSync</span><span class="token punctuation">(</span>eventPath<span class="token punctuation">)</span><span class="t [...]
-</span><span class="code-line">        fs<span class="token punctuation">.</span><span class="token function property-access method">writeFileSync</span><span class="token punctuation">(</span>path<span class="token punctuation">.</span><span class="token function property-access method">join</span><span class="token punctuation">(</span>eventPath<span class="token punctuation">,</span> data<span class="token punctuation">.</span><span class="token property-access">meta</span><span class [...]
-</span><span class="code-line">        <span class="token keyword control-flow">await</span> producer<span class="token punctuation">.</span><span class="token function property-access method">send</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property literal-property">topic</span><span class="token operator">:</span> <span class="token string">&#x27;wikipedia-events&#x27;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property literal-property">messages</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">                <span class="token punctuation">{</span>
-</span><span class="code-line">                    <span class="token property literal-property">key</span><span class="token operator">:</span> data<span class="token punctuation">.</span><span class="token property-access">meta</span><span class="token punctuation">.</span><span class="token property-access">id</span><span class="token punctuation">,</span>
-</span><span class="code-line">                    <span class="token property literal-property">value</span><span class="token operator">:</span> event<span class="token punctuation">.</span><span class="token property-access">data</span>
-</span><span class="code-line">                <span class="token punctuation">}</span>
-</span><span class="code-line">            <span class="token punctuation">]</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span><span class="code-line">
-</span><span class="code-line"><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-</span></code></pre></div><p>You can use vi to create the file and save it. You can also use Docker Desktop to edit the file.</p><p>To install the two modules referenced in the file above, kafkajs and eventsource, run the following command:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><span class="token function">npm</span> i eventsource kafkajs
-</span></code></pre></div><p>Let’s run the program. This will result in the download of many files, so I recommend running the program for just a few minutes. You can stop the run by using Ctrl-C.</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line"><span class="token function">node</span> wikievents.js
-</span></code></pre></div><p>Use Ctrl-C to stop the program. Navigate to the events folder to see some new folders created with the various language events downloaded from Wikipedia.</p><p><img alt="Wikievents node in code" src="https://www.datocms-assets.com/75153/1685462366-image9.png" title="Wikievents node in code"/></p><p>Navigate to the enwiki folder and review some of the downloaded JSON files.</p><p><img alt="Code with realtime wikievents" src="https://www.datocms-assets.com/7515 [...]
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;wikievents&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;id&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;wiki&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;user&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;title&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;comment&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;stream&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;domain&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;topic&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;type&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;metaJson&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;LONG&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Creating the table config file is where the magic happens. Use vi (or your favorite editor) to create realtime.tableconfig.json and cut and paste the following content:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;wikievents_REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;wikievents&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replication&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;broker&quot;</span><span class="token operator">:</span> <span class="token string">&quot;DefaultTenant&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;server&quot;</span><span class="token operator">:</span> <span class="token string">&quot;DefaultTenant&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;tagOverrideConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;invertedIndexColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;rangeIndexColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;autoGeneratedInvertedIndex&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;createInvertedIndexDuringSegmentGeneration&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;sortedColumn&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;bloomFilterColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;wikipedia-events&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;localhost:9092&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowlevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;realtime.segment.flush.threshold.rows&quot;</span><span class="token operator">:</span> <span class="token string">&quot;0&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;realtime.segment.flush.threshold.time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;24h&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;realtime.segment.flush.segment.size&quot;</span><span class="token operator">:</span> <span class="token string">&quot;100M&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;noDictionaryColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;onHeapDictionaryColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;varLengthDictionaryColumns&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;enableDefaultStarTree&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;enableDynamicStarTreeCreation&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;aggregateMetrics&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;nullHandlingEnabled&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;quota&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;routing&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;query&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;ingestionConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;transformConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;metaJson&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;JSONFORMAT(meta)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;id&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;JSONPATH(metaJson, &#x27;$.id&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;stream&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;JSONPATH(metaJson, &#x27;$.stream&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;domain&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;JSONPATH(metaJson, &#x27;$.domain&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token punctuation">{</span>
-</span><span class="code-line">                <span class="token property">&quot;columnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;topic&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">                <span class="token property">&quot;transformFunction&quot;</span><span class="token operator">:</span> <span class="token string">&quot;JSONPATH(metaJson, &#x27;$.topic&#x27;)&quot;</span>
-</span><span class="code-line">            <span class="token punctuation">}</span>
-</span><span class="code-line">        <span class="token punctuation">]</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;isDimTable&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Notice the section called streamConfigs, where we define the source as a Kafka stream, located at localhost:9092, and consume the topic wikipedia-events. That’s all it takes to consume a Kafka Topic into Pinot.</p><p>Don’t believe me? Give it a try!</p><p>Create the table by running the following command:</p><div class="relative"><pre><code class="language-bash code-highlight"><span class="code-line">/opt/pinot/bin/pinot-admin.sh AddTable <span class="token p [...]
-</span></code></pre></div><p>Now, browse to the following location <a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/#/tables">http://localhost:9000/#/tables,</a> and you should see the newly created table. However, where’s the real-time data, you say?</p><p>Run the node wikievents.js command, then query the newly created wikievents table to see the totalDocs increase in real time:</p><p><img alt="Apache Pinot query console" src="https://www.datocms-assets.com/7515 [...]
\ No newline at end of file
diff --git a/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.txt b/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.txt
deleted file mode 100644
index 302f9946..00000000
--- a/blog/2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/05/30/how-to-ingest-streaming-data-from-kafka-to-apache-pinot","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"05\",\"30\",\"how-to-ingest-streaming-data-from-kafka-to-apache-pinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"How to Ingest Streaming Data from Kafka to Apache Pinot™ | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The blog post explains how to use Apache Kafka topics in Apache Pinot to ingest streaming data, with step-by-step instructions provided for installation and setup. It focuses on ingesting Wikipedia events into Ka [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"How to Ingest Streaming Data from Kafka to Apache Pinot™\",\"datePublished\":\"2022-05-30T00:00:00.000Z\",\"dateModified\":\"2022-05-30T00:00:00.000Z\",\"description\":\"The blog post explains how to use Apache Kafka topics in Apache Pinot to ingest streaming data, with step-by-step instructions provided for installation an [...]
-d:null
diff --git a/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.html b/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.html
deleted file mode 100644
index 89728946..00000000
--- a/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1685637607-image1.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1685637507-image4.png"/><link  [...]
-</span><span class="code-line"><span class="token builtin class-name">cd</span> mastodon-stream
-</span></code></pre></div><p>Then launch all of the components using Docker Compose:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker-compose</span> up
-</span></code></pre></div><h2 id="pinot-schema-and-table"><a href="#pinot-schema-and-table" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Pinot Schema and Table</h2><p>Similar to what Simon did with DuckDB, we’ll ingest the Mastodon events into a table. Pinot tables have a schema that’s defined in a schema file.</p><p>To come up with a schema file, we need to know the structure of the ingested events. For example:</p><div class="relative"><pre><code class="code [...]
-</span><span class="code-line">    <span class="token property">&quot;m_id&quot;</span><span class="token operator">:</span> <span class="token number">110146691030544274</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;created_at&quot;</span><span class="token operator">:</span> <span class="token number">1680705124</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;created_at_str&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2023 04 05 15:32:04&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;app&quot;</span><span class="token operator">:</span> <span class="token string">&quot;&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;url&quot;</span><span class="token operator">:</span> <span class="token string">&quot;https://mastodon.social/@Xingcat/110146690810165414&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;base_url&quot;</span><span class="token operator">:</span> <span class="token string">&quot;https://techhub.social&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;language&quot;</span><span class="token operator">:</span> <span class="token string">&quot;en&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;favourites&quot;</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;username&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Xingcat&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;bot&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tags&quot;</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;characters&quot;</span><span class="token operator">:</span> <span class="token number">196</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;words&quot;</span><span class="token operator">:</span> <span class="token number">36</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;mastodon_text&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Another, “I don’t know what this is yet,” paintings. Many, many layers that look like distressed metal or some sort of rock crosscut. Liking it so far, need to figure out what it’ll wind up being.&quot;</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Mapping these fields directly to columns is easiest and will result in a schema file that looks like this:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dimensionFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;m_id&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;LONG&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;created_at_str&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;app&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;url&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;base_url&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;language&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;username&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;bot&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;BOOLEAN&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon_text&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;STRING&quot;</span> <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metricFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;favourites&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;words&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;characters&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token punctuation">{</span> <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;tags&quot;</span><span class="token punctuation">,</span> <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;INT&quot;</span> <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;dateTimeFieldSpecs&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
-</span><span class="code-line">        <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;created_at&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;LONG&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS:EPOCH&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;granularity&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1:MILLISECONDS&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">]</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>Next up: our table config, shown below:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;tableName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;REALTIME&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;segmentsConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;timeColumnName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;created_at&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;timeType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MILLISECONDS&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;schemaName&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;replicasPerPartition&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tenants&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;loadMode&quot;</span><span class="token operator">:</span> <span class="token string">&quot;MMAP&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            <span class="token property">&quot;streamType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;kafka&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;lowLevel&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.topic.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon-topic&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.inputformat.avro.confluent.KafkaConfluentSchemaRegistryAvroMessageDecoder&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.factory.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.prop.format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;AVRO&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.prop.schema.registry.rest.url&quot;</span><span class="token operator">:</span> <span class="token string">&quot;http://schema-registry:8081&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.prop.schema.registry.schema.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon-topic-value&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.broker.list&quot;</span><span class="token operator">:</span> <span class="token string">&quot;broker:9093&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.consumer.prop.auto.offset.reset&quot;</span><span class="token operator">:</span> <span class="token string">&quot;smallest&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;metadata&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;customConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span><span class="token punctuation">,</span>
-</span><span class="code-line">    <span class="token property">&quot;routing&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        <span class="token property">&quot;instanceSelectorType&quot;</span><span class="token operator">:</span> <span class="token string">&quot;strictReplicaGroup&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The following configs represent the most important ones for ingesting Apache Avro™ messages into Pinot:</p><div class="relative"><pre><code class="code-highlight language-json"><span class="code-line"><span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.inputformat.avro.confluent.KafkaConfluentSchemaRegistryAvroMessageDecoder&quot;</span><s [...]
-</span><span class="code-line"><span class="token property">&quot;stream.kafka.decoder.prop.format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;AVRO&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"><span class="token property">&quot;stream.kafka.decoder.prop.schema.registry.rest.url&quot;</span><span class="token operator">:</span> <span class="token string">&quot;http://schema-registry:8081&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line"><span class="token property">&quot;stream.kafka.decoder.prop.schema.registry.schema.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;mastodon-topic-value&quot;</span><span class="token punctuation">,</span>
-</span></code></pre></div><p>The KafkaConfluentSchemaRegistryAvroMessageDecoder decoder calls the Schema Registry with the schema name to get back the schema that it will use to decode messages.</p><p>We can create the Pinot table by running the following command:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line"><span class="token function">docker</span> run <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">--network</span> mastodon <span class="token punctuation">\</span>
-</span><span class="code-line">   <span class="token variable parameter">-v</span> <span class="token constant environment">$PWD</span>/pinot:/config <span class="token punctuation">\</span>
-</span><span class="code-line">   apachepinot/pinot:0.12.0-arm64 AddTable <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-schemaFile</span> /config/schema.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-tableConfigFile</span> /config/table.json <span class="token punctuation">\</span>
-</span><span class="code-line">     <span class="token variable parameter">-controllerHost</span> <span class="token string">&quot;pinot-controller&quot;</span> <span class="token punctuation">\</span>
-</span><span class="code-line">    <span class="token variable parameter">-exec</span>
-</span></code></pre></div><p>We can then navigate to the table page of the Pinot UI:</p><p><a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/#/tenants/table/mastodon_REALTIME">http://localhost:9000/#/tenants/table/mastodon_REALTIME</a></p><p>Here, we’ll see the following:</p><p><img alt="Apache Pinot table config and schema" src="https://www.datocms-assets.com/75153/1685637837-image6.png" title="Apache Pinot table config and schema"/></p><h2 id="ingest-data-into-ka [...]
-</span><span class="code-line">  <span class="token variable parameter">--public</span> <span class="token variable parameter">--enableKafka</span> <span class="token variable parameter">--quiet</span>
-</span><span class="code-line">python mastodonlisten.py <span class="token variable parameter">--baseURL</span> https://fosstodon.org/ <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">--public</span> <span class="token variable parameter">--enableKafka</span> <span class="token variable parameter">--quiet</span>
-</span><span class="code-line">python mastodonlisten.py <span class="token variable parameter">--baseURL</span> https://mstdn.social/ <span class="token punctuation">\</span>
-</span><span class="code-line">  <span class="token variable parameter">--public</span> <span class="token variable parameter">--enableKafka</span> <span class="token variable parameter">--quiet</span>
-</span></code></pre></div><p>We can then check the ingestion of messages with the <a target="_blank" rel="noopener noreferrer" href="https://docs.confluent.io/platform/current/clients/kafkacat-usage.html">kcat</a> command line tool:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">kcat <span class="token variable parameter">-C</span> <span class="token variable parameter">-b</span> localhost:9092 <span class="token variable parameter">-t</s [...]
-</span><span class="code-line">  <span class="token variable parameter">-s</span> <span class="token variable assign-left">value</span><span class="token operator">=</span>avro <span class="token variable parameter">-r</span> http://localhost:8081 <span class="token variable parameter">-e</span>
-</span></code></pre></div><h2 id="query-pinot"><a href="#query-pinot" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Query Pinot</h2><p>Now, let’s go to the Pinot UI to see what data we’ve got to play with:</p><p><a target="_blank" rel="noopener noreferrer" href="http://localhost:9000/">http://localhost:9000</a></p><p>We’ll see the following preview of the data in the mastodon table:</p><p><img alt="SQL Editor, query response stats, and query result in Apache Pi [...]
-</span><span class="code-line"><span class="token punctuation">,</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">distinct</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token string">&quot;Num users&quot;</span>
-</span><span class="code-line"><span class="token punctuation">,</span> <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">distinct</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token string">&quot;Num urls&quot;</span>
-</span><span class="code-line"><span class="token keyword">from</span> mastodon
-</span><span class="code-line"><span class="token keyword">where</span> created_at<span class="token operator">*</span><span class="token number">1000</span> <span class="token operator">&gt;</span> ago<span class="token punctuation">(</span><span class="token string">&#x27;PT1M&#x27;</span><span class="token punctuation">)</span>
-</span><span class="code-line"><span class="token keyword">order</span> <span class="token keyword">by</span> <span class="token number">1</span> <span class="token keyword">DESC</span><span class="token punctuation">;</span>
-</span></code></pre></div><p><img alt="Query results for toots, users, and urls" src="https://www.datocms-assets.com/75153/1685637909-image8.png" title="Query results for toots, users, and urls"/></p><p>We can also query Pinot via the Python client, which we can install by running the following:</p><div class="relative"><pre><code class="code-highlight language-bash"><span class="code-line">pip <span class="token function">install</span> pinotdb
-</span></code></pre></div><p>Once we’ve done that, let’s open the Python REPL and run the following code:</p><div class="relative"><pre><code class="code-highlight language-python"><span class="code-line"><span class="token keyword">from</span> pinotdb <span class="token keyword">import</span> connect
-</span><span class="code-line"><span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd
-</span><span class="code-line">
-</span><span class="code-line">conn <span class="token operator">=</span> connect<span class="token punctuation">(</span>host<span class="token operator">=</span><span class="token string">&#x27;localhost&#x27;</span><span class="token punctuation">,</span> port<span class="token operator">=</span><span class="token number">8099</span><span class="token punctuation">,</span> path<span class="token operator">=</span><span class="token string">&#x27;/query/sql&#x27;</span><span class="toke [...]
-</span><span class="code-line">
-</span><span class="code-line">curs <span class="token operator">=</span> conn<span class="token punctuation">.</span>cursor<span class="token punctuation">(</span><span class="token punctuation">)</span>
-</span><span class="code-line">
-</span><span class="code-line">st<span class="token punctuation">.</span>header<span class="token punctuation">(</span><span class="token string">&quot;Daily Mastodon Usage&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">query <span class="token operator">=</span> <span class="token string triple-quoted-string">&quot;&quot;&quot;
-</span></span><span class="code-line"><span class="token string triple-quoted-string">select count(*) as &quot;Num toots&quot;
-</span></span><span class="code-line"><span class="token string triple-quoted-string">, count(distinct(username)) as &quot;Num users&quot;
-</span></span><span class="code-line"><span class="token string triple-quoted-string">, count(distinct(url)) as &quot;Num urls&quot;
-</span></span><span class="code-line"><span class="token string triple-quoted-string">from mastodon
-</span></span><span class="code-line"><span class="token string triple-quoted-string">where created_at*1000 &gt; ago(&#x27;PT1M&#x27;)
-</span></span><span class="code-line"><span class="token string triple-quoted-string">order by 1 DESC;
-</span></span><span class="code-line"><span class="token string triple-quoted-string">&quot;&quot;&quot;</span>
-</span><span class="code-line">curs<span class="token punctuation">.</span>execute<span class="token punctuation">(</span>query<span class="token punctuation">)</span>
-</span><span class="code-line">
-</span><span class="code-line">df <span class="token operator">=</span> pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>curs<span class="token punctuation">,</span> columns<span class="token operator">=</span><span class="token punctuation">[</span>item<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token keyword">for</span> item <span class="token keyword">in</span [...]
-</span></code></pre></div><p>This produces the resulting DataFrame:</p><div class="relative"><pre><code class="code-highlight language-js"><span class="code-line">   <span class="token maybe-class-name">Num</span> toots  <span class="token maybe-class-name">Num</span> users  <span class="token maybe-class-name">Num</span> urls
-</span><span class="code-line"><span class="token number">0</span>        <span class="token number">552</span>        <span class="token number">173</span>       <span class="token number">192</span>
-</span></code></pre></div><h2 id="streamlit"><a href="#streamlit" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Streamlit</h2><p>Next, we’ll create a Streamlit dashboard to package up these queries. We’ll visualize the results using Plotly, which you can install using:</p><p>pip install streamlit plotly</p><p>I’ve created a Streamlit app in the file <a target="_blank" rel="noopener noreferrer" href="https://github.com/mneedham/mastodon-stream/blob/main/app.py"> [...]
\ No newline at end of file
diff --git a/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.txt b/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.txt
deleted file mode 100644
index b8d6abec..00000000
--- a/blog/2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/06/01/real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"06\",\"01\",\"real-time-mastodon-usage-with-apache-kafka-apache-pinot-and-streamlit\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Real-Time Mastodon Usage with Apache Kafka, Apache Pinot, and Streamlit | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The blog post discusses analyzing user activity and server popularity on Mastodon using Kafka Connect, Parquet, Seaborn, and DuckDB. It explores the potential of using Apache Pinot for real-time da [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Real-Time Mastodon Usage with Apache Kafka, Apache Pinot, and Streamlit\",\"datePublished\":\"2023-06-01T00:00:00.000Z\",\"dateModified\":\"2023-06-01T00:00:00.000Z\",\"description\":\"The blog post discusses analyzing user activity and server popularity on Mastodon using Kafka Connect, Parquet, Seaborn, and DuckDB. It expl [...]
-d:null
diff --git a/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.html b/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.html
deleted file mode 100644
index fd49ce4d..00000000
--- a/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1689174701-image1.png"/><link rel="preload" as="image" href="https://www.datocms-assets.com/75153/1689175033-image4.png"/><link  [...]
\ No newline at end of file
diff --git a/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.txt b/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.txt
deleted file mode 100644
index 871512ac..00000000
--- a/blog/2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/07/12/star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"07\",\"12\",\"star-tree-index-in-apache-pinot-part-3-understanding-the-impact-in-real-customer\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]]," [...]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Star-Tree Index in Apache Pinot - Part 3 - Understanding the Impact in Real Customer Scenarios | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The blog post discusses how implementing a star-tree index significantly improved query performance for an AdTech platform by reducing latency. This index has also been succe [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Star-Tree Index in Apache Pinot - Part 3 - Understanding the Impact in Real Customer Scenarios\",\"datePublished\":\"2023-07-12T00:00:00.000Z\",\"dateModified\":\"2023-07-12T00:00:00.000Z\",\"description\":\"The blog post discusses how implementing a star-tree index significantly improved query performance for an AdTech pla [...]
-d:null
diff --git a/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.html b/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.html
deleted file mode 100644
index dbe983ed..00000000
--- a/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://miro.medium.com/v2/resize:fit:4800/0*gEyUq_Tp4Fycgp2r"/><link rel="preload" as="image" href="https://miro.medium.com/v2/resize:fit:1064/0*GE3P1fqAcsr0Xs5A"/> [...]
-</span><span class="code-line">  <span class="token property">&quot;taskTypeConfigsMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;UpsertCompactionTask&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;schedule&quot;</span><span class="token operator">:</span> <span class="token string">&quot;0 */5 * ? * *&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;bufferTimePeriod&quot;</span><span class="token operator">:</span> <span class="token string">&quot;7d&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;invalidRecordsThresholdPercent&quot;</span><span class="token operator">:</span> <span class="token string">&quot;30&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;invalidRecordsThresholdCount&quot;</span><span class="token operator">:</span> <span class="token string">&quot;100000&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line">  <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>All the configs above (excluding schedule) determine which completed segments are selected for compaction.</p><p>bufferTimePeriod is the amount of time that has elapsed since the segment was consuming. In the example above, this has been set to “7d” which means that any segment that was completed over 7 days ago may be eligible for compaction. However, if you want to ensure that segments are compacted without any additional delay this config can be set to “0d [...]
\ No newline at end of file
diff --git a/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.txt b/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.txt
deleted file mode 100644
index 2946387a..00000000
--- a/blog/2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/08/04/segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"08\",\"04\",\"segment-compaction-for-upsert-enabled-tables-in-apache-pinot-3f30657aa077\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Segment Compaction for Upsert Enabled Tables in Apache Pinot | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The blog post discusses the feature contribution of segment compaction to Apache Pinot project, addressing the issue of older records consuming unnecessary storage space. It explains the configuration and imp [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Segment Compaction for Upsert Enabled Tables in Apache Pinot\",\"datePublished\":\"2023-08-04T00:00:00.000Z\",\"dateModified\":\"2023-08-04T00:00:00.000Z\",\"description\":\"The blog post discusses the feature contribution of segment compaction to Apache Pinot project, addressing the issue of older records consuming unneces [...]
-d:null
diff --git a/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.html b/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.html
deleted file mode 100644
index 8e120a10..00000000
--- a/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://pinot.apache.org/blogs/apache-pinot-1-0-name-cloud.png"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence= [...]
-</span><span class="code-line">  <span class="token property">&quot;taskTypeConfigsMap&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">    <span class="token property">&quot;UpsertCompactionTask&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">      <span class="token property">&quot;schedule&quot;</span><span class="token operator">:</span> <span class="token string">&quot;0 */5 * ? * *&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;bufferTimePeriod&quot;</span><span class="token operator">:</span> <span class="token string">&quot;7d&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;invalidRecordsThresholdPercent&quot;</span><span class="token operator">:</span> <span class="token string">&quot;30&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">      <span class="token property">&quot;invalidRecordsThresholdCount&quot;</span><span class="token operator">:</span> <span class="token string">&quot;100000&quot;</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line">  <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p>The example above, bufferTimePeriod is set to “7d” which means that any segment that was completed over 7 days ago may be eligible for compaction. However, if you want to ensure that segments are compacted without any additional delay this config can be set to “0d”.</p><p>invalidRecordsThresholdPercent is an optional limit to the amount of older records allowed in the completed segment represented as a percentage of the total number of records in the segment  [...]
-</span><span class="code-line"><span class="token keyword">select</span> <span class="token function">count</span><span class="token punctuation">(</span>col1<span class="token punctuation">)</span> <span class="token comment">-- returns 3</span>
-</span></code></pre></div><p>In the select statement below, the NULL values in col2 are not included in the aggregation.</p><div class="relative"><pre><code class="language-sql code-highlight"><span class="code-line"><span class="token keyword">select</span> <span class="token function">sum</span><span class="token punctuation">(</span>col2<span class="token punctuation">)</span> <span class="token comment">-- returns 1</span>
-</span><span class="code-line"><span class="token keyword">select</span> <span class="token function">count</span><span class="token punctuation">(</span>col2<span class="token punctuation">)</span> <span class="token comment">-- returns 1</span>
-</span></code></pre></div><h3 id="group-by"><a href="#group-by" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Group By</h3><p>Pinot now supports grouping by NULL. In the example below, we are grouping by col1 which contains a NULL value. Given the table below, grouping by columns with NULL value will have this behavior.</p><div class="w-full overflow-x-auto"><table><thead><tr><th>col1</th></tr></thead><tbody><tr><td>a</td></tr><tr><td>NULL</td></tr><tr><td>b</t [...]
-</span></code></pre></div><p><code>RESULT: NULL, 1, 2, 3</code></p><p>Example 2:</p><p>NULL values sort AFTER all non-NULL values.</p><p>SQL:</p><div class="relative"><pre><code class="language-sql code-highlight"><span class="code-line"><span class="token keyword">select</span> col <span class="token keyword">from</span> <span class="token keyword">table</span> <span class="token keyword">order</span> <span class="token keyword">by</span> col <span class="token keyword">ASC</span> NULLS [...]
-</span></code></pre></div><p><code>RESULT: 1, 2, 3, NULL</code></p><p>Example 3:</p><p>Default behavior is NULL LAST.</p><p>SQL:</p><div class="relative"><pre><code class="language-sql code-highlight"><span class="code-line"><span class="token keyword">select</span> col <span class="token keyword">from</span> <span class="token keyword">table</span> <span class="token keyword">order</span> <span class="token keyword">by</span> col
-</span></code></pre></div><p><code>RESULT: 1, 2, 3, NULL</code></p><h2 id="index-pluggability"><a href="#index-pluggability" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Index Pluggability</h2><p>Today, Pinot supports multiple index types, like forward index, bloom filter, and range index. Before Pinot 1.0, index types were all statically defined, which means that in order to create a new index type, you’d need to rebuild Pinot from source. Ideally that should [...]
-</span><span class="code-line">  <span class="token punctuation">.</span>format<span class="token punctuation">(</span><span class="token string">&quot;pinot&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token punctuation">.</span>option<span class="token punctuation">(</span><span class="token string">&quot;table&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;airlineStats&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token punctuation">.</span>option<span class="token punctuation">(</span><span class="token string">&quot;tableType&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;offline&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token punctuation">.</span>option<span class="token punctuation">(</span><span class="token string">&quot;queryOptions&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;enableNullHandling=true,maxExecutionThreads=1&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token punctuation">.</span>load<span class="token punctuation">(</span><span class="token punctuation">)</span>
-</span><span class="code-line">  <span class="token punctuation">.</span>sql<span class="token punctuation">(</span><span class="token string">&quot;SELECT * FROM airlineStats WHERE DEST = ‘SFO’&quot;</span><span class="token punctuation">)</span>
-</span><span class="code-line">
-</span><span class="code-line">data<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span>
-</span></code></pre></div><h2 id="petabyte-scale-log-storage-and-search-in-pinot-with-clp"><a href="#petabyte-scale-log-storage-and-search-in-pinot-with-clp" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a>Petabyte-Scale Log Storage and Search in Pinot with CLP</h2><p>Compressed Log Processor (CLP) is a tool capable of losslessly compressing text logs and searching them in their compressed state. It achieves a better compression ratio than general purpose compres [...]
-</span><span class="code-line">    ...
-</span><span class="code-line">    <span class="token property">&quot;tableIndexConfig&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">        ...
-</span><span class="code-line">        <span class="token property">&quot;streamConfigs&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
-</span><span class="code-line">            ...
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.class.name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;org.apache.pinot.plugin.inputformat.clplog.CLPLogMessageDecoder&quot;</span><span class="token punctuation">,</span>
-</span><span class="code-line">            <span class="token property">&quot;stream.kafka.decoder.prop.fieldsForClpEncoding&quot;</span><span class="token operator">:</span> <span class="token string">&quot;&lt;field-name-1&gt;,&lt;field-name-2&gt;&quot;</span>
-</span><span class="code-line">        <span class="token punctuation">}</span>
-</span><span class="code-line">    <span class="token punctuation">}</span>
-</span><span class="code-line"><span class="token punctuation">}</span>
-</span></code></pre></div><p><code>&lt;field-names-1 and 2&gt;</code> are a comma-separated list of fields you wish to encode with CLP.</p><p>You can read the design <a target="_blank" rel="noopener noreferrer" href="https://docs.google.com/document/d/1nHZb37re4mUwEA258x3a2pgX13EWLWMJ0uLEDk1dUyU/edit">document</a> for more details into why and how this feature was implemented.</p><h2 id="summary"><a href="#summary" aria-hidden="true" tabindex="-1"><span class="icon icon-link"></span></a> [...]
\ No newline at end of file
diff --git a/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.txt b/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.txt
deleted file mode 100644
index 05a1749b..00000000
--- a/blog/2023/09/19/Annoucing-Apache-Pinot-1-0.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2023/09/19/Annoucing-Apache-Pinot-1-0","c"],{"children":["__PAGE__?{\"slug\":[\"2023\",\"09\",\"19\",\"Annoucing-Apache-Pinot-1-0\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Announcing Apache Pinot 1.0™ | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Introducing Apache Pinot 1.0 Release"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link", [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[7246,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-12:I[2529,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-13:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Announcing Apache Pinot 1.0™\",\"datePublished\":\"2023-09-19T00:00:00.000Z\",\"dateModified\":\"2023-09-19T00:00:00.000Z\",\"description\":\"Introducing Apache Pinot 1.0 Release\",\"image\":\"/static/images/twitter-card.png\",\"url\":\"https://pinot.apache.org/blog/2023-09-19-Annoucing-Apache-Pinot-1-0\",\"author\":[{\"@ty [...]
-d:null
diff --git a/blog/2024/08/07/AWSxPinot.html b/blog/2024/08/07/AWSxPinot.html
deleted file mode 100644
index 49e555ff..00000000
--- a/blog/2024/08/07/AWSxPinot.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/01/BDB-4015-image001.png"/><link rel="stylesheet" href="/_next/static/css/9e92 [...]
\ No newline at end of file
diff --git a/blog/2024/08/07/AWSxPinot.txt b/blog/2024/08/07/AWSxPinot.txt
deleted file mode 100644
index 8686f94a..00000000
--- a/blog/2024/08/07/AWSxPinot.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["blog",{"children":[["slug","2024/08/07/AWSxPinot","c"],{"children":["__PAGE__?{\"slug\":[\"2024\",\"08\",\"07\",\"AWSxPinot\"]}",{}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:HL["/_next/static/css/c130d1629644f070.css","style",{"crossOrigin":""}]
-6:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-7:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-8:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-9:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-a:I[6954,[],""]
-b:I[7264,[],""]
-c:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Build a real-time analytics solution with Apache Pinot on AWS | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"The AWS team wrote up a step-by-step guide showing you how you can build a real-time OLAP datastore on Amazon Web Services (AWS) using Apache Pinot on Amazon Elastic Compute Cloud (Amazon EC2) and do near re [...]
-10:I[1514,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-11:I[5185,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","980","static/chunks/980-6e243f9cd384c7d2.js","797","static/chunks/app/blog/%5B...slug%5D/page-cf83748a780407dd.js"],""]
-e:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"headline\":\"Build a real-time analytics solution with Apache Pinot on AWS\",\"datePublished\":\"2024-08-07T00:00:00.000Z\",\"dateModified\":\"2024-08-07T00:00:00.000Z\",\"description\":\"The AWS team wrote up a step-by-step guide showing you how you can build a real-time OLAP datastore on Amazon Web Services (AWS) using Apache Pinot on [...]
-d:null
diff --git a/blog/page/1.html b/blog/page/1.html
deleted file mode 100644
index cc44575b..00000000
--- a/blog/page/1.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/1.txt b/blog/page/1.txt
deleted file mode 100644
index 7aafc1c7..00000000
--- a/blog/page/1.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","1","d"],{"children":["__PAGE__?{\"page\":\"1\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Data","Analytics","User-Facing Analytics","joins","compression","null support","pluggable index","spark integration"]
-10:["dulay","shrivastava","pawar"]
-11:{"text":"13 min read","minutes":12.255,"time":735300,"words":2451}
-13:{"value":"What Makes a “1.0 Release?”","url":"#what-makes-a-10-release","depth":2}
-14:{"value":"Join Support","url":"#join-support","depth":2}
-15:{"value":"Upsert Improvements","url":"#upsert-improvements","depth":2}
-16:{"value":"Segment Compaction for Upsert Tables","url":"#segment-compaction-for-upsert-tables","depth":3}
-17:{"value":"DELETE Support for Upsert Tables","url":"#delete-support-for-upsert-tables","depth":3}
-18:{"value":"NULL Value Support","url":"#null-value-support","depth":2}
-19:{"value":"Aggregations","url":"#aggregations","depth":3}
-1a:{"value":"Group By","url":"#group-by","depth":3}
-1b:{"value":"Sorting","url":"#sorting","depth":3}
-1c:{"value":"Index Pluggability","url":"#index-pluggability","depth":2}
-1d:{"value":"Apache Pinot Spark 3 Connector and Passing Pinot Options","url":"#apache-pinot-spark-3-connector-and-passing-pinot-options","depth":2}
-1e:{"value":"Petabyte-Scale Log Storage and Search in Pinot with CLP","url":"#petabyte-scale-log-storage-and-search-in-pinot-with-clp","depth":2}
-1f:{"value":"Summary","url":"#summary","depth":2}
-20:{"value":"Resources","url":"#resources","depth":2}
-12:["$13","$14","$15","$16","$17","$18","$19","$1a","$1b","$1c","$1d","$1e","$1f","$20"]
-21:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Announcing Apache Pinot 1.0™","datePublished":"2023-09-19T00:00:00.000Z","dateModified":"2023-09-19T00:00:00.000Z","description":"Introducing Apache Pinot 1.0 Release","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2023-09-19-Annoucing-Apache-Pinot-1-0"}
-e:{"title":"Announcing Apache Pinot 1.0™","date":"2023-09-19T00:00:00.000Z","tags":"$f","summary":"Introducing Apache Pinot 1.0 Release","authors":"$10","type":"Blog","readingTime":"$11","slug":"2023/09/19/Annoucing-Apache-Pinot-1-0","customSlug":"2023/09/19/Annoucing-Apache-Pinot-1-0","path":"blog/2023/09/19/Annoucing-Apache-Pinot-1-0","customPath":"blog/2023/09/19/Annoucing-Apache-Pinot-1-0","filePath":"blog/2023-09-19-Annoucing-Apache-Pinot-1-0.mdx","toc":"$12","structuredData":"$21"}
-23:["Pinot","Data","Analytics","User-Facing Analytics","blog post","feature contribution","segment compaction","Apache Pinot project","older records","storage space","configuration","impact","freeing up storage"]
-24:["zych"]
-25:{"text":"4 min read","minutes":3.565,"time":213900,"words":713}
-27:{"value":"Context and Configuration","url":"#context-and-configuration","depth":2}
-28:{"value":"Example Use Case","url":"#example-use-case","depth":2}
-29:{"value":"Conclusion","url":"#conclusion","depth":2}
-26:["$27","$28","$29"]
-2c:{"@type":"Person","name":"Robert Zych"}
-2b:["$2c"]
-2a:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Segment Compaction for Upsert Enabled Tables in Apache Pinot","datePublished":"2023-08-04T00:00:00.000Z","dateModified":"2023-08-04T00:00:00.000Z","description":"The blog post discusses the feature contribution of segment compaction to Apache Pinot project, addressing the issue of older records consuming unnecessary storage space. It explains the configuration and impact of segment compaction in freeing up storage. The [...]
-22:{"title":"Segment Compaction for Upsert Enabled Tables in Apache Pinot","date":"2023-08-04T00:00:00.000Z","tags":"$23","summary":"The blog post discusses the feature contribution of segment compaction to Apache Pinot project, addressing the issue of older records consuming unnecessary storage space. It explains the configuration and impact of segment compaction in freeing up storage. The author expresses gratitude and offers support for questions or feedback on segment compaction.","a [...]
-2e:["Pinot","Data","Analytics","User-Facing Analytics","blog post","implementing","startree index","query performance","AdTech platform","reducing latency","cybersecurity threat detection","multiplayer game leaderboard tracking","improved query performance","cost savings","real production use cases","StarTree Cloud","realtime analytics","95% to 99% improvement"]
-2f:["dabade","nijjer"]
-30:{"text":"8 min read","minutes":7.675,"time":460500,"words":1535}
-32:{"value":"AdTech Use Case","url":"#adtech-use-case","depth":2}
-33:{"value":"Why was the existing system not working?","url":"#why-was-the-existing-system-not-working","depth":3}
-34:{"value":"The Problem and Challenges?","url":"#the-problem-and-challenges","depth":3}
-35:{"value":"Data Size and Infra Footprint for the Pilot: ","url":"#data-size-and-infra-footprint-for-the-pilot","depth":3}
-36:{"value":"Impact Summary:","url":"#impact-summary","depth":3}
-37:{"value":"CyberSecurity Use Case:","url":"#cybersecurity-use-case","depth":2}
-38:{"value":"Why was the existing system not working?","url":"#why-was-the-existing-system-not-working","depth":3}
-39:{"value":"The Problem and Challenges?","url":"#the-problem-and-challenges","depth":3}
-3a:{"value":"Data Size and Infra Footprint for the Pilot: ","url":"#data-size-and-infra-footprint-for-the-pilot","depth":3}
-3b:{"value":"Impact Summary:","url":"#impact-summary","depth":3}
-3c:{"value":"Multiplayer Game Leaderboard Use Case","url":"#multiplayer-game-leaderboard-use-case","depth":2}
-3d:{"value":"The Problem and Challenges?","url":"#the-problem-and-challenges","depth":3}
-3e:{"value":"Data Size and Infra Footprint for the Pilot: ","url":"#data-size-and-infra-footprint-for-the-pilot","depth":3}
-3f:{"value":"Impact Summary:","url":"#impact-summary","depth":3}
-40:{"value":"Quick Recap: Star-Tree Index Performance Improvements","url":"#quick-recap-star-tree-index-performance-improvements","depth":2}
-41:{"value":"Intrigued by What You’ve Read?","url":"#intrigued-by-what-youve-read","depth":2}
-31:["$32","$33","$34","$35","$36","$37","$38","$39","$3a","$3b","$3c","$3d","$3e","$3f","$40","$41"]
-42:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Star-Tree Index in Apache Pinot - Part 3 - Understanding the Impact in Real Customer Scenarios","datePublished":"2023-07-12T00:00:00.000Z","dateModified":"2023-07-12T00:00:00.000Z","description":"The blog post discusses how implementing a star-tree index significantly improved query performance for an AdTech platform by reducing latency. This index has also been successful in cybersecurity threat detection and multipla [...]
-2d:{"title":"Star-Tree Index in Apache Pinot - Part 3 - Understanding the Impact in Real Customer Scenarios","date":"2023-07-12T00:00:00.000Z","tags":"$2e","summary":"The blog post discusses how implementing a star-tree index significantly improved query performance for an AdTech platform by reducing latency. This index has also been successful in cybersecurity threat detection and multiplayer game leaderboard tracking, resulting in improved query performance and cost savings. Real produ [...]
-44:["Pinot","Data","Analytics","User-Facing Analytics","blog post","analyzing user activity","server popularity","Mastodon","Kafka Connect","Parquet","Seaborn","DuckDB","potential","Apache Pinot","realtime data streaming","dashboard","instructions","ingesting","Apache Avro messages","Pinot table","querying data"]
-45:["needham"]
-46:{"text":"7 min read","minutes":6.755,"time":405300,"words":1351}
-48:{"value":"The Existing Solution: Kafka Connect, Parquet, Seaborn and DuckDB ","url":"#the-existing-solution-kafka-connect-parquet-seaborn-and-duckdb","depth":2}
-49:{"value":"Going Real-Time with Apache Pinot™","url":"#going-real-time-with-apache-pinot","depth":2}
-4a:{"value":"Setup","url":"#setup","depth":2}
-4b:{"value":"Pinot Schema and Table","url":"#pinot-schema-and-table","depth":2}
-4c:{"value":"Ingest Data into Kafka","url":"#ingest-data-into-kafka","depth":2}
-4d:{"value":"Query Pinot","url":"#query-pinot","depth":2}
-4e:{"value":"Streamlit","url":"#streamlit","depth":2}
-4f:{"value":"Summary","url":"#summary","depth":2}
-47:["$48","$49","$4a","$4b","$4c","$4d","$4e","$4f"]
-50:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Real-Time Mastodon Usage with Apache Kafka, Apache Pinot, and Streamlit","datePublished":"2023-06-01T00:00:00.000Z","dateModified":"2023-06-01T00:00:00.000Z","description":"The blog post discusses analyzing user activity and server popularity on Mastodon using Kafka Connect, Parquet, Seaborn, and DuckDB. It explores the potential of using Apache Pinot for real-time data streaming and creating a dashboard. The post prov [...]
-43:{"title":"Real-Time Mastodon Usage with Apache Kafka, Apache Pinot, and Streamlit","date":"2023-06-01T00:00:00.000Z","tags":"$44","summary":"The blog post discusses analyzing user activity and server popularity on Mastodon using Kafka Connect, Parquet, Seaborn, and DuckDB. It explores the potential of using Apache Pinot for real-time data streaming and creating a dashboard. The post provides instructions on ingesting Apache Avro messages into Pinot, creating a Pinot table, and queryin [...]
-52:["Pinot","Data","Analytics","User-Facing Analytics","CDC","Debezium"]
-53:["dulay"]
-54:{"text":"10 min read","minutes":9.105,"time":546300,"words":1821}
-56:{"value":"Pre-Image, Post-Image, or Diffs?","url":"#pre-image-post-image-or-diffs","depth":2}
-57:{"value":"How to Capture Change Data with Debezium","url":"#how-to-capture-change-data-with-debezium","depth":2}
-58:{"value":"Debezium Data Format","url":"#debezium-data-format","depth":2}
-59:{"value":"Materialized Views","url":"#materialized-views","depth":2}
-5a:{"value":"Upsert in Apache Pinot","url":"#upsert-in-apache-pinot","depth":2}
-5b:{"value":"Summary","url":"#summary","depth":2}
-55:["$56","$57","$58","$59","$5a","$5b"]
-5c:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Change Data Capture with Apache Pinot - How Does It Work?","datePublished":"2023-05-23T00:00:00.000Z","dateModified":"2023-05-23T00:00:00.000Z","description":"This blog post discusses the use of Change Data Capture (CDC) in Apache Pinot and the data format used in Debezium for efficient querying and analytics. It explains the elements of the format and its usage in indexing JSON fields. It also mentions the availabilit [...]
-51:{"title":"Change Data Capture with Apache Pinot - How Does It Work?","date":"2023-05-23T00:00:00.000Z","tags":"$52","summary":"This blog post discusses the use of Change Data Capture (CDC) in Apache Pinot and the data format used in Debezium for efficient querying and analytics. It explains the elements of the format and its usage in indexing JSON fields. It also mentions the availability of CDC connectors in Debezium for various streaming systems.","authors":"$53","type":"Blog","read [...]
-5d:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/10.html b/blog/page/10.html
deleted file mode 100644
index 9005572d..00000000
--- a/blog/page/10.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/10.txt b/blog/page/10.txt
deleted file mode 100644
index 7930d3b4..00000000
--- a/blog/page/10.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","10","d"],{"children":["__PAGE__?{\"page\":\"10\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","A/B Testing","Infrastructure","Analytics","User-Facing Analytics"]
-10:["Kishore Gopalakrishna"]
-11:{"text":"1 min read","minutes":0.15,"time":9000,"words":30}
-12:[]
-15:{"@type":"Person","name":"$undefined"}
-14:["$15"]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics","datePublished":"2015-06-10T00:00:00.000Z","dateModified":"2015-06-10T00:00:00.000Z","description":"Introducing Pinot which allow to slice and dice across billions of rows in real-time across a wide variety of products","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2015-06-10-Open-Sourcing-Pinot","author":"$14"}
-e:{"title":"Open Sourcing Pinot - Scaling the Wall of Real-Time Analytics","date":"2015-06-10T00:00:00.000Z","tags":"$f","summary":"Introducing Pinot which allow to slice and dice across billions of rows in real-time across a wide variety of products","authors":"$10","type":"Blog","readingTime":"$11","slug":"2015/06/10/Open-Sourcing-Pinot","customSlug":"2015/06/10/Open-Sourcing-Pinot","path":"blog/2015/06/10/Open-Sourcing-Pinot","customPath":"blog/2015/06/10/Open-Sourcing-Pinot","filePat [...]
-17:["Pinot","LinkedIn","Data Scaling","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-18:["linkedin"]
-19:{"text":"1 min read","minutes":0.58,"time":34800,"words":116}
-1b:{"value":"A Brief History of Scaling LinkedIn","url":"#a-brief-history-of-scaling-linkedin","depth":2}
-1a:["$1b"]
-1c:{"@context":"https://schema.org","@type":"BlogPosting","headline":"A Brief History of Scaling LinkedIn","datePublished":"2015-05-16T00:00:00.000Z","dateModified":"2015-05-16T00:00:00.000Z","description":"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.","image":"/static/images/twitter [...]
-16:{"title":"A Brief History of Scaling LinkedIn","date":"2015-05-16T00:00:00.000Z","tags":"$17","summary":"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.","authors":"$18","type":"Blog","readingTime":"$19","slug":"2015/05/16/LinkedIn-Scaling","customSlug":"2015/05/16/LinkedIn-Scaling", [...]
-1d:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/2.html b/blog/page/2.html
deleted file mode 100644
index bfbd6982..00000000
--- a/blog/page/2.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/2.txt b/blog/page/2.txt
deleted file mode 100644
index b9b936ec..00000000
--- a/blog/page/2.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","2","d"],{"children":["__PAGE__?{\"page\":\"2\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Data","Analytics","User-Facing Analytics","data explorer","getting started","streaming","kafka"]
-10:["herman"]
-11:{"text":"8 min read","minutes":7.91,"time":474600,"words":1582}
-13:{"value":"The Obligatory What is Apache Pinot and StarTree Section","url":"#the-obligatory-what-is-apache-pinot-and-startree-section","depth":2}
-14:{"value":"What do you need to run Apache Pinot?","url":"#what-do-you-need-to-run-apache-pinot","depth":2}
-15:{"value":"Step-by-step installation of Apache Pinot","url":"#step-by-step-installation-of-apache-pinot","depth":2}
-16:{"value":"Step 1: ","url":"#step-1","depth":3}
-17:{"value":"Step 2:","url":"#step-2","depth":3}
-18:{"value":"Step 3:","url":"#step-3","depth":3}
-19:{"value":"Step 4:","url":"#step-4","depth":3}
-1a:{"value":"Step 5:","url":"#step-5","depth":3}
-1b:{"value":"What’s under the hood?","url":"#whats-under-the-hood","depth":2}
-1c:{"value":"Conclusion","url":"#conclusion","depth":2}
-12:["$13","$14","$15","$16","$17","$18","$19","$1a","$1b","$1c"]
-1d:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot Tutorial for Getting Started - A Step-by-Step Guide","datePublished":"2023-05-18T00:00:00.000Z","dateModified":"2023-05-18T00:00:00.000Z","description":"This blog post is a guide to getting started with Apache Pinot, including installing and running the necessary components of a Pinot cluster. It also explains how to set up schemas, tables, and load data into Pinot, as well as how to run queries using the  [...]
-e:{"title":"Apache Pinot Tutorial for Getting Started - A Step-by-Step Guide","date":"2023-05-18T00:00:00.000Z","tags":"$f","summary":"This blog post is a guide to getting started with Apache Pinot, including installing and running the necessary components of a Pinot cluster. It also explains how to set up schemas, tables, and load data into Pinot, as well as how to run queries using the Pinot Data Explorer. The next article in the series will cover consuming event streaming data with Ap [...]
-1f:["Pinot","Data","Analytics","User-Facing Analytics","star-tree index"]
-20:["dabade"]
-21:{"text":"7 min read","minutes":6.25,"time":375000,"words":1250}
-23:{"value":"1. The Dataset:","url":"#1-the-dataset","depth":2}
-24:{"value":"Schema:","url":"#schema","depth":3}
-25:{"value":"2. Query Pattern","url":"#2-query-pattern","depth":2}
-26:{"value":"Star-Tree Index Config:","url":"#star-tree-index-config","depth":3}
-27:{"value":"4. Query Results and Stats","url":"#4-query-results-and-stats","depth":2}
-28:{"value":"Iteration #1: w/o any Apache Pinot optimizations:","url":"#iteration-1-wo-any-apache-pinot-optimizations","depth":3}
-29:{"value":"Iteration #2: w/ Inverted Index ","url":"#iteration-2-w-inverted-index","depth":3}
-2a:{"value":"Iteration #3: w/ Star-Tree Index: ","url":"#iteration-3-w-star-tree-index","depth":3}
-2b:{"value":"Comparison:","url":"#comparison","depth":3}
-2c:{"value":"5. Impact Summary:","url":"#5-impact-summary","depth":2}
-2d:{"value":"Key Benefits of the Star-Tree Index:","url":"#key-benefits-of-the-star-tree-index","depth":3}
-22:["$23","$24","$25","$26","$27","$28","$29","$2a","$2b","$2c","$2d"]
-2e:{"@context":"https://schema.org","@type":"BlogPosting","headline":"StarTree Indexes in Apache Pinot Part-1 - Understanding the Impact on Query Performance","datePublished":"2023-05-16T00:00:00.000Z","dateModified":"2023-05-16T00:00:00.000Z","description":"The blog post explains the star-tree index in Apache Pinot and its benefits compared to traditional materialized views. By implementing a star-tree index, query performance significantly improved, reducing query latency from 1,513 ms [...]
-1e:{"title":"StarTree Indexes in Apache Pinot Part-1 - Understanding the Impact on Query Performance","date":"2023-05-16T00:00:00.000Z","tags":"$1f","summary":"The blog post explains the star-tree index in Apache Pinot and its benefits compared to traditional materialized views. By implementing a star-tree index, query performance significantly improved, reducing query latency from 1,513 ms to just 4 ms and drastically reducing disk reads by 99.999%.","authors":"$20","type":"Blog","readi [...]
-30:["Pinot","Data","Analytics","User-Facing Analytics","geospatial indexing"]
-31:["needham"]
-32:{"text":"9 min read","minutes":8.305,"time":498300,"words":1661}
-34:{"value":"What is geospatial indexing?","url":"#what-is-geospatial-indexing","depth":2}
-35:{"value":"How do geospatial indexes work in Apache Pinot?","url":"#how-do-geospatial-indexes-work-in-apache-pinot","depth":2}
-36:{"value":"When is the geospatial index used?","url":"#when-is-the-geospatial-index-used","depth":2}
-37:{"value":"How do you know the index usage?","url":"#how-do-you-know-the-index-usage","depth":2}
-38:{"value":"Summary","url":"#summary","depth":2}
-33:["$34","$35","$36","$37","$38"]
-3b:{"@type":"Person","name":"Mark Needham"}
-3a:["$3b"]
-39:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Geospatial Indexing in Apache Pinot","datePublished":"2023-05-11T00:00:00.000Z","dateModified":"2023-05-11T00:00:00.000Z","description":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2023-05-11-Geospatial-Indexing-in-Apache-Pinot","author":"$3a"}
-2f:{"title":"Geospatial Indexing in Apache Pinot","date":"2023-05-11T00:00:00.000Z","tags":"$30","summary":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.","authors":"$31","type":"Blog","readingTime":"$32","slug":"2023/05/11/Geospatial-Indexing-in-Apache-Pinot","customSlug":"2023/05/11/Geospatial-Indexing-in-Apache-Pinot","path":"blog/2023/05/11/Geospatial-Indexing-in-Apache-Pinot","customPath":"blog/2023/05/11/Ge [...]
-3d:["Pinot","Data","Analytics","User-Facing Analytics","consumer record lag","kafka"]
-3e:["needham"]
-3f:{"text":"5 min read","minutes":4.57,"time":274200,"words":914}
-41:{"value":"Why do we need this?","url":"#why-do-we-need-this","depth":2}
-42:{"value":"Worked Example","url":"#worked-example","depth":2}
-43:{"value":"Summary","url":"#summary","depth":2}
-40:["$41","$42","$43"]
-44:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.12 - Consumer Record Lag","datePublished":"2023-03-30T00:00:00.000Z","dateModified":"2023-03-30T00:00:00.000Z","description":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2023-03-30-Apache-Pinot-0-12-Consumer-Record-Lag"}
-3c:{"title":"Apache Pinot™ 0.12 - Consumer Record Lag","date":"2023-03-30T00:00:00.000Z","tags":"$3d","summary":"This post will explore a new API endpoint that lets you check how much Pinot is lagging when ingesting from Apache Kafka.","authors":"$3e","type":"Blog","readingTime":"$3f","slug":"2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag","customSlug":"2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag","path":"blog/2023/03/30/Apache-Pinot-0-12-Consumer-Record-Lag","customPath":"blog/20 [...]
-46:["Pinot","Data","Analytics","User-Facing Analytics","hybrid tables","time boundary"]
-47:["needham"]
-48:{"text":"4 min read","minutes":3.415,"time":204900,"words":683}
-4a:{"value":"What is a hybrid table?","url":"#what-is-a-hybrid-table","depth":2}
-4b:{"value":"How do you query a hybrid table?","url":"#how-do-you-query-a-hybrid-table","depth":2}
-4c:{"value":"So, what’s the problem?","url":"#so-whats-the-problem","depth":2}
-4d:{"value":"And the solution?","url":"#and-the-solution","depth":2}
-4e:{"value":"Neat, anything else I should know?","url":"#neat-anything-else-i-should-know","depth":2}
-4f:{"value":"Summary","url":"#summary","depth":2}
-49:["$4a","$4b","$4c","$4d","$4e","$4f"]
-50:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.12 - Configurable Time Boundary","datePublished":"2023-02-21T00:00:00.000Z","dateModified":"2023-02-21T00:00:00.000Z","description":"This post will explore the ability to configure the time boundary when working with hybrid tables.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2023-02-21-Apache-Pinot-0-12-Configurable-Time-Boundary"}
-45:{"title":"Apache Pinot™ 0.12 - Configurable Time Boundary","date":"2023-02-21T00:00:00.000Z","tags":"$46","summary":"This post will explore the ability to configure the time boundary when working with hybrid tables.","authors":"$47","type":"Blog","readingTime":"$48","slug":"2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary","customSlug":"2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary","path":"blog/2023/02/21/Apache-Pinot-0-12-Configurable-Time-Boundary","customPath":"bl [...]
-51:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/3.html b/blog/page/3.html
deleted file mode 100644
index 3b276202..00000000
--- a/blog/page/3.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/3.txt b/blog/page/3.txt
deleted file mode 100644
index 0e0387d1..00000000
--- a/blog/page/3.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","3","d"],{"children":["__PAGE__?{\"page\":\"3\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Data","Analytics","User-Facing Analytics","deduplication"]
-10:["needham"]
-11:{"text":"8 min read","minutes":7.395,"time":443700,"words":1479}
-13:{"value":"Why do we need deduplication on real-time tables?","url":"#why-do-we-need-deduplication-on-real-time-tables","depth":2}
-14:{"value":"How does dedup differ from upserts?","url":"#how-does-dedup-differ-from-upserts","depth":2}
-15:{"value":"Setting up Apache Kafka and Apache Pinot","url":"#setting-up-apache-kafka-and-apache-pinot","depth":2}
-16:{"value":"Data Generation","url":"#data-generation","depth":2}
-17:{"value":"Pinot Schema/Table Config","url":"#pinot-schematable-config","depth":2}
-18:{"value":"How does it work? ","url":"#how-does-it-work","depth":2}
-19:{"value":"Summary","url":"#summary","depth":2}
-12:["$13","$14","$15","$16","$17","$18","$19"]
-1a:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.11 - Deduplication on Real-Time Tables","datePublished":"2023-01-29T00:00:00.000Z","dateModified":"2023-01-29T00:00:00.000Z","description":"Learn about the deduplication for the real-time tables feature in Apache Pinot","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2023-01-29-Apache-Pinot-Deduplication-on-Real-Time-Tables"}
-e:{"title":"Apache Pinot™ 0.11 - Deduplication on Real-Time Tables","date":"2023-01-29T00:00:00.000Z","tags":"$f","summary":"Learn about the deduplication for the real-time tables feature in Apache Pinot","authors":"$10","type":"Blog","readingTime":"$11","slug":"2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables","customSlug":"2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables","path":"blog/2023/01/29/Apache-Pinot-Deduplication-on-Real-Time-Tables","customPath":"blog/2023/0 [...]
-1c:["Pinot","Data","Analytics","User-Facing Analytics","pause","resume","real-time ingestion"]
-1d:["needham"]
-1e:{"text":"7 min read","minutes":6.475,"time":388500,"words":1295}
-20:{"value":"How does real-time ingestion work?","url":"#how-does-real-time-ingestion-work","depth":2}
-21:{"value":"Why do we need to pause and resume ingestion?","url":"#why-do-we-need-to-pause-and-resume-ingestion","depth":2}
-22:{"value":"Data Generation","url":"#data-generation","depth":2}
-23:{"value":"Pinot Schema/Table Config","url":"#pinot-schematable-config","depth":2}
-24:{"value":"The Pause/Resume Flow","url":"#the-pauseresume-flow","depth":2}
-25:{"value":"Summary","url":"#summary","depth":2}
-1f:["$20","$21","$22","$23","$24","$25"]
-26:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.11 - Pausing Real-Time Ingestion","datePublished":"2022-11-28T00:00:00.000Z","dateModified":"2022-11-28T00:00:00.000Z","description":"Learn about a feature that lets you pause and resume real-time data ingestion in Apache Pinot","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2022-11-28-Apache-Pinot-Pausing-Real-Time-Ingestion"}
-1b:{"title":"Apache Pinot™ 0.11 - Pausing Real-Time Ingestion","date":"2022-11-28T00:00:00.000Z","tags":"$1c","summary":"Learn about a feature that lets you pause and resume real-time data ingestion in Apache Pinot","authors":"$1d","type":"Blog","readingTime":"$1e","slug":"2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion","customSlug":"2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion","path":"blog/2022/11/28/Apache-Pinot-Pausing-Real-Time-Ingestion","customPath":"blog/2022/11/28/Ap [...]
-28:["Pinot","Data","Analytics","User-Facing Analytics","Timestamp","datetrunc"]
-29:["needham"]
-2a:{"text":"8 min read","minutes":7.77,"time":466200,"words":1554}
-2c:{"value":"Spinning up Pinot","url":"#spinning-up-pinot","depth":2}
-2d:{"value":"Importing Chicago Crime Dataset","url":"#importing-chicago-crime-dataset","depth":2}
-2e:{"value":"Querying crimes by date","url":"#querying-crimes-by-date","depth":2}
-2f:{"value":"Adding the timestamp index","url":"#adding-the-timestamp-index","depth":2}
-30:{"value":"What does a timestamp index do?","url":"#what-does-a-timestamp-index-do","depth":2}
-31:{"value":"Re-running the query","url":"#re-running-the-query","depth":2}
-32:{"value":"Summary","url":"#summary","depth":2}
-2b:["$2c","$2d","$2e","$2f","$30","$31","$32"]
-33:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.11 - Timestamp Indexes","datePublished":"2022-11-22T00:00:00.000Z","dateModified":"2022-11-22T00:00:00.000Z","description":"Users write queries that use the datetrunc function to filter at a coarser grain of functionality. Unfortunately, this approach results in scanning data and time value conversion work that takes a long time at large data volumes. The timestamp index solves that problem!","image":"/ [...]
-27:{"title":"Apache Pinot™ 0.11 - Timestamp Indexes","date":"2022-11-22T00:00:00.000Z","tags":"$28","summary":"Users write queries that use the datetrunc function to filter at a coarser grain of functionality. Unfortunately, this approach results in scanning data and time value conversion work that takes a long time at large data volumes. The timestamp index solves that problem!","authors":"$29","type":"Blog","readingTime":"$2a","slug":"2022/11/22/Apache-Pinot-Timestamp-Indexes","customS [...]
-35:["Pinot","Data","Analytics","User-Facing Analytics","Insert"]
-36:["needham"]
-37:{"text":"4 min read","minutes":3.775,"time":226500,"words":755}
-39:{"value":"Batch importing: The Job Specification","url":"#batch-importing-the-job-specification","depth":2}
-3a:{"value":"Batch Importing with SQL","url":"#batch-importing-with-sql","depth":2}
-3b:{"value":"Summary","url":"#summary","depth":2}
-38:["$39","$3a","$3b"]
-3c:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.11 - Inserts from SQL","datePublished":"2022-11-17T00:00:00.000Z","dateModified":"2022-11-17T00:00:00.000Z","description":"Explore the INSERT INTO clause, which makes ingesting batch data into Pinot as easy as writing a SQL query.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2022-11-17-Apache Pinot-Inserts-from-SQL"}
-34:{"title":"Apache Pinot™ 0.11 - Inserts from SQL","date":"2022-11-17T00:00:00.000Z","tags":"$35","summary":"Explore the INSERT INTO clause, which makes ingesting batch data into Pinot as easy as writing a SQL query.","authors":"$36","type":"Blog","readingTime":"$37","slug":"2022/11/17/Apache Pinot-Inserts-from-SQL","customSlug":"2022/11/17/Apache Pinot-Inserts-from-SQL","path":"blog/2022/11/17/Apache Pinot-Inserts-from-SQL","customPath":"blog/2022/11/17/Apache Pinot-Inserts-from-SQL"," [...]
-3e:["Pinot","Data","Analytics","User-Facing Analytics","Indexes"]
-3f:["needham"]
-40:{"text":"4 min read","minutes":3.79,"time":227400,"words":758}
-42:{"value":"Spinning up Pinot","url":"#spinning-up-pinot","depth":2}
-43:{"value":"Indexing Config","url":"#indexing-config","depth":2}
-44:{"value":"Viewing Indexes","url":"#viewing-indexes","depth":2}
-45:{"value":"Adding an Index","url":"#adding-an-index","depth":2}
-46:{"value":"Summary","url":"#summary","depth":2}
-41:["$42","$43","$44","$45","$46"]
-49:{"@type":"Person","name":"Mark Needham"}
-48:["$49"]
-47:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Apache Pinot™ 0.11 - How do I see my indexes?","datePublished":"2022-11-08T00:00:00.000Z","dateModified":"2022-11-08T00:00:00.000Z","description":"How you can work out which indexes are currently defined on a Pinot table","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2022-11-08-Apache Pinot-How-do-I-see-my-indexes","author":"$48"}
-3d:{"title":"Apache Pinot™ 0.11 - How do I see my indexes?","date":"2022-11-08T00:00:00.000Z","tags":"$3e","summary":"How you can work out which indexes are currently defined on a Pinot table","authors":"$3f","type":"Blog","readingTime":"$40","slug":"2022/11/08/Apache Pinot-How-do-I-see-my-indexes","customSlug":"2022/11/08/Apache Pinot-How-do-I-see-my-indexes","path":"blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes","customPath":"blog/2022/11/08/Apache Pinot-How-do-I-see-my-indexes" [...]
-4a:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/4.html b/blog/page/4.html
deleted file mode 100644
index f1841ba6..00000000
--- a/blog/page/4.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/4.txt b/blog/page/4.txt
deleted file mode 100644
index a68faf6f..00000000
--- a/blog/page/4.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","4","d"],{"children":["__PAGE__?{\"page\":\"4\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Data","Analytics","User-Facing Analytics","interpolation","gapfilling"]
-10:["sun","velusamy"]
-11:{"text":"9 min read","minutes":8.59,"time":515400,"words":1718}
-13:{"value":"Processing time series data in Pinot","url":"#processing-time-series-data-in-pinot","depth":2}
-14:{"value":"Sample Dataset:","url":"#sample-dataset","depth":3}
-15:{"value":"Interpolating missing data","url":"#interpolating-missing-data","depth":2}
-16:{"value":"Gapfill Query with a Use Case:","url":"#gapfill-query-with-a-use-case","depth":2}
-17:{"value":"Query Syntax:","url":"#query-syntax","depth":3}
-18:{"value":"Query components:","url":"#query-components","depth":3}
-19:{"value":"Query Workflow","url":"#query-workflow","depth":3}
-1a:{"value":"Other Supported Query Scenarios:","url":"#other-supported-query-scenarios","depth":3}
-1b:{"value":"How does it work?","url":"#how-does-it-work","depth":2}
-1c:{"value":"Request Flow","url":"#request-flow","depth":3}
-1d:{"value":"Execution Plan","url":"#execution-plan","depth":3}
-1e:{"value":"Time and Space complexity:","url":"#time-and-space-complexity","depth":3}
-1f:{"value":"Challenges","url":"#challenges","depth":3}
-20:{"value":"The Future Work","url":"#the-future-work","depth":2}
-12:["$13","$14","$15","$16","$17","$18","$19","$1a","$1b","$1c","$1d","$1e","$1f","$20"]
-23:{"@type":"Person","name":"Weixiang Sun"}
-24:{"@type":"Person","name":"Lakshmanan Velusamy"}
-22:["$23","$24"]
-21:{"@context":"https://schema.org","@type":"BlogPosting","headline":"GapFill Function For Time-Series Datasets In Pinot","datePublished":"2022-08-02T00:00:00.000Z","dateModified":"2022-08-02T00:00:00.000Z","description":"Gapfilling functions in Pinot to provide the on-the-fly interpolation (filling the missing data) functionality to better handle time-series data.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2022-08-02-GapFill-Function-For-Time-Series- [...]
-e:{"title":"GapFill Function For Time-Series Datasets In Pinot","date":"2022-08-02T00:00:00.000Z","tags":"$f","summary":"Gapfilling functions in Pinot to provide the on-the-fly interpolation (filling the missing data) functionality to better handle time-series data.","authors":"$10","type":"Blog","readingTime":"$11","slug":"2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot","customSlug":"2022/08/02/GapFill-Function-For-Time-Series-Datasets-In-Pinot","path":"blog/2022/08/02/Ga [...]
-26:["Pinot","Data","Analytics","User-Facing Analytics","kafka","streaming","json"]
-27:["herman"]
-28:{"text":"9 min read","minutes":8.935,"time":536100,"words":1787}
-2a:{"value":"The obligatory “What is Apache Pinot and StarTree?” section","url":"#the-obligatory-what-is-apache-pinot-and-startree-section","depth":3}
-2b:{"value":"How to install Kafka alongside Pinot ","url":"#how-to-install-kafka-alongside-pinot","depth":2}
-2c:{"value":"Prerequisite","url":"#prerequisite","depth":3}
-2d:{"value":"Step 1: Install Kafka on your Pinot Docker image","url":"#step-1-install-kafka-on-your-pinot-docker-image","depth":3}
-2e:{"value":"Step 2: Install Kafka on the Docker container","url":"#step-2-install-kafka-on-the-docker-container","depth":3}
-2f:{"value":"Step 3: Ingest data into Kafka","url":"#step-3-ingest-data-into-kafka","depth":3}
-30:{"value":"Step 4: Connect Kafka to Pinot","url":"#step-4-connect-kafka-to-pinot","depth":3}
-31:{"value":"Conclusion","url":"#conclusion","depth":2}
-29:["$2a","$2b","$2c","$2d","$2e","$2f","$30","$31"]
-34:{"@type":"Person","name":"Barkha Herman"}
-33:["$34"]
-32:{"@context":"https://schema.org","@type":"BlogPosting","headline":"How to Ingest Streaming Data from Kafka to Apache Pinot™","datePublished":"2022-05-30T00:00:00.000Z","dateModified":"2022-05-30T00:00:00.000Z","description":"The blog post explains how to use Apache Kafka topics in Apache Pinot to ingest streaming data, with step-by-step instructions provided for installation and setup. It focuses on ingesting Wikipedia events into Kafka and connecting it to Pinot to create a real-time [...]
-25:{"title":"How to Ingest Streaming Data from Kafka to Apache Pinot™","date":"2022-05-30T00:00:00.000Z","tags":"$26","summary":"The blog post explains how to use Apache Kafka topics in Apache Pinot to ingest streaming data, with step-by-step instructions provided for installation and setup. It focuses on ingesting Wikipedia events into Kafka and connecting it to Pinot to create a real-time table. The post highlights Pinot's capabilities in ingesting and transforming JSON data into OLAP  [...]
-36:["Pinot","Data","Analytics","User-Facing Analytics","Releases"]
-37:["pinotdev"]
-38:{"text":"5 min read","minutes":4.975,"time":298500,"words":995}
-3a:{"value":"Query Plans","url":"#query-plans","depth":2}
-3b:{"value":"FILTER Clauses for Aggregates","url":"#filter-clauses-for-aggregates","depth":2}
-3c:{"value":"greatest and least","url":"#greatest-and-least","depth":2}
-3d:{"value":"DistinctCountSmartHLL","url":"#distinctcountsmarthll","depth":2}
-3e:{"value":"UI updates","url":"#ui-updates","depth":2}
-3f:{"value":"RealTimeToOffline Task","url":"#realtimetooffline-task","depth":2}
-40:{"value":"Empty QuickStart","url":"#empty-quickstart","depth":2}
-41:{"value":"Data Ingestion","url":"#data-ingestion","depth":2}
-42:{"value":"Other changes","url":"#other-changes","depth":2}
-43:{"value":"Dependency updates","url":"#dependency-updates","depth":2}
-44:{"value":"Resources","url":"#resources","depth":2}
-39:["$3a","$3b","$3c","$3d","$3e","$3f","$40","$41","$42","$43","$44"]
-45:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Announcing Apache Pinot 0.10","datePublished":"2022-04-04T00:00:00.000Z","dateModified":"2022-04-04T00:00:00.000Z","description":"Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2022-04-04-Announcing-Apache-Pinot-0-10"}
-35:{"title":"Announcing Apache Pinot 0.10","date":"2022-04-04T00:00:00.000Z","tags":"$36","summary":"Learn more about the release of Apache Pinot 0.10 and all of new features that have been included in this version of the product.","authors":"$37","type":"Blog","readingTime":"$38","slug":"2022/04/04/Announcing-Apache-Pinot-0-10","customSlug":"2022/04/04/Announcing-Apache-Pinot-0-10","path":"blog/2022/04/04/Announcing-Apache-Pinot-0-10","customPath":"blog/2022/04/04/Announcing-Apache-Pino [...]
-47:["Pinot","LinkedIn","Data","Text analytics","real-time data platform","Realtime","ThirdEye","Analytics","User-Facing Analytics"]
-48:["linkedin"]
-49:{"text":"1 min read","minutes":0.32,"time":19200,"words":64}
-4a:[]
-4b:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Text analytics on LinkedIn Talent Insights using Apache Pinot","datePublished":"2021-06-16T00:00:00.000Z","dateModified":"2021-06-16T00:00:00.000Z","description":"Introduction 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","image":"/static/images/twitter-card.png","url":"https: [...]
-46:{"title":"Text analytics on LinkedIn Talent Insights using Apache Pinot","date":"2021-06-16T00:00:00.000Z","tags":"$47","summary":"Introduction 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","authors":"$48","type":"Blog","readingTime":"$49","slug":"2021/06/16/LinkedIn-TextAnalytics","customSlug":"2021/06/16/LinkedIn-TextAnalytics","path":"blog [...]
-4d:["Pinot","DevBlog","H3","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-4e:["bastani"]
-4f:{"text":"1 min read","minutes":0.42,"time":25200,"words":84}
-50:[]
-53:{"@type":"Person","name":"Hubert Dulay"}
-52:["$53"]
-51:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introduction to Geospatial Queries in Apache Pinot","datePublished":"2021-06-13T00:00:00.000Z","dateModified":"2021-06-13T00:00:00.000Z","description":"Discuss the challenges of analyzing geospatial at scale and propose the geospatial support in Pinot.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2021-06-13-DevBlog-Geospatial","author":"$52"}
-4c:{"title":"Introduction to Geospatial Queries in Apache Pinot","date":"2021-06-13T00:00:00.000Z","tags":"$4d","summary":"Discuss the challenges of analyzing geospatial at scale and propose the geospatial support in Pinot.","authors":"$4e","type":"Blog","readingTime":"$4f","slug":"2021/06/13/DevBlog-Geospatial","customSlug":"2021/06/13/DevBlog-Geospatial","path":"blog/2021/06/13/DevBlog-Geospatial","customPath":"blog/2021/06/13/DevBlog-Geospatial","filePath":"blog/2021-06-13-DevBlog-Geo [...]
-54:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/5.html b/blog/page/5.html
deleted file mode 100644
index b861fd9e..00000000
--- a/blog/page/5.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/5.txt b/blog/page/5.txt
deleted file mode 100644
index c86a2492..00000000
--- a/blog/page/5.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","5","d"],{"children":["__PAGE__?{\"page\":\"5\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Uber","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-10:["uber"]
-11:{"text":"1 min read","minutes":0.72,"time":43200,"words":144}
-12:[]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Automating Merchant Live Monitoring with Real-Time Analytics - Charon","datePublished":"2021-04-29T00:00:00.000Z","dateModified":"2021-04-29T00:00:00.000Z","description":"Focus on Uber’s real-time data platform components to build a tool called Charon to reduce impact of poor marketplace reliability on the merchants.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2021-04-29-Uber-Charon"}
-e:{"title":"Automating Merchant Live Monitoring with Real-Time Analytics - Charon","date":"2021-04-29T00:00:00.000Z","tags":"$f","summary":"Focus on Uber’s real-time data platform components to build a tool called Charon to reduce impact of poor marketplace reliability on the merchants.","authors":"$10","type":"Blog","readingTime":"$11","slug":"2021/04/29/Uber-Charon","customSlug":"2021/04/29/Uber-Charon","path":"blog/2021/04/29/Uber-Charon","customPath":"blog/2021/04/29/Uber-Charon","fi [...]
-15:["Pinot","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-16:["pinotdev"]
-17:{"text":"1 min read","minutes":0.175,"time":10500,"words":35}
-18:[]
-19:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Deploying Apache Pinot at a Large Retail Chain","datePublished":"2021-04-27T00:00:00.000Z","dateModified":"2021-04-27T00:00:00.000Z","description":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2021-04-27-DevBlog-PinotInRetailChain"}
-14:{"title":"Deploying Apache Pinot at a Large Retail Chain","date":"2021-04-27T00:00:00.000Z","tags":"$15","summary":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","authors":"$16","type":"Blog","readingTime":"$17","slug":"2021/04/27/DevBlog-PinotInRetailChain","customSlug":"2021/04/27/DevBlog-PinotInRetailChain","path":"blog/2021/04/27/DevBlog-PinotInRetailChain","customPath":"blog/2021/04/27/DevBlog-Pi [...]
-1b:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-1c:["linkedin"]
-1d:{"text":"1 min read","minutes":0.205,"time":12300,"words":41}
-1e:[]
-21:{"@type":"Person","name":"LinkedIn Engineering Team"}
-20:["$21"]
-1f:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches","datePublished":"2021-04-16T00:00:00.000Z","dateModified":"2021-04-16T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertisi [...]
-1a:{"title":"Solving for the cardinality of set intersection at scale with Pinot and Theta Sketches","date":"2021-04-16T00:00:00.000Z","tags":"$1b","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$1c","type":"Blog","readingTime":"$1d","slug":"2021/04/16/LinkedIn-Theta", [...]
-23:["Pinot","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-24:["bastani"]
-25:{"text":"1 min read","minutes":0.32,"time":19200,"words":64}
-26:[]
-27:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Using Apache Pinot and Kafka to Analyze GitHub Events","datePublished":"2021-04-10T00:00:00.000Z","dateModified":"2021-04-10T00:00:00.000Z","description":"Show you how Pinot and Kafka can be used together to ingest, query, and visualize event streams sourced from the public GitHub API.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-04-10-DevBlog-AnalyzeGitEvents"}
-22:{"title":"Using Apache Pinot and Kafka to Analyze GitHub Events","date":"2021-04-10T00:00:00.000Z","tags":"$23","summary":"Show you how Pinot and Kafka can be used together to ingest, query, and visualize event streams sourced from the public GitHub API.","authors":"$24","type":"Blog","readingTime":"$25","slug":"2020/04/10/DevBlog-AnalyzeGitEvents","customSlug":"2020/04/10/DevBlog-AnalyzeGitEvents","path":"blog/2020/04/10/DevBlog-AnalyzeGitEvents","customPath":"blog/2020/04/10/DevBlog [...]
-29:["Pinot","DevBlog","Upsert","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-2a:["bastani"]
-2b:{"text":"1 min read","minutes":0.465,"time":27900,"words":93}
-2c:[]
-2d:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introduction to Upserts in Apache Pinot","datePublished":"2021-04-08T00:00:00.000Z","dateModified":"2021-04-08T00:00:00.000Z","description":"Introduction to Pinot Upsert and explain why it’s exciting and how you can start using it.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2021-04-08-DevBlog-UpsertsIntro"}
-28:{"title":"Introduction to Upserts in Apache Pinot","date":"2021-04-08T00:00:00.000Z","tags":"$29","summary":"Introduction to Pinot Upsert and explain why it’s exciting and how you can start using it.","authors":"$2a","type":"Blog","readingTime":"$2b","slug":"2021/04/08/DevBlog-UpsertsIntro","customSlug":"2021/04/08/DevBlog-UpsertsIntro","path":"blog/2021/04/08/DevBlog-UpsertsIntro","customPath":"blog/2021/04/08/DevBlog-UpsertsIntro","filePath":"blog/2021-04-08-DevBlog-UpsertsIntro.mdx [...]
-2e:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/6.html b/blog/page/6.html
deleted file mode 100644
index f36ae10c..00000000
--- a/blog/page/6.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/6.txt b/blog/page/6.txt
deleted file mode 100644
index c7b6d9ed..00000000
--- a/blog/page/6.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","6","d"],{"children":["__PAGE__?{\"page\":\"6\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Presto","Trino","PrestoSQL","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-10:["pinotdev"]
-11:{"text":"1 min read","minutes":0.31,"time":18600,"words":62}
-12:[]
-15:{"@type":"Person","name":"Pinot Dev"}
-14:["$15"]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Real-time Analytics with Presto and Apache Pinot","datePublished":"2021-02-02T00:00:00.000Z","dateModified":"2021-02-02T00:00:00.000Z","description":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2021-02-02-DevBlog-PrestoPinot","author":"$14"}
-e:{"title":"Real-time Analytics with Presto and Apache Pinot","date":"2021-02-02T00:00:00.000Z","tags":"$f","summary":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","authors":"$10","type":"Blog","readingTime":"$11","slug":"2021/02/02/DevBlog-PrestoPinot","customSlug":"2021/02/02/DevBlog-PrestoPinot","path":"blog/2021/02/02/DevBlog-PrestoPinot","customPath":"blog/2021/02/02/DevBlog-PrestoPinot","filePath" [...]
-17:["Pinot","DevBlog","Debezium","CDC","Change Data Analysis","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-18:["bastani"]
-19:{"text":"1 min read","minutes":0.21,"time":12600,"words":42}
-1a:[]
-1b:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Change Data Analysis with Debezium and Apache Pinot","datePublished":"2021-01-08T00:00:00.000Z","dateModified":"2021-01-08T00:00:00.000Z","description":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people around the world navigate their careers.","image":"/s [...]
-16:{"title":"Change Data Analysis with Debezium and Apache Pinot","date":"2021-01-08T00:00:00.000Z","tags":"$17","summary":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people around the world navigate their careers.","authors":"$18","type":"Blog","readingTime":"$19","slug":"2021/01/08/DevBlog-DebeziumCDC","customSlug":"2021/0 [...]
-1d:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-1e:["linkedin"]
-1f:{"text":"1 min read","minutes":0.205,"time":12300,"words":41}
-20:[]
-23:{"@type":"Person","name":"LinkedIn Engineering Team"}
-22:["$23"]
-21:{"@context":"https://schema.org","@type":"BlogPosting","headline":"From Lambda to Lambda-less Lessons learned","datePublished":"2020-12-01T00:00:00.000Z","dateModified":"2020-12-01T00:00:00.000Z","description":"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.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.or [...]
-1c:{"title":"From Lambda to Lambda-less Lessons learned","date":"2020-12-01T00:00:00.000Z","tags":"$1d","summary":"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.","authors":"$1e","type":"Blog","readingTime":"$1f","slug":"2020/12/01/LinkedIn-Lamda","customSlug":"2020/12/01/LinkedIn-Lamda","path":"blog/2020/12/01/LinkedIn-Lamda","cust [...]
-25:["Pinot","Uber","real-time data platform","Realtime","Analytics","User-Facing Analytics","financial intelligence"]
-26:["uber"]
-27:{"text":"1 min read","minutes":0.435,"time":26100,"words":87}
-28:[]
-29:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Operating Apache Pinot at Uber Scale","datePublished":"2020-10-20T00:00:00.000Z","dateModified":"2020-10-20T00:00:00.000Z","description":"Present details of this platform and how it fits in Uber’s ecosystem. Explain how uber scaled from a few use cases to a multi-cluster powering hundreds of use cases for querying terabyte-scale data with millisecond latencies.","image":"/static/images/twitter-card.png","url":"https:// [...]
-24:{"title":"Operating Apache Pinot at Uber Scale","date":"2020-10-20T00:00:00.000Z","tags":"$25","summary":"Present details of this platform and how it fits in Uber’s ecosystem. Explain how uber scaled from a few use cases to a multi-cluster powering hundreds of use cases for querying terabyte-scale data with millisecond latencies.","authors":"$26","type":"Blog","readingTime":"$27","slug":"2020/10/20/Uber-Operating","customSlug":"2020/10/20/Uber-Operating","path":"blog/2020/10/20/Uber-O [...]
-2b:["Pinot","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-2c:["bastani"]
-2d:{"text":"1 min read","minutes":0.41,"time":24600,"words":82}
-2e:[]
-2f:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Deep Analysis of Russian Twitter Trolls","datePublished":"2020-10-16T00:00:00.000Z","dateModified":"2020-10-16T00:00:00.000Z","description":"Show you how to use Apache Pinot and Superset to analyze 3 million tweets by the Internet Research Agency (IRA) open-sourced by FiveThirtyEight.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-10-16-DevBlog-TwitterTrollAnalysis"}
-2a:{"title":"Deep Analysis of Russian Twitter Trolls","date":"2020-10-16T00:00:00.000Z","tags":"$2b","summary":"Show you how to use Apache Pinot and Superset to analyze 3 million tweets by the Internet Research Agency (IRA) open-sourced by FiveThirtyEight.","authors":"$2c","type":"Blog","readingTime":"$2d","slug":"2020/10/16/DevBlog-TwitterTrollAnalysis","customSlug":"2020/10/16/DevBlog-TwitterTrollAnalysis","path":"blog/2020/10/16/DevBlog-TwitterTrollAnalysis","customPath":"blog/2020/10 [...]
-30:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/7.html b/blog/page/7.html
deleted file mode 100644
index 982f5f81..00000000
--- a/blog/page/7.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/7.txt b/blog/page/7.txt
deleted file mode 100644
index 9436b6da..00000000
--- a/blog/page/7.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","7","d"],{"children":["__PAGE__?{\"page\":\"7\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","SLA","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-10:["pinotdev"]
-11:{"text":"1 min read","minutes":0.415,"time":24900,"words":83}
-12:[]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Leverage Plugins to Ingest Parquet Files from S3 in Pinot","datePublished":"2020-08-08T00:00:00.000Z","dateModified":"2020-08-08T00:00:00.000Z","description":"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.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-08-08- [...]
-e:{"title":"Leverage Plugins to Ingest Parquet Files from S3 in Pinot","date":"2020-08-08T00:00:00.000Z","tags":"$f","summary":"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.","authors":"$10","type":"Blog","readingTime":"$11","slug":"2020/08/08/DevBlog-IngestPlugins","customSlug":"2020/08/08/DevBlog-IngestPlugins","path":"blog/2020/08/08/DevBlog-IngestPlugins","cus [...]
-15:["Pinot","Monitoring","JMX","Prometheus","Grafana","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-16:["pinotdev"]
-17:{"text":"1 min read","minutes":0.275,"time":16500,"words":55}
-18:[]
-1b:{"@type":"Person","name":"Pinot Dev"}
-1a:["$1b"]
-19:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Monitoring Apache Pinot with JMX, Prometheus and Grafana","datePublished":"2020-08-08T00:00:00.000Z","dateModified":"2020-08-08T00:00:00.000Z","description":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-08-08-DevBlog-PinotMonitoring","author":"$1a"}
-14:{"title":"Monitoring Apache Pinot with JMX, Prometheus and Grafana","date":"2020-08-08T00:00:00.000Z","tags":"$15","summary":"Blog gives an overview of our use of Apache Pinot to solve some of biggest challenges around Data Analytics in Large Retail Chain","authors":"$16","type":"Blog","readingTime":"$17","slug":"2020/08/08/DevBlog-PinotMonitoring","customSlug":"2020/08/08/DevBlog-PinotMonitoring","path":"blog/2020/08/08/DevBlog-PinotMonitoring","customPath":"blog/2020/08/08/DevBlog-P [...]
-1d:["Pinot","SLA","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-1e:["pinotdev"]
-1f:{"text":"1 min read","minutes":0.19,"time":11400,"words":38}
-20:[]
-21:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Achieving 99th percentile latency SLA using Apache Pinot","datePublished":"2020-08-08T00:00:00.000Z","dateModified":"2020-08-08T00:00:00.000Z","description":"How users can build critical site-facing analytical applications requiring high throughput and strict p99th query latency SLA","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-08-08-DevBlog-SLAApps"}
-1c:{"title":"Achieving 99th percentile latency SLA using Apache Pinot","date":"2020-08-08T00:00:00.000Z","tags":"$1d","summary":"How users can build critical site-facing analytical applications requiring high throughput and strict p99th query latency SLA","authors":"$1e","type":"Blog","readingTime":"$1f","slug":"2020/08/08/DevBlog-SLAApps","customSlug":"2020/08/08/DevBlog-SLAApps","path":"blog/2020/08/08/DevBlog-SLAApps","customPath":"blog/2020/08/08/DevBlog-SLAApps","filePath":"blog/202 [...]
-23:["Pinot","SLA","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-24:["pinotdev"]
-25:{"text":"1 min read","minutes":0.51,"time":30600,"words":102}
-26:[]
-27:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Utilize UDFs to Supercharge Queries in Apache Pinot","datePublished":"2020-08-08T00:00:00.000Z","dateModified":"2020-08-08T00:00:00.000Z","description":"Scalar Functions that allow users to write and add their functions as a plugin.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-08-08-DevBlog-ScalarUDFs"}
-22:{"title":"Utilize UDFs to Supercharge Queries in Apache Pinot","date":"2020-08-08T00:00:00.000Z","tags":"$23","summary":"Scalar Functions that allow users to write and add their functions as a plugin.","authors":"$24","type":"Blog","readingTime":"$25","slug":"2020/08/08/DevBlog-ScalarUDFs","customSlug":"2020/08/08/DevBlog-ScalarUDFs","path":"blog/2020/08/08/DevBlog-ScalarUDFs","customPath":"blog/2020/08/08/DevBlog-ScalarUDFs","filePath":"blog/2020-08-08-DevBlog-ScalarUDFs.mdx","toc":" [...]
-29:["Pinot","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-2a:["bastani"]
-2b:{"text":"1 min read","minutes":0.475,"time":28500,"words":95}
-2c:[]
-2f:{"@type":"Person","name":"Hubert Dulay"}
-2e:["$2f"]
-2d:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Building a culture around metrics and anomaly detection","datePublished":"2020-07-28T00:00:00.000Z","dateModified":"2020-07-28T00:00:00.000Z","description":"ThirdEye as a system is a platform that allows you to integrate your metrics (quantitative information) with events (knowledge or qualitative information) and combine the two so you can distinguish between meaningless anomalies and those ones that matter.","image": [...]
-28:{"title":"Building a culture around metrics and anomaly detection","date":"2020-07-28T00:00:00.000Z","tags":"$29","summary":"ThirdEye as a system is a platform that allows you to integrate your metrics (quantitative information) with events (knowledge or qualitative information) and combine the two so you can distinguish between meaningless anomalies and those ones that matter.","authors":"$2a","type":"Blog","readingTime":"$2b","slug":"2020/07/28/DevBlog-AnomalyDetection","customSlug" [...]
-30:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/8.html b/blog/page/8.html
deleted file mode 100644
index 395a811f..00000000
--- a/blog/page/8.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/8.txt b/blog/page/8.txt
deleted file mode 100644
index 58a8615f..00000000
--- a/blog/page/8.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","8","d"],{"children":["__PAGE__?{\"page\":\"8\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","DevBlog","ThirdEye","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-10:["bastani"]
-11:{"text":"1 min read","minutes":0.425,"time":25500,"words":85}
-12:[]
-15:{"@type":"Person","name":"Hubert Dulay"}
-14:["$15"]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Moving developers up the stack with Apache Pinot","datePublished":"2020-07-28T00:00:00.000Z","dateModified":"2020-07-28T00:00:00.000Z","description":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people around the world navigate their careers.","image":"/stat [...]
-e:{"title":"Moving developers up the stack with Apache Pinot","date":"2020-07-28T00:00:00.000Z","tags":"$f","summary":"Pinot enters into a storied legacy of innovations that have emerged from one of the world’s largest online social networks. Over a few decades, the Silicon Valley tech giant has helped hundreds of millions of people around the world navigate their careers.","authors":"$10","type":"Blog","readingTime":"$11","slug":"2020/07/28/DevBlog-DevUpStack","customSlug":"2020/07/28/D [...]
-17:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-18:["linkedin"]
-19:{"text":"1 min read","minutes":0.205,"time":12300,"words":41}
-1a:[]
-1d:{"@type":"Person","name":"LinkedIn Engineering Team"}
-1c:["$1d"]
-1b:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Bridging batch and stream processing for the Recruiter usage statistics dashboard","datePublished":"2020-07-14T00:00:00.000Z","dateModified":"2020-07-14T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising ca [...]
-16:{"title":"Bridging batch and stream processing for the Recruiter usage statistics dashboard","date":"2020-07-14T00:00:00.000Z","tags":"$17","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$18","type":"Blog","readingTime":"$19","slug":"2020/07/14/LinkedIn-BatchRealtim [...]
-1f:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-20:["linkedin"]
-21:{"text":"1 min read","minutes":0.185,"time":11100,"words":37}
-22:[]
-23:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Building LinkedIn Talent Insights to democratize data-driven decision making","datePublished":"2020-06-29T00:00:00.000Z","dateModified":"2020-06-29T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaig [...]
-1e:{"title":"Building LinkedIn Talent Insights to democratize data-driven decision making","date":"2020-06-29T00:00:00.000Z","tags":"$1f","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$20","type":"Blog","readingTime":"$21","slug":"2020/06/29/LinkedIn-TalentInsight","c [...]
-25:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-26:["linkedin"]
-27:{"text":"1 min read","minutes":0.22,"time":13200,"words":44}
-28:[]
-29:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Monitoring business performance data with ThirdEye smart alerts","datePublished":"2020-06-25T00:00:00.000Z","dateModified":"2020-06-25T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","image":" [...]
-24:{"title":"Monitoring business performance data with ThirdEye smart alerts","date":"2020-06-25T00:00:00.000Z","tags":"$25","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$26","type":"Blog","readingTime":"$27","slug":"2020/06/25/LinkedIn-SmartAlerts","customSlug":"202 [...]
-2b:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-2c:["linkedin"]
-2d:{"text":"1 min read","minutes":0.175,"time":10500,"words":35}
-2e:[]
-2f:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Analyzing anomalies with ThirdEye","datePublished":"2020-02-20T00:00:00.000Z","dateModified":"2020-02-20T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","image":"/static/images/twitter-card.pn [...]
-2a:{"title":"Analyzing anomalies with ThirdEye","date":"2020-02-20T00:00:00.000Z","tags":"$2b","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$2c","type":"Blog","readingTime":"$2d","slug":"2020/02/20/LinkedIn-Thirdeye","customSlug":"2020/02/20/LinkedIn-Thirdeye","path" [...]
-30:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/blog/page/9.html b/blog/page/9.html
deleted file mode 100644
index 5694c870..00000000
--- a/blog/page/9.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/2348a33ca3156e53.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ad33cf4 [...]
\ No newline at end of file
diff --git a/blog/page/9.txt b/blog/page/9.txt
deleted file mode 100644
index 493410b3..00000000
--- a/blog/page/9.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/2348a33ca3156e53.css","style",{"crossOrigin":""}]
-0:["bzIDbp42Ce9Ciwa_jtIfh",[[["",{"children":["blog",{"children":["page",{"children":[["page","9","d"],{"children":["__PAGE__?{\"page\":\"9\"}",{}]}]}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2348a33ca3156e53.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","966","static/chunks/966-805f43b9d15f5094.js","185","static/chunks/app/layout-ce2fa075a6ed4b53.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","404","static/chunks/app/blog/page-c756fc3b03b27366.js"],""]
-d:I[4066,["326","static/chunks/326-3a90a6443b9c824c.js","557","static/chunks/557-a30b793d05ebcf34.js","107","static/chunks/app/blog/page/%5Bpage%5D/page-44b13dcda374a138.js"],""]
-f:["Pinot","Uber","real-time data platform","Realtime","Analytics","User-Facing Analytics","Presto","SQL"]
-10:["uber"]
-11:{"text":"1 min read","minutes":0.42,"time":25200,"words":84}
-12:[]
-13:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Engineering SQL Support on Apache Pinot at Uber","datePublished":"2020-01-15T00:00:00.000Z","dateModified":"2020-01-15T00:00:00.000Z","description":"Talks about solution that linked Presto, a query engine that supports full ANSI SQL, and Pinot, a real-time OLAP (online analytical processing) datastore.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2020-01-15-Pinot-Presto-SQL"}
-e:{"title":"Engineering SQL Support on Apache Pinot at Uber","date":"2020-01-15T00:00:00.000Z","tags":"$f","summary":"Talks about solution that linked Presto, a query engine that supports full ANSI SQL, and Pinot, a real-time OLAP (online analytical processing) datastore.","authors":"$10","type":"Blog","readingTime":"$11","slug":"2020/01/15/Pinot-Presto-SQL","customSlug":"2020/01/15/Pinot-Presto-SQL","path":"blog/2020/01/15/Pinot-Presto-SQL","customPath":"blog/2020/01/15/Pinot-Presto-SQL [...]
-15:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-16:["linkedin"]
-17:{"text":"1 min read","minutes":0.24,"time":14400,"words":48}
-18:[]
-1b:{"@type":"Person","name":"LinkedIn Engineering Team"}
-1a:["$1b"]
-19:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Auto-tuning Pinot real-time consumption","datePublished":"2019-07-11T00:00:00.000Z","dateModified":"2019-07-11T00:00:00.000Z","description":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","image":"/static/images/twitter-c [...]
-14:{"title":"Auto-tuning Pinot real-time consumption","date":"2019-07-11T00:00:00.000Z","tags":"$15","summary":"Focus on using large set intersection cardinality approximations with Apache Pinot and Theta Sketches, which allow us to efficiently figure out the unique size of a targeted audience when factoring in multiple criteria of an advertising campaign.","authors":"$16","type":"Blog","readingTime":"$17","slug":"2019/07/11/LinkedIn-AutoTune","customSlug":"2019/07/11/LinkedIn-AutoTune", [...]
-1d:["Pinot","LinkedIn","real-time data platform","Realtime","Analytics","User-Facing Analytics"]
-1e:["linkedin"]
-1f:{"text":"1 min read","minutes":0.175,"time":10500,"words":35}
-20:[]
-21:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Star-tree index - Powering fast aggregations on Pinot","datePublished":"2019-06-14T00:00:00.000Z","dateModified":"2019-06-14T00:00:00.000Z","description":"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.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2019-06-14-LinkedIn-StarTree"}
-1c:{"title":"Star-tree index - Powering fast aggregations on Pinot","date":"2019-06-14T00:00:00.000Z","tags":"$1d","summary":"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.","authors":"$1e","type":"Blog","readingTime":"$1f","slug":"2019/06/14/LinkedIn-StarTree","customSlug":"2019/06/14/LinkedIn-StarTree","path":"blog/2019/06/14/LinkedIn-StarTree","customPath":"blog/2019/06/14/ [...]
-23:["Pinot","LinkedIn","real-time data platform","Realtime","ThirdEye","Analytics","User-Facing Analytics"]
-24:["linkedin"]
-25:{"text":"1 min read","minutes":0.28,"time":16800,"words":56}
-26:[]
-27:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform","datePublished":"2019-01-09T00:00:00.000Z","dateModified":"2019-01-09T00:00:00.000Z","description":"ThirdEye is a comprehensive platform for real-time monitoring of metrics that covers a wide variety of use-cases.","image":"/static/images/twitter-card.png","url":"https://pinot.apache.org/blog/2019-01-09-LinkedIn-IntroThirdEye"}
-22:{"title":"Introducing ThirdEye - LinkedIn’s Business-Wide Monitoring Platform","date":"2019-01-09T00:00:00.000Z","tags":"$23","summary":"ThirdEye is a comprehensive platform for real-time monitoring of metrics that covers a wide variety of use-cases.","authors":"$24","type":"Blog","readingTime":"$25","slug":"2019/01/09/LinkedIn-IntroThirdEye","customSlug":"2019/01/09/LinkedIn-IntroThirdEye","path":"blog/2019/01/09/LinkedIn-IntroThirdEye","customPath":"blog/2019/01/09/LinkedIn-IntroThi [...]
-29:["Pinot","Uber Data","real-time data platform","Realtime","Analytics","User-Facing Analytics","financial intelligence"]
-2a:["uber"]
-2b:{"text":"1 min read","minutes":0.35,"time":21000,"words":70}
-2c:[]
-2d:{"@context":"https://schema.org","@type":"BlogPosting","headline":"Engineering Restaurant Manager - UberEATS Analytics Dashboard","datePublished":"2017-09-17T00:00:00.000Z","dateModified":"2017-09-17T00:00:00.000Z","description":"Restaurant Manager is a comprehensive analytics dashboard and pipeline for our restaurant partners. In this article, we discuss how we architected this analytics platform and its robust data pipeline.","image":"/static/images/twitter-card.png","url":"https:// [...]
-28:{"title":"Engineering Restaurant Manager - UberEATS Analytics Dashboard","date":"2017-09-17T00:00:00.000Z","tags":"$29","summary":"Restaurant Manager is a comprehensive analytics dashboard and pipeline for our restaurant partners. In this article, we discuss how we architected this analytics platform and its robust data pipeline.","authors":"$2a","type":"Blog","readingTime":"$2b","slug":"2017/09/17/Restaurant-Manager","customSlug":"2017/09/17/Restaurant-Manager","path":"blog/2017/09/1 [...]
-2e:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315  [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Posts | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical"," [...]
-c:null
diff --git a/download.html b/download.html
deleted file mode 100644
index 77b7cf75..00000000
--- a/download.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac [...]
\ No newline at end of file
diff --git a/download.txt b/download.txt
deleted file mode 100644
index d36e55db..00000000
--- a/download.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["download",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-8:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","40","static/chunks/app/download/page-8bd0e1bf028d6783.js"],""]
-d:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Download | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical [...]
-c:null
diff --git a/powered-by.html b/powered-by.html
deleted file mode 100644
index 3f7d8c2d..00000000
--- a/powered-by.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en-us" class="__variable_1fc36d scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/6905431624c34d00-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9e925a33b1acdac1.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac [...]
\ No newline at end of file
diff --git a/powered-by.txt b/powered-by.txt
deleted file mode 100644
index 49c63918..00000000
--- a/powered-by.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["powered-by",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-8:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","760","static/chunks/app/powered-by/page-69b90105dce3b9dd.js"],""]
-d:I[413,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","760","static/chunks/app/powered-by/page-69b90105dce3b9dd.js"],"Image"]
-e:I[6282,["326","static/chunks/326-3a90a6443b9c824c.js","413","static/chunks/413-f9f40b83f7bb3f22.js","760","static/chunks/app/powered-by/page-69b90105dce3b9dd.js"],""]
-f:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Powered By | Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonic [...]
-c:null
diff --git a/who-uses.html b/who-uses.html
deleted file mode 100644
index d3fb4b98..00000000
--- a/who-uses.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac7c1b4eb4b.js" crossorigin=""/><script src="/_next/static/chunks/fd9d1056-f172993f20f9bb67.js" async="" crossorigin=""></script><script src="/_next/static/chunks/472-928e738895d89765.js" async="" crossorigin=""></script><script src="/_next/static/chunks/main-a [...]
\ No newline at end of file
diff --git a/who-uses.txt b/who-uses.txt
deleted file mode 100644
index 10a1f42f..00000000
--- a/who-uses.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["0MnRvGiIwUeCGCNL-u1ot",[[["",{"children":["who-uses",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-776a485845c720ef.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-776a485845c720ef.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-776a485845c720ef.js"],"AlgoliaSearchProvider"]
-8:I[7975,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-776a485845c720ef.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-776a485845c720ef.js"],""]
-e:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical","href":"h [...]
-d:E{"digest":"NEXT_REDIRECT;replace;/powered-by;true"}
-c:null
diff --git a/who_uses.html b/who_uses.html
deleted file mode 100644
index c3b1abfc..00000000
--- a/who_uses.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dde39ac7c1b4eb4b.js" crossorigin=""/><script src="/_next/static/chunks/fd9d1056-f172993f20f9bb67.js" async="" crossorigin=""></script><script src="/_next/static/chunks/472-928e738895d89765.js" async="" crossorigin=""></script><script src="/_next/static/chunks/main-a [...]
\ No newline at end of file
diff --git a/who_uses.txt b/who_uses.txt
deleted file mode 100644
index 65bc3ad3..00000000
--- a/who_uses.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-1:HL["/_next/static/media/6905431624c34d00-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
-2:HL["/_next/static/css/9e925a33b1acdac1.css","style",{"crossOrigin":""}]
-0:["FNuVbAej6fAs5FPq8cvYT",[[["",{"children":["who_uses",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9e925a33b1acdac1.css","precedence":"next","crossOrigin":""}]],"$L4"]]]]
-5:I[7821,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"ThemeProviders"]
-6:I[3994,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-7:I[9640,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],"AlgoliaSearchProvider"]
-8:I[4287,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-9:I[6954,[],""]
-a:I[7264,[],""]
-b:I[8326,["326","static/chunks/326-3a90a6443b9c824c.js","980","static/chunks/980-6e243f9cd384c7d2.js","702","static/chunks/702-a2bf9fe707814b79.js","185","static/chunks/app/layout-0109a6e83db9b0af.js"],""]
-e:T9fe,M42.99 18.448c1.032-.553 2.21-.831 3.535-.831 1.542 0 2.938.38 4.187 1.14 1.248.76 2.236 1.841 2.965 3.241.728 1.402 1.091 3.025 1.091 4.872s-.363 3.482-1.091 4.903c-.729 1.424-1.717 2.525-2.965 3.307-1.25.782-2.645 1.173-4.187 1.173-1.325 0-2.493-.271-3.503-.815-1.01-.543-1.83-1.226-2.46-2.053v14.612H36V17.912h4.562v2.606c.586-.825 1.395-1.515 2.426-2.068l.002-.002m6.452 5.605c-.445-.793-1.032-1.395-1.76-1.808a4.72 4.72 0 0 0-2.362-.618c-.847 0-1.602.211-2.33.635-.728.423-1.315 1 [...]
-4:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Apache Pinot™"}],["$","meta","3",{"name":"description","content":"Realtime distributed OLAP datastore"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical","href":"h [...]
-d:E{"digest":"NEXT_REDIRECT;replace;/powered-by;true"}
-c:null


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org