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

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/drill-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 73ba196cb Automatic Site Publish by Buildbot
73ba196cb is described below

commit 73ba196cb24890e395c2044ab9618187d889ca2d
Author: buildbot <[email protected]>
AuthorDate: Fri Mar 3 11:57:22 2023 +0000

    Automatic Site Publish by Buildbot
---
 .../2023/03/02/drill-1.21.0-released/index.html    | 261 +++++++++++++++++++++
 output/blog/index.html                             |   5 +
 .../aggregate-and-aggregate-statistical/index.html |  47 ++--
 output/docs/statistical/index.html                 |   4 +-
 output/feed.xml                                    | 105 +++++++--
 output/index.html                                  |   4 +-
 .../2023/03/02/drill-1.21.0-released/index.html    | 261 +++++++++++++++++++++
 output/zh/blog/index.html                          |   5 +
 .../aggregate-and-aggregate-statistical/index.html |  47 ++--
 output/zh/docs/statistical/index.html              |   4 +-
 output/zh/feed.xml                                 | 105 +++++++--
 output/zh/index.html                               |   4 +-
 12 files changed, 758 insertions(+), 94 deletions(-)

diff --git a/output/blog/2023/03/02/drill-1.21.0-released/index.html 
b/output/blog/2023/03/02/drill-1.21.0-released/index.html
new file mode 100644
index 000000000..746be6ea9
--- /dev/null
+++ b/output/blog/2023/03/02/drill-1.21.0-released/index.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+
+<meta charset="UTF-8">
+<meta name=viewport content="width=device-width, initial-scale=1">
+
+
+<title>Announcing Drill 1.21! - Apache Drill</title>
+
+<link 
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css";
 rel="stylesheet" type="text/css"/>
+<link href="/css/site.css" rel="stylesheet" type="text/css"/>
+
+<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
+<link rel="icon" href="/favicon.ico" type="image/x-icon"/>
+
+<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"; 
language="javascript" type="text/javascript"></script>
+<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js";
 language="javascript" type="text/javascript"></script>
+<script language="javascript" type="text/javascript" 
src="/js/modernizr.custom.js"></script>
+<script language="javascript" type="text/javascript" 
src="/js/script.js"></script>
+<script language="javascript" type="text/javascript" 
src="/js/drill.js"></script>
+
+</head>
+
+
+<body onResize="resized();">
+  <div class="page-wrap">
+    <div class="bui"></div>
+
+<div id="menu" class="mw">
+<ul>
+  <li class='toc-categories'>
+  <a class="expand-toc-icon" href="javascript:void(0);"><i class="fa 
fa-bars"></i></a>
+  </li>
+  <li class="logo"><a href="/"></a></li>
+  <li class='expand-menu'>
+  <a href="javascript:void(0);"><span class='menu-text'>Menu</span><span 
class='expand-icon'><i class="fa fa-bars"></i></span></a>
+  </li>
+  <li class="clear-float"></li>
+  <li class="nav">
+       <a>Language</a>
+       <ul>
+               
+               <li>
+                       <a style="font-weight: bold;" 
href="/blog/2023/03/02/drill-1.21.0-released/" >en</a>
+               </li>
+               
+               <li>
+                       <a  href="/zh/blog/2023/03/02/drill-1.21.0-released/" 
>zh</a>
+               </li>
+               
+       </ul>
+  </li>
+  <li class="apache-link">
+    <a href="/apacheASF/">Apache</a>
+  </li>
+  <li class="poweredby">
+    <a href="/poweredBy">Powered By</a>
+  </li>
+  <li class="documentation-menu">
+    <a href="/docs/">Documentation</a>
+    <ul>
+         
+      
+        <li><a href="/docs/getting-started/">Getting Started</a></li>
+      
+        <li><a href="/docs/architecture/">Architecture</a></li>
+      
+        <li><a href="/docs/tutorials/">Tutorials</a></li>
+      
+        <li><a href="/docs/drill-on-yarn/">Drill-on-YARN</a></li>
+      
+        <li><a href="/docs/install-drill/">Install Drill</a></li>
+      
+        <li><a href="/docs/configure-drill/">Configure Drill</a></li>
+      
+        <li><a href="/docs/connect-a-data-source/">Connect a Data 
Source</a></li>
+      
+        <li><a href="/docs/odbc-jdbc-interfaces/">ODBC/JDBC Interfaces</a></li>
+      
+        <li><a href="/docs/query-data/">Query Data</a></li>
+      
+        <li><a href="/docs/performance-tuning/">Performance Tuning</a></li>
+      
+        <li><a href="/docs/log-and-debug/">Log and Debug</a></li>
+      
+        <li><a href="/docs/sql-reference/">SQL Reference</a></li>
+      
+        <li><a href="/docs/data-sources-and-file-formats/">Data Sources and 
File Formats</a></li>
+      
+        <li><a href="/docs/develop-custom-functions/">Develop Custom 
Functions</a></li>
+      
+        <li><a href="/docs/troubleshooting/">Troubleshooting</a></li>
+      
+        <li><a href="/docs/developer-information/">Developer 
Information</a></li>
+      
+        <li><a href="/docs/release-notes/">Release Notes</a></li>
+      
+        <li><a href="/docs/sample-datasets/">Sample Datasets</a></li>
+      
+        <li><a href="/docs/project-bylaws/">Project Bylaws</a></li>
+      
+        <li><a href="/docs/ecosystem/">Ecosystem</a></li>
+      
+    </ul>
+  </li>
+  <li class='nav'>
+    <a href="/community-resources/">Community</a>
+    <ul>
+      <li><a href="/team/">Team</a></li>
+      <li><a href="/mailinglists/">Mailing Lists</a></li>
+      <li><a href="/community-resources/">Community Resources</a></li>
+    </ul>
+  </li>
+  <li class='nav'><a href="/faq/">FAQ</a></li>
+  <li class='nav'><a href="/blog/">Blog</a></li>
+  <li class="social-menu-item"><a href="https://twitter.com/apachedrill"; 
title="apachedrill on twitter" target="_blank"><img 
src="/images/twitter_32_26_white.png" alt="twitter logo" align="center"></a> 
</li>
+  <li class="social-menu-item"><a 
href="https://join.slack.com/t/apache-drill/shared_invite/enQtNTQ4MjM1MDA3MzQ2LTJlYmUxMTRkMmUwYmQ2NTllYmFmMjU4MDk0NjYwZjBmYjg0MDZmOTE2ZDg0ZjBlYmI3Yjc4Y2I2NTQyNGVlZTc";
 title="Apache Drill Slack channels"
+      target="_blank"><img src="/images/slack-logo.svg" alt="Slack logo" 
align="center"></a> </li>
+  <li class='search-bar'>
+    <form id="drill-search-form">
+      <input type="text" placeholder="Search Apache Drill" 
id="drill-search-term" />
+      <button type="submit">
+        <i class="fa fa-search"></i>
+      </button>
+    </form>
+  </li>
+  <li class="d">
+    <a href="/download/">
+      <i class="fa fa-cloud-download"></i> Download
+    </a>
+  </li>
+</ul>
+</div>
+
+    <link href="/css/content.css" rel="stylesheet" type="text/css">
+
+<div class="post int_text">
+  <header class="post-header">
+    <div class="int_title">
+      <h1 class="post-title">Announcing Drill 1.21!</h1>
+    </div>
+    <p class="post-meta">
+    
+      
+      
+      <strong>Author:</strong> Charles Givre (PMC Chair and Committer, Apache 
Drill)<br />
+    
+<strong>Date:</strong> Mar 2, 2023
+</p>
+  </header>
+  <div class="addthis_sharing_toolbox"></div>
+
+  <article class="post-content">
+    <h1 
id="announcing-drill-121-new-connectors-functions-and-much-better-stability">Announcing
 Drill 1.21: New Connectors, Functions and Much Better Stability</h1>
+<p>The Apache Drill PMC is pleased to announce a milestone release of Apache 
Drill. Since the last release of Drill the team has been hard at work quashing 
bugs and making overall functionality improvements. The TL;DR includes the 
following:</p>
+
+<ul>
+  <li>New connectors including Apache Iceberg, Delta Lake, Microsoft Access, 
GoogleSheets, and Box</li>
+  <li>Efficient cross-cloud query capability</li>
+  <li>Greatly improved access controls to include user translation support for 
all storage plugins</li>
+  <li>Greatly improved query planning and implicit casting.</li>
+  <li>New BI-focused SQL operators including <code class="language-plaintext 
highlighter-rouge">PIVOT</code>, <code class="language-plaintext 
highlighter-rouge">UNPIVOT</code>, <code class="language-plaintext 
highlighter-rouge">EXCEPT</code> and <code class="language-plaintext 
highlighter-rouge">INTERSECT</code></li>
+  <li>New functions for computing regression lines and trends.</li>
+  <li>New and updated date manipulation functions.</li>
+</ul>
+
+<p>Overall, Drill 1.21 is much more capable and stable than previous 
versions.</p>
+
+<h2 id="calcite-were-back">Calcite, We’re Back!</h2>
+<p>Drill relies on another open source project, Apache Calcite for its query 
planning. The query planning process is a huge part of the overall 
functionality of Drill. Unfortunately, about three years ago, there were some 
issues in Calcite which forced Drill to fork it and rely on that fork. As a 
result, Drill was essentially stuck with a three year old query planner, but 
more importantly, bugs that were fixed in Calcite, as well as new capabilities 
were not finding their way into Drill.</p>
+
+<p>That is no longer the case. Drill 1.21 is now running on the latest stable 
version of Calcite, version 1.33. As a result, we’ve been able to close 
countless JIRA tickets of various queries failing and other random bugs that 
were the result of query planning bugs.</p>
+
+<p>What this means for you as a user is that you’ll see much fewer queries 
failing and better overall performance in terms of speed and stability. You’ll 
see better optimizations being pushed down to JDBC data sources as well as 
support for BigQuery, Athena and other JDBC data sources. We hope to keep Drill 
away from Calcite forks so I hope that we will work with the Calcite community 
to keep our tools in sync.</p>
+
+<h2 
id="improved-implicit-casting-rules-reduce-schema-change-failures">Improved 
Implicit Casting Rules Reduce Schema Change Failures</h2>
+<p>From this author’s perspective, one of the biggest improvements in Drill is 
one of the least noticeable and that is the result of improved implicit 
casting. One of Drill’s unique features is its ability to infer the structure, 
or schema of your data. However, this can be problematic when the schema 
changes. When I used to teach Drill, I used to have spend a considerable amount 
of time teaching students how to cast data from one data type to another to 
ensure that the queries would suc [...]
+
+<p>When using latest version of Drill, you’ll find that queries will work 
without the need for much if any casting. In short, they’ll do what you expect 
them to do. It’s really a high on magic functionality.</p>
+
+<h2 
id="integrations-with-the-modern-and-not-so-modern-data-stack">Integrations 
with the Modern and Not-so-Modern Data Stack</h2>
+<p>The new version of Drill features several new connectors and readers that 
will enable users to connect to the “modern data stack”, specifically support 
for Apache Iceberg and Delta Lake.</p>
+
+<h3 id="breaking-the-iceberg">Breaking the Iceberg</h3>
+<p>Iceberg is a high-performance format for huge analytic tables. Iceberg 
brings the reliability and simplicity of SQL tables to big data, while making 
it possible for engines like Drill to safely work with the same tables, at the 
same time. In addition to being able to query data directly from Iceberg 
tables, Drill also allows users to query the Iceberg table metadata as well as 
snapshots.  <a 
href="https://drill.apache.org/docs/iceberg-format-plugin/";>Complete 
documentation is availabl [...]
+
+<h3 id="querying-delta-lake">Querying Delta Lake</h3>
+<p>Lest we offend someone, we’re not going to get into the debate between 
Iceberg and Delta lake (after all, let’s not argue about who killed whom), but 
Delta Lake, if you aren’t familiar with it, is another modern table format 
which allows ACID transactions, versioning etc. In version 1.21, Drill adds 
support for Delta Lake tables, so users can query Delta Lake tables as well as 
associated metadata. You can also query specific versions of files in delta 
lake.  <a href="https://drill.apa [...]
+
+<h3 id="accessing-access">Accessing Access</h3>
+<p>A surprising number of people use Microsoft Access as a database for their 
business data. With version 1.21, Apache Drill can now natively query Microsoft 
Access database files using Drill. This can be a major benefit for those 
looking to migrate data from Access into more modern formats such as parquet or 
even other relational databases. Drill will support Access files from version 
1997 and up.</p>
+
+<h3 id="oh-sheets">Oh Sheets!</h3>
+<p>In addition to all of the above, Drill can now query data directly from 
GoogleSheets. In addition to being able to query this data source, Drill can 
read, write, delete and append to GoogleSheets. Google doesn’t make it easy, so 
if this is a feature you are interested in, you’ll definitely want to <a 
href="https://drill.apache.org/docs/google-sheets-storage-plugin/";>read the 
documentation here</a>.</p>
+
+<h3 id="remote-data">Remote Data</h3>
+<p>As you can see, Drill has significantly expanded the number of data sources 
and types that it can query. A part of this work has also been to improve the 
implementation behind filesystems. As a result, Drill can now query data stored 
on Dropbox, and Box. We added support for filesystems which use OAuth 2.0 for 
authorization so this means that more extended file systems are likely coming 
your way for the next release.</p>
+
+<h2 id="greatly-improved-access-controls">Greatly Improved Access Controls</h2>
+<p>Managing access controls and credentials on a federated query engine is a 
complicated task. Drill has supported a concept called user impersonation which 
basically means that Drill can execute queries using the credentials of the 
logged in user. This concept works well for querying file systems such as 
Hadoop, and other data sources that have the same concepts, however it does not 
work at all with data sources that have different concepts of users, or in the 
case of OAuth enabled plug [...]
+
+<p>To answer this challenge, Drill 1.21 introduces the concept of user 
translation. The idea of user translation is that, when enabled, every user 
will have their own unique credentials for specific data sources. Thus, when 
that user queries a specific data source, that user’s credentials are used to 
execute the query. This is configurable on an individual data source basis. 
Ultimately, what this means is that you no longer have to create service 
accounts to access data via Drill.</p>
+
+<h2 id="drilling-across-the-clouds">Drilling Across the Clouds</h2>
+<p>While we’re on the subject of clouds, as you may be aware, Drill can query 
data stored in cloud-based file systems such as S3, Azure, GCP etc. One of the 
challenges however, is that if you have data stored in multiple clouds, it can 
become very inefficient to query this data, especially from the perspective of 
network IO. As of Drill 1.21, Drill adds a storage plugin which we are calling 
Drill on Drill.</p>
+
+<p>Let’s say that you had a Drill cluster in S3, but you had data in both S3 
and Azure. With the new Drill on Drill capability, you could install an 
additional Drill cluster in Azure, then query both from either Drill cluster. 
The advantage is that the queries would be pushed down to the Drill cluster 
where the data resides. So if you query Azure from S3, you aren’t sending tons 
of data back and forth.</p>
+
+<h2 id="drill-now-supports-more-bi-operators">Drill Now Supports More BI 
Operators</h2>
+<p>While Drill held more or less to the SQL standard, it was missing some BI 
operators that had become commonplace among SQL platforms. Drill 1.21 
introduces the <code class="language-plaintext highlighter-rouge">PIVOT</code>, 
and <code class="language-plaintext highlighter-rouge">UNPIVOT</code> operators 
which covert rows to columns or vice versa, much in the same way a pivot table 
works in Excel. Additionally, we added set operators <code 
class="language-plaintext highlighter-rouge">IN [...]
+
+<h2 id="new-statistical-functions">New Statistical Functions</h2>
+<p>Drill 1.21 adds new SQL functions for statistical summaries including <code 
class="language-plaintext highlighter-rouge">kendall_correlation</code> for 
calculating correlation coefficients, <code class="language-plaintext 
highlighter-rouge">width_bucket</code> which is a SQL function for computing 
histograms and distributions, and two other functions for computing regression 
lines.</p>
+
+<p>Lastly, we’ve also added additional date/time manipulation functions which 
will make working with dates significantly easier.</p>
+
+<h2 id="whats-next">What’s Next?</h2>
+<p>The big question is where do we go from here? We’ve already started working 
on adding support for additional BI operators such as <code 
class="language-plaintext highlighter-rouge">CUBE</code>, <code 
class="language-plaintext highlighter-rouge">GROUPING SETS</code> and <code 
class="language-plaintext highlighter-rouge">ROLLUP</code>, as well as <code 
class="language-plaintext highlighter-rouge">REGEXP_EXTRACT</code>. Since the 
new version of Calcite has support for numerous optimizati [...]
+
+  </article>
+ <div id="disqus_thread"></div>
+    <script type="text/javascript">
+        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE 
* * */
+        var disqus_shortname = 'drill'; // required: replace example with your 
forum shortname
+
+        /* * * DON'T EDIT BELOW THIS LINE * * */
+        (function() {
+            var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+            (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+        })();
+    </script>
+    <noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript>
+    
+</div>
+<script type="text/javascript" 
src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-548b2caa33765e8d"; 
async="async"></script>
+
+  </div>
+  <p class="push"></p>
+<div id="footer" class="mw">
+<div class="wrapper">
+Copyright © 2012-2022 The Apache Software Foundation, licensed under the 
Apache License, Version 2.0.<br>
+Apache and the Apache feather logo are trademarks of The Apache Software 
Foundation. Other names appearing on the site may be trademarks of their 
respective owners.<br/><br/>
+</div>
+</div>
+
+  <script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ga('create', 'UA-53379651-1', 'auto');
+ga('send', 'pageview');
+</script>
+<script type="text/javascript" 
src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-548b2caa33765e8d"; 
async="async"></script>
+
+</body>
+</html>
diff --git a/output/blog/index.html b/output/blog/index.html
index c3059c5d8..32c7a5b88 100644
--- a/output/blog/index.html
+++ b/output/blog/index.html
@@ -140,6 +140,11 @@
 </div>
 
 <div class="int_text" align="left"><!-- previously: site.posts -->
+<p><a class="post-link" 
href="/blog/2023/03/02/drill-1.21.0-released/">Announcing Drill 1.21!</a><br/>
+<span class="post-date">Posted on Mar 2, 2023
+by Charles Givre</span>
+<br/>Announcing Drill 1.21: New Connectors, Functions and Much Better 
Stability.</p>
+<!-- previously: site.posts -->
 <p><a class="post-link" href="/blog/2023/01/07/drill-1.20.3-released/">Drill 
1.20.3 Released</a><br/>
 <span class="post-date">Posted on Jan 7, 2023
 by James Turton</span>
diff --git a/output/docs/aggregate-and-aggregate-statistical/index.html 
b/output/docs/aggregate-and-aggregate-statistical/index.html
index 461cd0b62..246ddc80d 100644
--- a/output/docs/aggregate-and-aggregate-statistical/index.html
+++ b/output/docs/aggregate-and-aggregate-statistical/index.html
@@ -1505,39 +1505,39 @@ queries.</p>
   </thead>
   <tbody>
     <tr>
-      <td>ANY_VALUE(expression)</td>
+      <td>ANY_VALUE(x)</td>
       <td>BIT, INT, BIGINT, FLOAT4, FLOAT8, DATE, TIMESTAMP, TIME, VARCHAR, 
VARBINARY, LIST, MAP, INTERVAL, INTERVALDAY, INTERVALYEAR, VARDECIMAL</td>
       <td>Same as argument type</td>
     </tr>
     <tr>
-      <td>AVG(expression)</td>
+      <td>AVG(x)</td>
       <td>SMALLINT,   INTEGER, BIGINT, FLOAT, DOUBLE, DECIMAL, INTERVAL</td>
       <td>DECIMAL for DECIMAL argument,   DOUBLE for all other arguments</td>
     </tr>
     <tr>
-      <td>BOOL_AND(expression), BOOL_OR(expression)</td>
+      <td>BOOL_AND(x), BOOL_OR(x)</td>
       <td>BIT</td>
       <td>BIT</td>
     </tr>
     <tr>
-      <td>BIT_AND(expression), BIT_OR(expression), BIT_XOR(expression)</td>
+      <td>BIT_AND(x), BIT_OR(x), BIT_XOR(x)</td>
       <td>INT, BIGINT</td>
       <td>Same as argument type</td>
     </tr>
     <tr>
       <td>CORR(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COVAR_POP(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COVAR_SAMP(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COUNT(*)</td>
@@ -1550,9 +1550,9 @@ queries.</p>
       <td>BIGINT</td>
     </tr>
     <tr>
-      <td>KENDALL_CORRELATION</td>
+      <td>KENDALL_CORRELATION(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>MAX(expression), MIN(expression)</td>
@@ -1560,19 +1560,19 @@ queries.</p>
       <td>Same   as argument type</td>
     </tr>
     <tr>
-      <td>REGR_INTERCEPT</td>
+      <td>REGR_INTERCEPT(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
-      <td>REGR_SLOPE</td>
+      <td>REGR_SLOPE(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>STDDEV, STDDEV_POP, STDDEV_SAMP</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>SUM(expression)</td>
@@ -1665,10 +1665,12 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
 <p><strong>Introduced in release: 1.21</strong></p>
 
 <p>Starting in Drill 1.21 it is possible to follow an aggregate function 
invocation with a boolean expression that will filter the values procesed by 
the aggregate using the following syntax.</p>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>agg_func( column ) FILTER(WHERE boolean_expression)
 </code></pre></div></div>
 
 <p>For example</p>
+
 <div class="language-sql highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="k">SELECT</span>
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">1</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_1_region</span><span class="p">,</span>
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_2_region</span><span class="p">,</span>
@@ -1677,7 +1679,9 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">0</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_0_region</span>
 <span class="k">FROM</span> <span class="n">cp</span><span 
class="p">.</span><span class="nv">`tpch/nation.parquet`</span>
 </code></pre></div></div>
+
 <p>will return</p>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
 | nations_count_in_1_region | nations_count_in_2_region | 
nations_count_in_3_region | nations_count_in_4_region | 
nations_count_in_0_region |
 
+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
@@ -1685,7 +1689,10 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
 
+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
 </code></pre></div></div>
 
-<p><strong>N.B.</strong> Some versions of Drill prior to 1.21 do not fail if 
FILTER expressions are included with aggregate function calls, but silently do 
no filtering yielding incorrect results. Filtered aggregates are only supported 
from version 1.21 onward.</p>
+<div class="admonition note">
+  <p class="first admonition-title">Note</p>
+  <p class="last">Some versions of Drill prior to 1.21 do not fail if FILTER 
expressions are included with aggregate function calls, but silently do no 
filtering yielding incorrect results. Filtered aggregates are only supported 
from version 1.21 onward.  </p>
+</div>
 
 <h2 id="avg">AVG</h2>
 
@@ -1827,6 +1834,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="corr">CORR</h2>
+
 <p>Returns the <a 
href="https://en.wikipedia.org/wiki/Pearson_correlation_coefficient";>Pearson 
Correlation Coefficient</a> for a given x, y.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>SELECT CORR (department_id, salary) as correlation FROM 
cp.`employee.json`;
@@ -1838,6 +1846,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="covar_pop">COVAR_POP</h2>
+
 <p>Returns the population covariance for a data set.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>SELECT covar_pop (department_id, salary) AS covariance 
FROM cp.`employee.json`;
@@ -1849,6 +1858,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="covar_samp">COVAR_SAMP</h2>
+
 <p>Returns the sample covariance for a data set.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>select covar_samp (department_id, salary) as covariance 
from cp.`employee.json`;
@@ -1876,8 +1886,8 @@ Returns the number of values of the specified 
expression.</li>
 Returns the number of distinct values in the expression.</li>
   <li>ALL expression<br />
 Returns the number of values of the specified expression.</li>
-  <li>* (asterisk)\</li>
-  <li>Returns the number of records in the table.</li>
+  <li>* (asterisk)<br />
+Returns the number of records in the table.</li>
 </ul>
 
 <h3 id="count-examples">COUNT Examples</h3>
@@ -1931,6 +1941,7 @@ SELECT COUNT(*) FROM cp.`employee.json`;
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">kendall_correlation</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  0.2
 
 1 row selected (0.213 seconds)
@@ -2136,6 +2147,7 @@ computation of table statistics accordingly.   </p>
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">regr_intercept</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  4.9715020855109255
 
 1 row selected (0.221 seconds)
@@ -2157,6 +2169,7 @@ computation of table statistics accordingly.   </p>
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">regr_slope</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  0.9719696129009783
 
 1 row selected (0.283 seconds)
diff --git a/output/docs/statistical/index.html 
b/output/docs/statistical/index.html
index 8408908b9..d53b25798 100644
--- a/output/docs/statistical/index.html
+++ b/output/docs/statistical/index.html
@@ -1504,7 +1504,7 @@
   </thead>
   <tbody>
     <tr>
-      <td>width_bucket</td>
+      <td>width_bucket(value, min, max, buckets)</td>
       <td>INT</td>
       <td>Returns the 1-based bucket index of the value after dividing the 
interval between min and max into the given number of buckets</td>
     </tr>
@@ -1513,7 +1513,7 @@
 
 <h2 id="width_bucket">WIDTH_BUCKET</h2>
 
-<p>Returns the 1-based bucket index of <em>value</em> after dividing the 
interval between <em>min</em> and_ max_ into the given number of buckets. A 
<em>value</em> that falls outside the given range are given an index of 0 
(<em>value</em> &lt; <em>min</em>) or <em>buckets</em> + 1 (<em>value</em> &gt; 
<em>max</em>).</p>
+<p>Returns the 1-based bucket index of <em>value</em> after dividing the 
interval between <em>min</em> and <em>max</em> into the given number of 
buckets. A <em>value</em> that falls outside the given range are given an index 
of 0 (<em>value</em> &lt; <em>min</em>) or <em>buckets</em> + 1 (<em>value</em> 
&gt; <em>max</em>).</p>
 
 <h3 id="width_bucket-syntax">WIDTH_BUCKET Syntax</h3>
 
diff --git a/output/feed.xml b/output/feed.xml
index adf68036e..e034cb8f6 100644
--- a/output/feed.xml
+++ b/output/feed.xml
@@ -6,10 +6,87 @@
 </description>
     <link>/</link>
     <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
-    <pubDate>Fri, 03 Mar 2023 11:26:27 +0000</pubDate>
-    <lastBuildDate>Fri, 03 Mar 2023 11:26:27 +0000</lastBuildDate>
+    <pubDate>Fri, 03 Mar 2023 11:55:14 +0000</pubDate>
+    <lastBuildDate>Fri, 03 Mar 2023 11:55:14 +0000</lastBuildDate>
     <generator>Jekyll v3.9.1</generator>
     
+      <item>
+        <title>Announcing Drill 1.21!</title>
+        <description>&lt;h1 
id=&quot;announcing-drill-121-new-connectors-functions-and-much-better-stability&quot;&gt;Announcing
 Drill 1.21: New Connectors, Functions and Much Better Stability&lt;/h1&gt;
+&lt;p&gt;The Apache Drill PMC is pleased to announce a milestone release of 
Apache Drill. Since the last release of Drill the team has been hard at work 
quashing bugs and making overall functionality improvements. The TL;DR includes 
the following:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;New connectors including Apache Iceberg, Delta Lake, Microsoft 
Access, GoogleSheets, and Box&lt;/li&gt;
+  &lt;li&gt;Efficient cross-cloud query capability&lt;/li&gt;
+  &lt;li&gt;Greatly improved access controls to include user translation 
support for all storage plugins&lt;/li&gt;
+  &lt;li&gt;Greatly improved query planning and implicit casting.&lt;/li&gt;
+  &lt;li&gt;New BI-focused SQL operators including &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;PIVOT&lt;/code&gt;, 
&lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;UNPIVOT&lt;/code&gt;, &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXCEPT&lt;/code&gt; 
and &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;INTERSECT&lt;/code&gt;&lt;/li&gt;
+  &lt;li&gt;New functions for computing regression lines and trends.&lt;/li&gt;
+  &lt;li&gt;New and updated date manipulation functions.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Overall, Drill 1.21 is much more capable and stable than previous 
versions.&lt;/p&gt;
+
+&lt;h2 id=&quot;calcite-were-back&quot;&gt;Calcite, We’re Back!&lt;/h2&gt;
+&lt;p&gt;Drill relies on another open source project, Apache Calcite for its 
query planning. The query planning process is a huge part of the overall 
functionality of Drill. Unfortunately, about three years ago, there were some 
issues in Calcite which forced Drill to fork it and rely on that fork. As a 
result, Drill was essentially stuck with a three year old query planner, but 
more importantly, bugs that were fixed in Calcite, as well as new capabilities 
were not finding their way into  [...]
+
+&lt;p&gt;That is no longer the case. Drill 1.21 is now running on the latest 
stable version of Calcite, version 1.33. As a result, we’ve been able to close 
countless JIRA tickets of various queries failing and other random bugs that 
were the result of query planning bugs.&lt;/p&gt;
+
+&lt;p&gt;What this means for you as a user is that you’ll see much fewer 
queries failing and better overall performance in terms of speed and stability. 
You’ll see better optimizations being pushed down to JDBC data sources as well 
as support for BigQuery, Athena and other JDBC data sources. We hope to keep 
Drill away from Calcite forks so I hope that we will work with the Calcite 
community to keep our tools in sync.&lt;/p&gt;
+
+&lt;h2 
id=&quot;improved-implicit-casting-rules-reduce-schema-change-failures&quot;&gt;Improved
 Implicit Casting Rules Reduce Schema Change Failures&lt;/h2&gt;
+&lt;p&gt;From this author’s perspective, one of the biggest improvements in 
Drill is one of the least noticeable and that is the result of improved 
implicit casting. One of Drill’s unique features is its ability to infer the 
structure, or schema of your data. However, this can be problematic when the 
schema changes. When I used to teach Drill, I used to have spend a considerable 
amount of time teaching students how to cast data from one data type to another 
to ensure that the queries wou [...]
+
+&lt;p&gt;When using latest version of Drill, you’ll find that queries will 
work without the need for much if any casting. In short, they’ll do what you 
expect them to do. It’s really a high on magic functionality.&lt;/p&gt;
+
+&lt;h2 
id=&quot;integrations-with-the-modern-and-not-so-modern-data-stack&quot;&gt;Integrations
 with the Modern and Not-so-Modern Data Stack&lt;/h2&gt;
+&lt;p&gt;The new version of Drill features several new connectors and readers 
that will enable users to connect to the “modern data stack”, specifically 
support for Apache Iceberg and Delta Lake.&lt;/p&gt;
+
+&lt;h3 id=&quot;breaking-the-iceberg&quot;&gt;Breaking the Iceberg&lt;/h3&gt;
+&lt;p&gt;Iceberg is a high-performance format for huge analytic tables. 
Iceberg brings the reliability and simplicity of SQL tables to big data, while 
making it possible for engines like Drill to safely work with the same tables, 
at the same time. In addition to being able to query data directly from Iceberg 
tables, Drill also allows users to query the Iceberg table metadata as well as 
snapshots.  &lt;a 
href=&quot;https://drill.apache.org/docs/iceberg-format-plugin/&quot;&gt;Complete
 doc [...]
+
+&lt;h3 id=&quot;querying-delta-lake&quot;&gt;Querying Delta Lake&lt;/h3&gt;
+&lt;p&gt;Lest we offend someone, we’re not going to get into the debate 
between Iceberg and Delta lake (after all, let’s not argue about who killed 
whom), but Delta Lake, if you aren’t familiar with it, is another modern table 
format which allows ACID transactions, versioning etc. In version 1.21, Drill 
adds support for Delta Lake tables, so users can query Delta Lake tables as 
well as associated metadata. You can also query specific versions of files in 
delta lake.  &lt;a href=&quot;htt [...]
+
+&lt;h3 id=&quot;accessing-access&quot;&gt;Accessing Access&lt;/h3&gt;
+&lt;p&gt;A surprising number of people use Microsoft Access as a database for 
their business data. With version 1.21, Apache Drill can now natively query 
Microsoft Access database files using Drill. This can be a major benefit for 
those looking to migrate data from Access into more modern formats such as 
parquet or even other relational databases. Drill will support Access files 
from version 1997 and up.&lt;/p&gt;
+
+&lt;h3 id=&quot;oh-sheets&quot;&gt;Oh Sheets!&lt;/h3&gt;
+&lt;p&gt;In addition to all of the above, Drill can now query data directly 
from GoogleSheets. In addition to being able to query this data source, Drill 
can read, write, delete and append to GoogleSheets. Google doesn’t make it 
easy, so if this is a feature you are interested in, you’ll definitely want to 
&lt;a 
href=&quot;https://drill.apache.org/docs/google-sheets-storage-plugin/&quot;&gt;read
 the documentation here&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h3 id=&quot;remote-data&quot;&gt;Remote Data&lt;/h3&gt;
+&lt;p&gt;As you can see, Drill has significantly expanded the number of data 
sources and types that it can query. A part of this work has also been to 
improve the implementation behind filesystems. As a result, Drill can now query 
data stored on Dropbox, and Box. We added support for filesystems which use 
OAuth 2.0 for authorization so this means that more extended file systems are 
likely coming your way for the next release.&lt;/p&gt;
+
+&lt;h2 id=&quot;greatly-improved-access-controls&quot;&gt;Greatly Improved 
Access Controls&lt;/h2&gt;
+&lt;p&gt;Managing access controls and credentials on a federated query engine 
is a complicated task. Drill has supported a concept called user impersonation 
which basically means that Drill can execute queries using the credentials of 
the logged in user. This concept works well for querying file systems such as 
Hadoop, and other data sources that have the same concepts, however it does not 
work at all with data sources that have different concepts of users, or in the 
case of OAuth enable [...]
+
+&lt;p&gt;To answer this challenge, Drill 1.21 introduces the concept of user 
translation. The idea of user translation is that, when enabled, every user 
will have their own unique credentials for specific data sources. Thus, when 
that user queries a specific data source, that user’s credentials are used to 
execute the query. This is configurable on an individual data source basis. 
Ultimately, what this means is that you no longer have to create service 
accounts to access data via Drill.& [...]
+
+&lt;h2 id=&quot;drilling-across-the-clouds&quot;&gt;Drilling Across the 
Clouds&lt;/h2&gt;
+&lt;p&gt;While we’re on the subject of clouds, as you may be aware, Drill can 
query data stored in cloud-based file systems such as S3, Azure, GCP etc. One 
of the challenges however, is that if you have data stored in multiple clouds, 
it can become very inefficient to query this data, especially from the 
perspective of network IO. As of Drill 1.21, Drill adds a storage plugin which 
we are calling Drill on Drill.&lt;/p&gt;
+
+&lt;p&gt;Let’s say that you had a Drill cluster in S3, but you had data in 
both S3 and Azure. With the new Drill on Drill capability, you could install an 
additional Drill cluster in Azure, then query both from either Drill cluster. 
The advantage is that the queries would be pushed down to the Drill cluster 
where the data resides. So if you query Azure from S3, you aren’t sending tons 
of data back and forth.&lt;/p&gt;
+
+&lt;h2 id=&quot;drill-now-supports-more-bi-operators&quot;&gt;Drill Now 
Supports More BI Operators&lt;/h2&gt;
+&lt;p&gt;While Drill held more or less to the SQL standard, it was missing 
some BI operators that had become commonplace among SQL platforms. Drill 1.21 
introduces the &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;PIVOT&lt;/code&gt;, and &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNPIVOT&lt;/code&gt; 
operators which covert rows to columns or vice versa, much in the same way a 
pivot table works in Excel. Additionally, we added set operators &lt [...]
+
+&lt;h2 id=&quot;new-statistical-functions&quot;&gt;New Statistical 
Functions&lt;/h2&gt;
+&lt;p&gt;Drill 1.21 adds new SQL functions for statistical summaries including 
&lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;kendall_correlation&lt;/code&gt; for calculating 
correlation coefficients, &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;width_bucket&lt;/code&gt; which is a SQL function 
for computing histograms and distributions, and two other functions for 
computing regression lines.&lt;/p&gt;
+
+&lt;p&gt;Lastly, we’ve also added additional date/time manipulation functions 
which will make working with dates significantly easier.&lt;/p&gt;
+
+&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;
+&lt;p&gt;The big question is where do we go from here? We’ve already started 
working on adding support for additional BI operators such as &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;CUBE&lt;/code&gt;, 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GROUPING 
SETS&lt;/code&gt; and &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;ROLLUP&lt;/code&gt;, as well as &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG [...]
+</description>
+        <pubDate>Thu, 02 Mar 2023 00:00:00 +0000</pubDate>
+        <link>/blog/2023/03/02/drill-1.21.0-released/</link>
+        <guid isPermaLink="true">/blog/2023/03/02/drill-1.21.0-released/</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
       <item>
         <title>Drill 1.20.3 Released</title>
         <description>&lt;p&gt;Today, we’re happy to announce the availability 
of Drill 1.20.3. You can download it &lt;a 
href=&quot;https://drill.apache.org/download/&quot;&gt;here&lt;/a&gt;. You can 
find a complete list of improvements and JIRAs resolved in the 1.20.3 release 
&lt;a 
href=&quot;/docs/apache-drill-1-20-3-release-notes/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
@@ -245,30 +322,6 @@ In [7]: while True:
         <guid isPermaLink="true">/blog/2021/06/10/drill-1.19-released/</guid>
         
         
-        <category>blog</category>
-        
-      </item>
-    
-      <item>
-        <title>Drill 1.18 Released</title>
-        <description>&lt;p&gt;Today, we’re happy to announce the availability 
of Drill 1.18.0. You can download it &lt;a 
href=&quot;https://drill.apache.org/download/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-
-&lt;h2 id=&quot;this-release-provides-the-following-new-features&quot;&gt;This 
release provides the following new Features:&lt;/h2&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-6835&quot;&gt;DRILL-6835&lt;/a&gt;
 - Schema Provision using File / Table Function&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7326&quot;&gt;DRILL-7326&lt;/a&gt;
 - Support repeated lists for CTAS parquet format&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7343&quot;&gt;DRILL-7343&lt;/a&gt;
 - Add User-Agent UDFs to Drill&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7374&quot;&gt;DRILL-7374&lt;/a&gt;
 - Support for IPV6 address&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;You can find a complete list of improvements and JIRAs resolved in 
the 1.18.0 release &lt;a 
href=&quot;/docs/apache-drill-1-18-0-release-notes/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-</description>
-        <pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate>
-        <link>/blog/2020/09/05/drill-1.18-released/</link>
-        <guid isPermaLink="true">/blog/2020/09/05/drill-1.18-released/</guid>
-        
-        
         <category>blog</category>
         
       </item>
diff --git a/output/index.html b/output/index.html
index 66a63af0e..7e8c2976a 100644
--- a/output/index.html
+++ b/output/index.html
@@ -203,9 +203,9 @@ $(document).ready(function() {
   <div class="news">News:
   </div>
   
-  <div><a href="/blog/2023/01/07/drill-1.20.3-released/">Drill 1.20.3 
Released</a><br/><span>(James Turton)</span></div>
+  <div><a href="/blog/2023/03/02/drill-1.21.0-released/">Announcing Drill 
1.21!</a><br/><span>(Charles Givre)</span></div>
   
-  <div><a href="/blog/2022/08/03/drill-1.20.2-released/">Drill 1.20.2 
Released</a><br/><span>(James Turton)</span></div>
+  <div><a href="/blog/2023/01/07/drill-1.20.3-released/">Drill 1.20.3 
Released</a><br/><span>(James Turton)</span></div>
 </div>
 <div class="mw introWrapper">
   <table class="intro" cellpadding="0" cellspacing="0" align="center">
diff --git a/output/zh/blog/2023/03/02/drill-1.21.0-released/index.html 
b/output/zh/blog/2023/03/02/drill-1.21.0-released/index.html
new file mode 100644
index 000000000..d0bef7bbb
--- /dev/null
+++ b/output/zh/blog/2023/03/02/drill-1.21.0-released/index.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+
+<meta charset="UTF-8">
+<meta name=viewport content="width=device-width, initial-scale=1">
+
+
+<title>Announcing Drill 1.21! - Apache Drill</title>
+
+<link 
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css";
 rel="stylesheet" type="text/css"/>
+<link href="/css/site.css" rel="stylesheet" type="text/css"/>
+
+<link rel="shortcut icon" href="/zh/favicon.ico" type="image/x-icon"/>
+<link rel="icon" href="/zh/favicon.ico" type="image/x-icon"/>
+
+<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"; 
language="javascript" type="text/javascript"></script>
+<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js";
 language="javascript" type="text/javascript"></script>
+<script language="javascript" type="text/javascript" 
src="/js/modernizr.custom.js"></script>
+<script language="javascript" type="text/javascript" 
src="/js/script.js"></script>
+<script language="javascript" type="text/javascript" 
src="/js/drill.js"></script>
+
+</head>
+
+
+<body onResize="resized();">
+  <div class="page-wrap">
+    <div class="bui"></div>
+
+<div id="menu" class="mw">
+<ul>
+  <li class='toc-categories'>
+  <a class="expand-toc-icon" href="javascript:void(0);"><i class="fa 
fa-bars"></i></a>
+  </li>
+  <li class="logo"><a href="/zh/"></a></li>
+  <li class='expand-menu'>
+  <a href="javascript:void(0);"><span class='menu-text'>Menu</span><span 
class='expand-icon'><i class="fa fa-bars"></i></span></a>
+  </li>
+  <li class="clear-float"></li>
+  <li class="nav">
+       <a>Language</a>
+       <ul>
+               
+               <li>
+                       <a  href="/blog/2023/03/02/drill-1.21.0-released/" 
>en</a>
+               </li>
+               
+               <li>
+                       <a style="font-weight: bold;" 
href="/zh/blog/2023/03/02/drill-1.21.0-released/" >zh</a>
+               </li>
+               
+       </ul>
+  </li>
+  <li class="apache-link">
+    <a href="/zh/apacheASF/">Apache</a>
+  </li>
+  <li class="poweredby">
+    <a href="/zh/poweredBy">Powered By</a>
+  </li>
+  <li class="documentation-menu">
+    <a href="/zh/docs/">Documentation</a>
+    <ul>
+         
+      
+        <li><a href="/zh/docs/getting-started/">新手开始</a></li>
+      
+        <li><a href="/zh/docs/architecture/">Architecture</a></li>
+      
+        <li><a href="/zh/docs/tutorials/">教程</a></li>
+      
+        <li><a href="/zh/docs/drill-on-yarn/">Drill-on-YARN</a></li>
+      
+        <li><a href="/zh/docs/install-drill/">Install Drill</a></li>
+      
+        <li><a href="/zh/docs/configure-drill/">Configure Drill</a></li>
+      
+        <li><a href="/zh/docs/connect-a-data-source/">Connect a Data 
Source</a></li>
+      
+        <li><a href="/zh/docs/odbc-jdbc-interfaces/">ODBC/JDBC 
Interfaces</a></li>
+      
+        <li><a href="/zh/docs/query-data/">Query Data</a></li>
+      
+        <li><a href="/zh/docs/performance-tuning/">Performance Tuning</a></li>
+      
+        <li><a href="/zh/docs/log-and-debug/">Log and Debug</a></li>
+      
+        <li><a href="/zh/docs/sql-reference/">SQL Reference</a></li>
+      
+        <li><a href="/zh/docs/data-sources-and-file-formats/">Data Sources and 
File Formats</a></li>
+      
+        <li><a href="/zh/docs/develop-custom-functions/">Develop Custom 
Functions</a></li>
+      
+        <li><a href="/zh/docs/troubleshooting/">Troubleshooting</a></li>
+      
+        <li><a href="/zh/docs/developer-information/">Developer 
Information</a></li>
+      
+        <li><a href="/zh/docs/release-notes/">Release Notes</a></li>
+      
+        <li><a href="/zh/docs/sample-datasets/">Sample Datasets</a></li>
+      
+        <li><a href="/zh/docs/project-bylaws/">Project Bylaws</a></li>
+      
+        <li><a href="/zh/docs/ecosystem/">Ecosystem</a></li>
+      
+    </ul>
+  </li>
+  <li class='nav'>
+    <a href="/zh/community-resources/">Community</a>
+    <ul>
+      <li><a href="/zh/team/">Team</a></li>
+      <li><a href="/zh/mailinglists/">Mailing Lists</a></li>
+      <li><a href="/zh/community-resources/">Community Resources</a></li>
+    </ul>
+  </li>
+  <li class='nav'><a href="/zh/faq/">FAQ</a></li>
+  <li class='nav'><a href="/zh/blog/">Blog</a></li>
+  <li class="social-menu-item"><a href="https://twitter.com/apachedrill"; 
title="apachedrill on twitter" target="_blank"><img 
src="/images/twitter_32_26_white.png" alt="twitter logo" align="center"></a> 
</li>
+  <li class="social-menu-item"><a 
href="https://join.slack.com/t/apache-drill/shared_invite/enQtNTQ4MjM1MDA3MzQ2LTJlYmUxMTRkMmUwYmQ2NTllYmFmMjU4MDk0NjYwZjBmYjg0MDZmOTE2ZDg0ZjBlYmI3Yjc4Y2I2NTQyNGVlZTc";
 title="Apache Drill Slack channels"
+      target="_blank"><img src="/images/slack-logo.svg" alt="Slack logo" 
align="center"></a> </li>
+  <li class='search-bar'>
+    <form id="drill-search-form">
+      <input type="text" placeholder="Search Apache Drill" 
id="drill-search-term" />
+      <button type="submit">
+        <i class="fa fa-search"></i>
+      </button>
+    </form>
+  </li>
+  <li class="d">
+    <a href="/zh/download/">
+      <i class="fa fa-cloud-download"></i> Download
+    </a>
+  </li>
+</ul>
+</div>
+
+    <link href="/css/content.css" rel="stylesheet" type="text/css">
+
+<div class="post int_text">
+  <header class="post-header">
+    <div class="int_title">
+      <h1 class="post-title">Announcing Drill 1.21!</h1>
+    </div>
+    <p class="post-meta">
+    
+      
+      
+      <strong>Author:</strong> Charles Givre (PMC Chair and Committer, Apache 
Drill)<br />
+    
+<strong>Date:</strong> Mar 2, 2023
+</p>
+  </header>
+  <div class="addthis_sharing_toolbox"></div>
+
+  <article class="post-content">
+    <h1 
id="announcing-drill-121-new-connectors-functions-and-much-better-stability">Announcing
 Drill 1.21: New Connectors, Functions and Much Better Stability</h1>
+<p>The Apache Drill PMC is pleased to announce a milestone release of Apache 
Drill. Since the last release of Drill the team has been hard at work quashing 
bugs and making overall functionality improvements. The TL;DR includes the 
following:</p>
+
+<ul>
+  <li>New connectors including Apache Iceberg, Delta Lake, Microsoft Access, 
GoogleSheets, and Box</li>
+  <li>Efficient cross-cloud query capability</li>
+  <li>Greatly improved access controls to include user translation support for 
all storage plugins</li>
+  <li>Greatly improved query planning and implicit casting.</li>
+  <li>New BI-focused SQL operators including <code class="language-plaintext 
highlighter-rouge">PIVOT</code>, <code class="language-plaintext 
highlighter-rouge">UNPIVOT</code>, <code class="language-plaintext 
highlighter-rouge">EXCEPT</code> and <code class="language-plaintext 
highlighter-rouge">INTERSECT</code></li>
+  <li>New functions for computing regression lines and trends.</li>
+  <li>New and updated date manipulation functions.</li>
+</ul>
+
+<p>Overall, Drill 1.21 is much more capable and stable than previous 
versions.</p>
+
+<h2 id="calcite-were-back">Calcite, We’re Back!</h2>
+<p>Drill relies on another open source project, Apache Calcite for its query 
planning. The query planning process is a huge part of the overall 
functionality of Drill. Unfortunately, about three years ago, there were some 
issues in Calcite which forced Drill to fork it and rely on that fork. As a 
result, Drill was essentially stuck with a three year old query planner, but 
more importantly, bugs that were fixed in Calcite, as well as new capabilities 
were not finding their way into Drill.</p>
+
+<p>That is no longer the case. Drill 1.21 is now running on the latest stable 
version of Calcite, version 1.33. As a result, we’ve been able to close 
countless JIRA tickets of various queries failing and other random bugs that 
were the result of query planning bugs.</p>
+
+<p>What this means for you as a user is that you’ll see much fewer queries 
failing and better overall performance in terms of speed and stability. You’ll 
see better optimizations being pushed down to JDBC data sources as well as 
support for BigQuery, Athena and other JDBC data sources. We hope to keep Drill 
away from Calcite forks so I hope that we will work with the Calcite community 
to keep our tools in sync.</p>
+
+<h2 
id="improved-implicit-casting-rules-reduce-schema-change-failures">Improved 
Implicit Casting Rules Reduce Schema Change Failures</h2>
+<p>From this author’s perspective, one of the biggest improvements in Drill is 
one of the least noticeable and that is the result of improved implicit 
casting. One of Drill’s unique features is its ability to infer the structure, 
or schema of your data. However, this can be problematic when the schema 
changes. When I used to teach Drill, I used to have spend a considerable amount 
of time teaching students how to cast data from one data type to another to 
ensure that the queries would suc [...]
+
+<p>When using latest version of Drill, you’ll find that queries will work 
without the need for much if any casting. In short, they’ll do what you expect 
them to do. It’s really a high on magic functionality.</p>
+
+<h2 
id="integrations-with-the-modern-and-not-so-modern-data-stack">Integrations 
with the Modern and Not-so-Modern Data Stack</h2>
+<p>The new version of Drill features several new connectors and readers that 
will enable users to connect to the “modern data stack”, specifically support 
for Apache Iceberg and Delta Lake.</p>
+
+<h3 id="breaking-the-iceberg">Breaking the Iceberg</h3>
+<p>Iceberg is a high-performance format for huge analytic tables. Iceberg 
brings the reliability and simplicity of SQL tables to big data, while making 
it possible for engines like Drill to safely work with the same tables, at the 
same time. In addition to being able to query data directly from Iceberg 
tables, Drill also allows users to query the Iceberg table metadata as well as 
snapshots.  <a 
href="https://drill.apache.org/docs/iceberg-format-plugin/";>Complete 
documentation is availabl [...]
+
+<h3 id="querying-delta-lake">Querying Delta Lake</h3>
+<p>Lest we offend someone, we’re not going to get into the debate between 
Iceberg and Delta lake (after all, let’s not argue about who killed whom), but 
Delta Lake, if you aren’t familiar with it, is another modern table format 
which allows ACID transactions, versioning etc. In version 1.21, Drill adds 
support for Delta Lake tables, so users can query Delta Lake tables as well as 
associated metadata. You can also query specific versions of files in delta 
lake.  <a href="https://drill.apa [...]
+
+<h3 id="accessing-access">Accessing Access</h3>
+<p>A surprising number of people use Microsoft Access as a database for their 
business data. With version 1.21, Apache Drill can now natively query Microsoft 
Access database files using Drill. This can be a major benefit for those 
looking to migrate data from Access into more modern formats such as parquet or 
even other relational databases. Drill will support Access files from version 
1997 and up.</p>
+
+<h3 id="oh-sheets">Oh Sheets!</h3>
+<p>In addition to all of the above, Drill can now query data directly from 
GoogleSheets. In addition to being able to query this data source, Drill can 
read, write, delete and append to GoogleSheets. Google doesn’t make it easy, so 
if this is a feature you are interested in, you’ll definitely want to <a 
href="https://drill.apache.org/docs/google-sheets-storage-plugin/";>read the 
documentation here</a>.</p>
+
+<h3 id="remote-data">Remote Data</h3>
+<p>As you can see, Drill has significantly expanded the number of data sources 
and types that it can query. A part of this work has also been to improve the 
implementation behind filesystems. As a result, Drill can now query data stored 
on Dropbox, and Box. We added support for filesystems which use OAuth 2.0 for 
authorization so this means that more extended file systems are likely coming 
your way for the next release.</p>
+
+<h2 id="greatly-improved-access-controls">Greatly Improved Access Controls</h2>
+<p>Managing access controls and credentials on a federated query engine is a 
complicated task. Drill has supported a concept called user impersonation which 
basically means that Drill can execute queries using the credentials of the 
logged in user. This concept works well for querying file systems such as 
Hadoop, and other data sources that have the same concepts, however it does not 
work at all with data sources that have different concepts of users, or in the 
case of OAuth enabled plug [...]
+
+<p>To answer this challenge, Drill 1.21 introduces the concept of user 
translation. The idea of user translation is that, when enabled, every user 
will have their own unique credentials for specific data sources. Thus, when 
that user queries a specific data source, that user’s credentials are used to 
execute the query. This is configurable on an individual data source basis. 
Ultimately, what this means is that you no longer have to create service 
accounts to access data via Drill.</p>
+
+<h2 id="drilling-across-the-clouds">Drilling Across the Clouds</h2>
+<p>While we’re on the subject of clouds, as you may be aware, Drill can query 
data stored in cloud-based file systems such as S3, Azure, GCP etc. One of the 
challenges however, is that if you have data stored in multiple clouds, it can 
become very inefficient to query this data, especially from the perspective of 
network IO. As of Drill 1.21, Drill adds a storage plugin which we are calling 
Drill on Drill.</p>
+
+<p>Let’s say that you had a Drill cluster in S3, but you had data in both S3 
and Azure. With the new Drill on Drill capability, you could install an 
additional Drill cluster in Azure, then query both from either Drill cluster. 
The advantage is that the queries would be pushed down to the Drill cluster 
where the data resides. So if you query Azure from S3, you aren’t sending tons 
of data back and forth.</p>
+
+<h2 id="drill-now-supports-more-bi-operators">Drill Now Supports More BI 
Operators</h2>
+<p>While Drill held more or less to the SQL standard, it was missing some BI 
operators that had become commonplace among SQL platforms. Drill 1.21 
introduces the <code class="language-plaintext highlighter-rouge">PIVOT</code>, 
and <code class="language-plaintext highlighter-rouge">UNPIVOT</code> operators 
which covert rows to columns or vice versa, much in the same way a pivot table 
works in Excel. Additionally, we added set operators <code 
class="language-plaintext highlighter-rouge">IN [...]
+
+<h2 id="new-statistical-functions">New Statistical Functions</h2>
+<p>Drill 1.21 adds new SQL functions for statistical summaries including <code 
class="language-plaintext highlighter-rouge">kendall_correlation</code> for 
calculating correlation coefficients, <code class="language-plaintext 
highlighter-rouge">width_bucket</code> which is a SQL function for computing 
histograms and distributions, and two other functions for computing regression 
lines.</p>
+
+<p>Lastly, we’ve also added additional date/time manipulation functions which 
will make working with dates significantly easier.</p>
+
+<h2 id="whats-next">What’s Next?</h2>
+<p>The big question is where do we go from here? We’ve already started working 
on adding support for additional BI operators such as <code 
class="language-plaintext highlighter-rouge">CUBE</code>, <code 
class="language-plaintext highlighter-rouge">GROUPING SETS</code> and <code 
class="language-plaintext highlighter-rouge">ROLLUP</code>, as well as <code 
class="language-plaintext highlighter-rouge">REGEXP_EXTRACT</code>. Since the 
new version of Calcite has support for numerous optimizati [...]
+
+  </article>
+ <div id="disqus_thread"></div>
+    <script type="text/javascript">
+        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE 
* * */
+        var disqus_shortname = 'drill'; // required: replace example with your 
forum shortname
+
+        /* * * DON'T EDIT BELOW THIS LINE * * */
+        (function() {
+            var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+            (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+        })();
+    </script>
+    <noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript>
+    
+</div>
+<script type="text/javascript" 
src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-548b2caa33765e8d"; 
async="async"></script>
+
+  </div>
+  <p class="push"></p>
+<div id="footer" class="mw">
+<div class="wrapper">
+Copyright © 2012-2022 The Apache Software Foundation, licensed under the 
Apache License, Version 2.0.<br>
+Apache and the Apache feather logo are trademarks of The Apache Software 
Foundation. Other names appearing on the site may be trademarks of their 
respective owners.<br/><br/>
+</div>
+</div>
+
+  <script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ga('create', 'UA-53379651-1', 'auto');
+ga('send', 'pageview');
+</script>
+<script type="text/javascript" 
src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-548b2caa33765e8d"; 
async="async"></script>
+
+</body>
+</html>
diff --git a/output/zh/blog/index.html b/output/zh/blog/index.html
index d42f5debd..26ccf2521 100644
--- a/output/zh/blog/index.html
+++ b/output/zh/blog/index.html
@@ -140,6 +140,11 @@
 </div>
 
 <div class="int_text" align="left"><!-- previously: site.posts -->
+<p><a class="post-link" 
href="/zh/blog/2023/03/02/drill-1.21.0-released/">Announcing Drill 
1.21!</a><br/>
+<span class="post-date">Posted on Mar 2, 2023
+by Charles Givre</span>
+<br/>Announcing Drill 1.21: New Connectors, Functions and Much Better 
Stability.</p>
+<!-- previously: site.posts -->
 <p><a class="post-link" 
href="/zh/blog/2023/01/07/drill-1.20.3-released/">Drill 1.20.3 Released</a><br/>
 <span class="post-date">Posted on Jan 7, 2023
 by James Turton</span>
diff --git a/output/zh/docs/aggregate-and-aggregate-statistical/index.html 
b/output/zh/docs/aggregate-and-aggregate-statistical/index.html
index 664c668d8..8c0690d57 100644
--- a/output/zh/docs/aggregate-and-aggregate-statistical/index.html
+++ b/output/zh/docs/aggregate-and-aggregate-statistical/index.html
@@ -1505,39 +1505,39 @@ queries.</p>
   </thead>
   <tbody>
     <tr>
-      <td>ANY_VALUE(expression)</td>
+      <td>ANY_VALUE(x)</td>
       <td>BIT, INT, BIGINT, FLOAT4, FLOAT8, DATE, TIMESTAMP, TIME, VARCHAR, 
VARBINARY, LIST, MAP, INTERVAL, INTERVALDAY, INTERVALYEAR, VARDECIMAL</td>
       <td>Same as argument type</td>
     </tr>
     <tr>
-      <td>AVG(expression)</td>
+      <td>AVG(x)</td>
       <td>SMALLINT,   INTEGER, BIGINT, FLOAT, DOUBLE, DECIMAL, INTERVAL</td>
       <td>DECIMAL for DECIMAL argument,   DOUBLE for all other arguments</td>
     </tr>
     <tr>
-      <td>BOOL_AND(expression), BOOL_OR(expression)</td>
+      <td>BOOL_AND(x), BOOL_OR(x)</td>
       <td>BIT</td>
       <td>BIT</td>
     </tr>
     <tr>
-      <td>BIT_AND(expression), BIT_OR(expression), BIT_XOR(expression)</td>
+      <td>BIT_AND(x), BIT_OR(x), BIT_XOR(x)</td>
       <td>INT, BIGINT</td>
       <td>Same as argument type</td>
     </tr>
     <tr>
       <td>CORR(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COVAR_POP(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COVAR_SAMP(x,y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>COUNT(*)</td>
@@ -1550,9 +1550,9 @@ queries.</p>
       <td>BIGINT</td>
     </tr>
     <tr>
-      <td>KENDALL_CORRELATION</td>
+      <td>KENDALL_CORRELATION(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>MAX(expression), MIN(expression)</td>
@@ -1560,19 +1560,19 @@ queries.</p>
       <td>Same   as argument type</td>
     </tr>
     <tr>
-      <td>REGR_INTERCEPT</td>
+      <td>REGR_INTERCEPT(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
-      <td>REGR_SLOPE</td>
+      <td>REGR_SLOPE(x, y)</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>STDDEV, STDDEV_POP, STDDEV_SAMP</td>
       <td>Numeric</td>
-      <td>Double</td>
+      <td>DOUBLE</td>
     </tr>
     <tr>
       <td>SUM(expression)</td>
@@ -1665,10 +1665,12 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
 <p><strong>Introduced in release: 1.21</strong></p>
 
 <p>Starting in Drill 1.21 it is possible to follow an aggregate function 
invocation with a boolean expression that will filter the values procesed by 
the aggregate using the following syntax.</p>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>agg_func( column ) FILTER(WHERE boolean_expression)
 </code></pre></div></div>
 
 <p>For example</p>
+
 <div class="language-sql highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="k">SELECT</span>
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">1</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_1_region</span><span class="p">,</span>
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_2_region</span><span class="p">,</span>
@@ -1677,7 +1679,9 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
   <span class="k">count</span><span class="p">(</span><span 
class="n">n_name</span><span class="p">)</span> <span 
class="n">FILTER</span><span class="p">(</span><span class="k">WHERE</span> 
<span class="n">n_regionkey</span> <span class="o">=</span> <span 
class="mi">0</span><span class="p">)</span> <span class="k">AS</span> <span 
class="n">nations_count_in_0_region</span>
 <span class="k">FROM</span> <span class="n">cp</span><span 
class="p">.</span><span class="nv">`tpch/nation.parquet`</span>
 </code></pre></div></div>
+
 <p>will return</p>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
 | nations_count_in_1_region | nations_count_in_2_region | 
nations_count_in_3_region | nations_count_in_4_region | 
nations_count_in_0_region |
 
+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
@@ -1685,7 +1689,10 @@ SELECT ANY_VALUE(employee_id) as anyemp FROM 
cp.`employee.json` GROUP BY salary
 
+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+
 </code></pre></div></div>
 
-<p><strong>N.B.</strong> Some versions of Drill prior to 1.21 do not fail if 
FILTER expressions are included with aggregate function calls, but silently do 
no filtering yielding incorrect results. Filtered aggregates are only supported 
from version 1.21 onward.</p>
+<div class="admonition note">
+  <p class="first admonition-title">Note</p>
+  <p class="last">Some versions of Drill prior to 1.21 do not fail if FILTER 
expressions are included with aggregate function calls, but silently do no 
filtering yielding incorrect results. Filtered aggregates are only supported 
from version 1.21 onward.  </p>
+</div>
 
 <h2 id="avg">AVG</h2>
 
@@ -1827,6 +1834,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="corr">CORR</h2>
+
 <p>Returns the <a 
href="https://en.wikipedia.org/wiki/Pearson_correlation_coefficient";>Pearson 
Correlation Coefficient</a> for a given x, y.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>SELECT CORR (department_id, salary) as correlation FROM 
cp.`employee.json`;
@@ -1838,6 +1846,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="covar_pop">COVAR_POP</h2>
+
 <p>Returns the population covariance for a data set.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>SELECT covar_pop (department_id, salary) AS covariance 
FROM cp.`employee.json`;
@@ -1849,6 +1858,7 @@ SELECT BIT_XOR(position_id) FROM cp.`employee.json`;
 </code></pre></div></div>
 
 <h2 id="covar_samp">COVAR_SAMP</h2>
+
 <p>Returns the sample covariance for a data set.</p>
 
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>select covar_samp (department_id, salary) as covariance 
from cp.`employee.json`;
@@ -1876,8 +1886,8 @@ Returns the number of values of the specified 
expression.</li>
 Returns the number of distinct values in the expression.</li>
   <li>ALL expression<br />
 Returns the number of values of the specified expression.</li>
-  <li>* (asterisk)\</li>
-  <li>Returns the number of records in the table.</li>
+  <li>* (asterisk)<br />
+Returns the number of records in the table.</li>
 </ul>
 
 <h3 id="count-examples">COUNT Examples</h3>
@@ -1931,6 +1941,7 @@ SELECT COUNT(*) FROM cp.`employee.json`;
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">kendall_correlation</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  0.2
 
 1 row selected (0.213 seconds)
@@ -2136,6 +2147,7 @@ computation of table statistics accordingly.   </p>
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">regr_intercept</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  4.9715020855109255
 
 1 row selected (0.221 seconds)
@@ -2157,6 +2169,7 @@ computation of table statistics accordingly.   </p>
 <span class="p">)</span>
 <span class="k">select</span> <span class="n">regr_slope</span><span 
class="p">(</span><span class="n">x</span><span class="o">+</span><span 
class="n">random</span><span class="p">(),</span> <span class="n">x</span><span 
class="o">+</span><span class="n">random</span><span class="p">()</span><span 
class="o">+</span><span class="mi">5</span><span class="p">)</span> <span 
class="k">from</span> <span class="n">seq</span><span class="p">;</span>
 </code></pre></div></div>
+
 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>EXPR$0  0.9719696129009783
 
 1 row selected (0.283 seconds)
diff --git a/output/zh/docs/statistical/index.html 
b/output/zh/docs/statistical/index.html
index 36be98010..eff8bc228 100644
--- a/output/zh/docs/statistical/index.html
+++ b/output/zh/docs/statistical/index.html
@@ -1504,7 +1504,7 @@
   </thead>
   <tbody>
     <tr>
-      <td>width_bucket</td>
+      <td>width_bucket(value, min, max, buckets)</td>
       <td>INT</td>
       <td>Returns the 1-based bucket index of the value after dividing the 
interval between min and max into the given number of buckets</td>
     </tr>
@@ -1513,7 +1513,7 @@
 
 <h2 id="width_bucket">WIDTH_BUCKET</h2>
 
-<p>Returns the 1-based bucket index of <em>value</em> after dividing the 
interval between <em>min</em> and_ max_ into the given number of buckets. A 
<em>value</em> that falls outside the given range are given an index of 0 
(<em>value</em> &lt; <em>min</em>) or <em>buckets</em> + 1 (<em>value</em> &gt; 
<em>max</em>).</p>
+<p>Returns the 1-based bucket index of <em>value</em> after dividing the 
interval between <em>min</em> and <em>max</em> into the given number of 
buckets. A <em>value</em> that falls outside the given range are given an index 
of 0 (<em>value</em> &lt; <em>min</em>) or <em>buckets</em> + 1 (<em>value</em> 
&gt; <em>max</em>).</p>
 
 <h3 id="width_bucket-syntax">WIDTH_BUCKET Syntax</h3>
 
diff --git a/output/zh/feed.xml b/output/zh/feed.xml
index 96dd92b43..efb0d0402 100644
--- a/output/zh/feed.xml
+++ b/output/zh/feed.xml
@@ -6,10 +6,87 @@
 </description>
     <link>/</link>
     <atom:link href="/zh/feed.xml" rel="self" type="application/rss+xml"/>
-    <pubDate>Fri, 03 Mar 2023 11:26:27 +0000</pubDate>
-    <lastBuildDate>Fri, 03 Mar 2023 11:26:27 +0000</lastBuildDate>
+    <pubDate>Fri, 03 Mar 2023 11:55:14 +0000</pubDate>
+    <lastBuildDate>Fri, 03 Mar 2023 11:55:14 +0000</lastBuildDate>
     <generator>Jekyll v3.9.1</generator>
     
+      <item>
+        <title>Announcing Drill 1.21!</title>
+        <description>&lt;h1 
id=&quot;announcing-drill-121-new-connectors-functions-and-much-better-stability&quot;&gt;Announcing
 Drill 1.21: New Connectors, Functions and Much Better Stability&lt;/h1&gt;
+&lt;p&gt;The Apache Drill PMC is pleased to announce a milestone release of 
Apache Drill. Since the last release of Drill the team has been hard at work 
quashing bugs and making overall functionality improvements. The TL;DR includes 
the following:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;New connectors including Apache Iceberg, Delta Lake, Microsoft 
Access, GoogleSheets, and Box&lt;/li&gt;
+  &lt;li&gt;Efficient cross-cloud query capability&lt;/li&gt;
+  &lt;li&gt;Greatly improved access controls to include user translation 
support for all storage plugins&lt;/li&gt;
+  &lt;li&gt;Greatly improved query planning and implicit casting.&lt;/li&gt;
+  &lt;li&gt;New BI-focused SQL operators including &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;PIVOT&lt;/code&gt;, 
&lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;UNPIVOT&lt;/code&gt;, &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;EXCEPT&lt;/code&gt; 
and &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;INTERSECT&lt;/code&gt;&lt;/li&gt;
+  &lt;li&gt;New functions for computing regression lines and trends.&lt;/li&gt;
+  &lt;li&gt;New and updated date manipulation functions.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Overall, Drill 1.21 is much more capable and stable than previous 
versions.&lt;/p&gt;
+
+&lt;h2 id=&quot;calcite-were-back&quot;&gt;Calcite, We’re Back!&lt;/h2&gt;
+&lt;p&gt;Drill relies on another open source project, Apache Calcite for its 
query planning. The query planning process is a huge part of the overall 
functionality of Drill. Unfortunately, about three years ago, there were some 
issues in Calcite which forced Drill to fork it and rely on that fork. As a 
result, Drill was essentially stuck with a three year old query planner, but 
more importantly, bugs that were fixed in Calcite, as well as new capabilities 
were not finding their way into  [...]
+
+&lt;p&gt;That is no longer the case. Drill 1.21 is now running on the latest 
stable version of Calcite, version 1.33. As a result, we’ve been able to close 
countless JIRA tickets of various queries failing and other random bugs that 
were the result of query planning bugs.&lt;/p&gt;
+
+&lt;p&gt;What this means for you as a user is that you’ll see much fewer 
queries failing and better overall performance in terms of speed and stability. 
You’ll see better optimizations being pushed down to JDBC data sources as well 
as support for BigQuery, Athena and other JDBC data sources. We hope to keep 
Drill away from Calcite forks so I hope that we will work with the Calcite 
community to keep our tools in sync.&lt;/p&gt;
+
+&lt;h2 
id=&quot;improved-implicit-casting-rules-reduce-schema-change-failures&quot;&gt;Improved
 Implicit Casting Rules Reduce Schema Change Failures&lt;/h2&gt;
+&lt;p&gt;From this author’s perspective, one of the biggest improvements in 
Drill is one of the least noticeable and that is the result of improved 
implicit casting. One of Drill’s unique features is its ability to infer the 
structure, or schema of your data. However, this can be problematic when the 
schema changes. When I used to teach Drill, I used to have spend a considerable 
amount of time teaching students how to cast data from one data type to another 
to ensure that the queries wou [...]
+
+&lt;p&gt;When using latest version of Drill, you’ll find that queries will 
work without the need for much if any casting. In short, they’ll do what you 
expect them to do. It’s really a high on magic functionality.&lt;/p&gt;
+
+&lt;h2 
id=&quot;integrations-with-the-modern-and-not-so-modern-data-stack&quot;&gt;Integrations
 with the Modern and Not-so-Modern Data Stack&lt;/h2&gt;
+&lt;p&gt;The new version of Drill features several new connectors and readers 
that will enable users to connect to the “modern data stack”, specifically 
support for Apache Iceberg and Delta Lake.&lt;/p&gt;
+
+&lt;h3 id=&quot;breaking-the-iceberg&quot;&gt;Breaking the Iceberg&lt;/h3&gt;
+&lt;p&gt;Iceberg is a high-performance format for huge analytic tables. 
Iceberg brings the reliability and simplicity of SQL tables to big data, while 
making it possible for engines like Drill to safely work with the same tables, 
at the same time. In addition to being able to query data directly from Iceberg 
tables, Drill also allows users to query the Iceberg table metadata as well as 
snapshots.  &lt;a 
href=&quot;https://drill.apache.org/docs/iceberg-format-plugin/&quot;&gt;Complete
 doc [...]
+
+&lt;h3 id=&quot;querying-delta-lake&quot;&gt;Querying Delta Lake&lt;/h3&gt;
+&lt;p&gt;Lest we offend someone, we’re not going to get into the debate 
between Iceberg and Delta lake (after all, let’s not argue about who killed 
whom), but Delta Lake, if you aren’t familiar with it, is another modern table 
format which allows ACID transactions, versioning etc. In version 1.21, Drill 
adds support for Delta Lake tables, so users can query Delta Lake tables as 
well as associated metadata. You can also query specific versions of files in 
delta lake.  &lt;a href=&quot;htt [...]
+
+&lt;h3 id=&quot;accessing-access&quot;&gt;Accessing Access&lt;/h3&gt;
+&lt;p&gt;A surprising number of people use Microsoft Access as a database for 
their business data. With version 1.21, Apache Drill can now natively query 
Microsoft Access database files using Drill. This can be a major benefit for 
those looking to migrate data from Access into more modern formats such as 
parquet or even other relational databases. Drill will support Access files 
from version 1997 and up.&lt;/p&gt;
+
+&lt;h3 id=&quot;oh-sheets&quot;&gt;Oh Sheets!&lt;/h3&gt;
+&lt;p&gt;In addition to all of the above, Drill can now query data directly 
from GoogleSheets. In addition to being able to query this data source, Drill 
can read, write, delete and append to GoogleSheets. Google doesn’t make it 
easy, so if this is a feature you are interested in, you’ll definitely want to 
&lt;a 
href=&quot;https://drill.apache.org/docs/google-sheets-storage-plugin/&quot;&gt;read
 the documentation here&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h3 id=&quot;remote-data&quot;&gt;Remote Data&lt;/h3&gt;
+&lt;p&gt;As you can see, Drill has significantly expanded the number of data 
sources and types that it can query. A part of this work has also been to 
improve the implementation behind filesystems. As a result, Drill can now query 
data stored on Dropbox, and Box. We added support for filesystems which use 
OAuth 2.0 for authorization so this means that more extended file systems are 
likely coming your way for the next release.&lt;/p&gt;
+
+&lt;h2 id=&quot;greatly-improved-access-controls&quot;&gt;Greatly Improved 
Access Controls&lt;/h2&gt;
+&lt;p&gt;Managing access controls and credentials on a federated query engine 
is a complicated task. Drill has supported a concept called user impersonation 
which basically means that Drill can execute queries using the credentials of 
the logged in user. This concept works well for querying file systems such as 
Hadoop, and other data sources that have the same concepts, however it does not 
work at all with data sources that have different concepts of users, or in the 
case of OAuth enable [...]
+
+&lt;p&gt;To answer this challenge, Drill 1.21 introduces the concept of user 
translation. The idea of user translation is that, when enabled, every user 
will have their own unique credentials for specific data sources. Thus, when 
that user queries a specific data source, that user’s credentials are used to 
execute the query. This is configurable on an individual data source basis. 
Ultimately, what this means is that you no longer have to create service 
accounts to access data via Drill.& [...]
+
+&lt;h2 id=&quot;drilling-across-the-clouds&quot;&gt;Drilling Across the 
Clouds&lt;/h2&gt;
+&lt;p&gt;While we’re on the subject of clouds, as you may be aware, Drill can 
query data stored in cloud-based file systems such as S3, Azure, GCP etc. One 
of the challenges however, is that if you have data stored in multiple clouds, 
it can become very inefficient to query this data, especially from the 
perspective of network IO. As of Drill 1.21, Drill adds a storage plugin which 
we are calling Drill on Drill.&lt;/p&gt;
+
+&lt;p&gt;Let’s say that you had a Drill cluster in S3, but you had data in 
both S3 and Azure. With the new Drill on Drill capability, you could install an 
additional Drill cluster in Azure, then query both from either Drill cluster. 
The advantage is that the queries would be pushed down to the Drill cluster 
where the data resides. So if you query Azure from S3, you aren’t sending tons 
of data back and forth.&lt;/p&gt;
+
+&lt;h2 id=&quot;drill-now-supports-more-bi-operators&quot;&gt;Drill Now 
Supports More BI Operators&lt;/h2&gt;
+&lt;p&gt;While Drill held more or less to the SQL standard, it was missing 
some BI operators that had become commonplace among SQL platforms. Drill 1.21 
introduces the &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;PIVOT&lt;/code&gt;, and &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNPIVOT&lt;/code&gt; 
operators which covert rows to columns or vice versa, much in the same way a 
pivot table works in Excel. Additionally, we added set operators &lt [...]
+
+&lt;h2 id=&quot;new-statistical-functions&quot;&gt;New Statistical 
Functions&lt;/h2&gt;
+&lt;p&gt;Drill 1.21 adds new SQL functions for statistical summaries including 
&lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;kendall_correlation&lt;/code&gt; for calculating 
correlation coefficients, &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;width_bucket&lt;/code&gt; which is a SQL function 
for computing histograms and distributions, and two other functions for 
computing regression lines.&lt;/p&gt;
+
+&lt;p&gt;Lastly, we’ve also added additional date/time manipulation functions 
which will make working with dates significantly easier.&lt;/p&gt;
+
+&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;
+&lt;p&gt;The big question is where do we go from here? We’ve already started 
working on adding support for additional BI operators such as &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;CUBE&lt;/code&gt;, 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GROUPING 
SETS&lt;/code&gt; and &lt;code class=&quot;language-plaintext 
highlighter-rouge&quot;&gt;ROLLUP&lt;/code&gt;, as well as &lt;code 
class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG [...]
+</description>
+        <pubDate>Thu, 02 Mar 2023 00:00:00 +0000</pubDate>
+        <link>/blog/2023/03/02/drill-1.21.0-released/</link>
+        <guid isPermaLink="true">/blog/2023/03/02/drill-1.21.0-released/</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
       <item>
         <title>Drill 1.20.3 Released</title>
         <description>&lt;p&gt;Today, we’re happy to announce the availability 
of Drill 1.20.3. You can download it &lt;a 
href=&quot;https://drill.apache.org/download/&quot;&gt;here&lt;/a&gt;. You can 
find a complete list of improvements and JIRAs resolved in the 1.20.3 release 
&lt;a 
href=&quot;/docs/apache-drill-1-20-3-release-notes/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
@@ -245,30 +322,6 @@ In [7]: while True:
         <guid isPermaLink="true">/blog/2021/06/10/drill-1.19-released/</guid>
         
         
-        <category>blog</category>
-        
-      </item>
-    
-      <item>
-        <title>Drill 1.18 Released</title>
-        <description>&lt;p&gt;Today, we’re happy to announce the availability 
of Drill 1.18.0. You can download it &lt;a 
href=&quot;https://drill.apache.org/download/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-
-&lt;h2 id=&quot;this-release-provides-the-following-new-features&quot;&gt;This 
release provides the following new Features:&lt;/h2&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-6835&quot;&gt;DRILL-6835&lt;/a&gt;
 - Schema Provision using File / Table Function&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7326&quot;&gt;DRILL-7326&lt;/a&gt;
 - Support repeated lists for CTAS parquet format&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7343&quot;&gt;DRILL-7343&lt;/a&gt;
 - Add User-Agent UDFs to Drill&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://issues.apache.org/jira/browse/DRILL-7374&quot;&gt;DRILL-7374&lt;/a&gt;
 - Support for IPV6 address&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;You can find a complete list of improvements and JIRAs resolved in 
the 1.18.0 release &lt;a 
href=&quot;/docs/apache-drill-1-18-0-release-notes/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-</description>
-        <pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate>
-        <link>/blog/2020/09/05/drill-1.18-released/</link>
-        <guid isPermaLink="true">/blog/2020/09/05/drill-1.18-released/</guid>
-        
-        
         <category>blog</category>
         
       </item>
diff --git a/output/zh/index.html b/output/zh/index.html
index 9b2bd381c..dc222ff65 100644
--- a/output/zh/index.html
+++ b/output/zh/index.html
@@ -202,9 +202,9 @@
   <div class="news">News:
   </div>
   
-  <div><a href="/zh/blog/2023/01/07/drill-1.20.3-released/">Drill 1.20.3 
Released</a><br/><span>(James Turton)</span></div>
+  <div><a href="/zh/blog/2023/03/02/drill-1.21.0-released/">Announcing Drill 
1.21!</a><br/><span>(Charles Givre)</span></div>
   
-  <div><a href="/zh/blog/2022/08/03/drill-1.20.2-released/">Drill 1.20.2 
Released</a><br/><span>(James Turton)</span></div>
+  <div><a href="/zh/blog/2023/01/07/drill-1.20.3-released/">Drill 1.20.3 
Released</a><br/><span>(James Turton)</span></div>
 </div>
 <div class="mw introWrapper">
   <table class="intro" cellpadding="0" cellspacing="0" align="center">


Reply via email to