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/beam.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 7e8667a  Publishing website 2019/06/05 18:10:22 at commit e6104a2
7e8667a is described below

commit 7e8667ac0adc4681fe1a0476a791382b342fbe8b
Author: jenkins <[email protected]>
AuthorDate: Wed Jun 5 18:10:22 2019 +0000

    Publishing website 2019/06/05 18:10:22 at commit e6104a2
---
 .../2019/06/04/adding-data-sources-to-sql.html     | 424 +++++++++++++++++++++
 website/generated-content/blog/index.html          |  44 +++
 website/generated-content/feed.xml                 | 322 ++++++++++------
 website/generated-content/index.html               |  10 +-
 4 files changed, 675 insertions(+), 125 deletions(-)

diff --git 
a/website/generated-content/blog/2019/06/04/adding-data-sources-to-sql.html 
b/website/generated-content/blog/2019/06/04/adding-data-sources-to-sql.html
new file mode 100644
index 0000000..234f30a
--- /dev/null
+++ b/website/generated-content/blog/2019/06/04/adding-data-sources-to-sql.html
@@ -0,0 +1,424 @@
+<!DOCTYPE html>
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+
+<html lang="en">
+  <!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>Adding new Data Sources to Beam SQL CLI</title>
+  <meta name="description" content="A new, exciting feature that came to 
Apache Beam is the ability to useSQL in your pipelines. This is done using 
Beam’sSqlTransformin Java pipelines.Beam also...">
+  <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400"; 
rel="stylesheet">
+  <link rel="stylesheet" href="/css/site.css">
+  <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js";></script>
+  <script src="/js/bootstrap.min.js"></script>
+  <script src="/js/language-switch.js"></script>
+  <script src="/js/fix-menu.js"></script>
+  <script src="/js/section-nav.js"></script>
+  <script src="/js/page-nav.js"></script>
+  <link rel="canonical" 
href="https://beam.apache.org/blog/2019/06/04/adding-data-sources-to-sql.html"; 
data-proofer-ignore>
+  <link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico">
+  <link rel="alternate" type="application/rss+xml" title="Apache Beam" 
href="https://beam.apache.org/feed.xml";>
+  <link rel="stylesheet" 
href="https://use.fontawesome.com/releases/v5.4.1/css/all.css"; 
integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz"
 crossorigin="anonymous">
+  <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','//www.google-analytics.com/analytics.js','ga');
+    ga('create', 'UA-73650088-1', 'auto');
+    ga('send', 'pageview');
+  </script>
+</head>
+
+  <body class="body ">
+    <!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+
+<nav class="header navbar navbar-fixed-top">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" aria-expanded="false" 
aria-controls="navbar">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+
+      <a href="/" class="navbar-brand" >
+        <img alt="Brand" style="height: 25px" 
src="/images/beam_logo_navbar.png">
+      </a>
+    </div>
+
+    <div class="navbar-mask closed"></div>
+
+    <div id="navbar" class="navbar-container closed">
+      <ul class="nav navbar-nav">
+        <li>
+          <a href="/get-started/beam-overview/">Get Started</a>
+        </li>
+        <li>
+          <a href="/documentation/">Documentation</a>
+        </li>
+        <li>
+          <a href="/documentation/sdks/java/">Languages</a>
+        </li>
+        <li>
+          <a href="/documentation/runners/capability-matrix/">RUNNERS</a>
+        </li>
+        <li>
+          <a href="/roadmap/">Roadmap</a>
+        </li>
+        <li>
+          <a href="/contribute/">Contribute</a>
+        </li>
+        <li>
+          <a href="/community/contact-us/">Community</a>
+        </li>
+        <li><a href="/blog">Blog</a></li>
+      </ul>
+      <ul class="nav navbar-nav navbar-right">
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown" 
role="button" aria-haspopup="true" aria-expanded="false"><img 
src="https://www.apache.org/foundation/press/kit/feather_small.png"; alt="Apache 
Logo" style="height:20px;"><span class="caret"></span></a>
+          <ul class="dropdown-menu dropdown-menu-right">
+            <li><a href="http://www.apache.org/";>ASF Homepage</a></li>
+            <li><a href="http://www.apache.org/licenses/";>License</a></li>
+            <li><a href="http://www.apache.org/security/";>Security</a></li>
+            <li><a 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+            <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+            <li><a 
href="https://www.apache.org/foundation/policies/conduct";>Code of 
Conduct</a></li>
+          </ul>
+        </li>
+        <li>
+          <!--
+            data-proofer-ignore disables link checking from website test 
automation.
+            GitHub links will not resolve until the markdown source is 
available on the master branch.
+            New pages would fail validation during development / PR test 
automation.
+          -->
+          <a 
href="https://github.com/apache/beam/edit/master/website/src/_posts/2019-05-01-adding-data-sources-to-sql.md";
 data-proofer-ignore>
+            <i class="far fa-edit fa-lg" alt="Edit on GitHub" title="Edit on 
GitHub"></i>
+          </a>
+        </li>
+      </ul>
+    </div>
+</nav>
+
+    <div class="body__contained">
+      <!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+
+
+
+<article class="post" itemscope itemtype="http://schema.org/BlogPosting";>
+
+  <header class="post-header">
+    <h1 class="post-title" itemprop="name headline">Adding new Data Sources to 
Beam SQL CLI</h1>
+    <p class="post-meta"><time datetime="2019-06-04T01:00:01-07:00" 
itemprop="datePublished">Jun 4, 2019</time> •
+       Pablo Estrada [<a href="https://twitter.com/polecitoem";>@polecitoem</a>]
+      
+    </p>
+  </header>
+
+  <div class="post-content" itemprop="articleBody">
+    <!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<p>A new, exciting feature that came to Apache Beam is the ability to use
+SQL in your pipelines. This is done using Beam’s
+<a 
href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/extensions/sql/SqlTransform.html";><code
 class="highlighter-rouge">SqlTransform</code></a>
+in Java pipelines.</p>
+
+<p>Beam also has a fancy new SQL command line that you can use to query your
+data interactively, be it Batch or Streaming. If you haven’t tried it, check 
out
+<a href="http://bit.ly/ExploreBeamSQL";>http://bit.ly/ExploreBeamSQL</a>.</p>
+
+<p>A nice feature of the SQL CLI is that you can use <code 
class="highlighter-rouge">CREATE EXTERNAL TABLE</code>
+commands to <em>add</em> data sources to be accessed in the CLI. Currently, 
the CLI
+supports creating tables from BigQuery, PubSub, Kafka, and text files. In this
+post, we explore how to add new data sources, so that you will be able to
+consume data from other Beam sources.</p>
+
+<!--more-->
+
+<p>The table provider we will be implementing in this post will be generating a
+continuous unbounded stream of integers. It will be based on the
+<a 
href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/GenerateSequence.html";><code
 class="highlighter-rouge">GenerateSequence</code> PTransform</a>
+from the Beam SDK. In the end will be able to define and use the sequence 
generator
+in SQL like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>CREATE EXTERNAL 
TABLE                      -- all tables in Beam are external, they are not 
persisted
+  sequenceTable                              -- table alias that will be used 
in queries
+  (
+         sequence BIGINT,                  -- sequence number
+         event_timestamp TIMESTAMP         -- timestamp of the generated event
+  )
+TYPE sequence                              -- type identifies the table 
provider
+TBLPROPERTIES '{ elementsPerSecond : 12 }' -- optional rate at which events 
are generated
+</code></pre>
+</div>
+
+<p>And we’ll be able to use it in queries like so:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>SELECT sequence 
FROM sequenceTable;
+</code></pre>
+</div>
+
+<p>Let’s dive in!</p>
+
+<h3 id="implementing-a-tableprovider">Implementing a <code 
class="highlighter-rouge">TableProvider</code></h3>
+
+<p>Beam’s <code class="highlighter-rouge">SqlTransform</code> works by relying 
on <code class="highlighter-rouge">TableProvider</code>s, which it uses when
+one uses a <code class="highlighter-rouge">CREATE EXTERNAL TABLE</code> 
statement. If you are looking to add a new
+data source to the Beam SQL CLI, then you will want to add a <code 
class="highlighter-rouge">TableProvider</code> to
+do it. In this post, I will show what steps are necessary to create a new table
+provider for the
+<a 
href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/GenerateSequence.html";><code
 class="highlighter-rouge">GenerateSequence</code> transform</a> available in 
the Java SDK.</p>
+
+<p>The <code class="highlighter-rouge">TableProvider</code> classes are under
+<a 
href="https://github.com/apache/beam/tree/master/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider";><code
 
class="highlighter-rouge">sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/</code></a>.
 If you look in there, you can find providers, and their implementations, for 
all available data sources. So, you just need to add the one you want, along 
with an implementation of <code class="highlighter-rouge">BaseBe [...]
+
+<h3 id="the-generatesequencetableprovider">The 
GenerateSequenceTableProvider</h3>
+
+<p>Our table provider looks like this:</p>
+
+<div class="language-java highlighter-rouge"><pre 
class="highlight"><code><span class="nd">@AutoService</span><span 
class="o">(</span><span class="n">TableProvider</span><span 
class="o">.</span><span class="na">class</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">GenerateSequenceTableProvider</span> <span class="kd">extends</span> 
<span class="n">InMemoryMetaTableProvider</span> <span class="o">{</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span 
class="nf">getTableType</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="s">"sequence"</span><span 
class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">BeamSqlTable</span> <span 
class="nf">buildBeamSqlTable</span><span class="o">(</span><span 
class="n">Table</span> <span class="n">table</span><span class="o">)</span> 
<span class="o">{</span>
+    <span class="k">return</span> <span class="k">new</span> <span 
class="nf">GenerateSequenceTable</span><span class="o">(</span><span 
class="n">table</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>All it does is give a type to the table - and it implements the
+<code class="highlighter-rouge">buildBeamSqlTable</code> method, which simply 
returns a <code class="highlighter-rouge">BeamSqlTable</code> defined by
+our <code class="highlighter-rouge">GenerateSequenceTable</code> 
implementation.</p>
+
+<h3 id="the-generatesequencetable">The GenerateSequenceTable</h3>
+
+<p>We want a table implementation that supports streaming properly, so we will
+allow users to define the number of elements to be emitted per second. We will
+define a simple table that emits sequential integers in a streaming fashion.
+This looks like so:</p>
+
+<div class="language-java highlighter-rouge"><pre 
class="highlight"><code><span class="kd">class</span> <span 
class="nc">GenerateSequenceTable</span> <span class="kd">extends</span> <span 
class="n">BaseBeamTable</span> <span class="kd">implements</span> <span 
class="n">Serializable</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">Schema</span> <span 
class="n">TABLE_SCHEMA</span> <span class="o">=</span>
+      <span class="n">Schema</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span class="n">Field</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="s">"sequence"</span><span class="o">,</span> <span 
class="n">FieldType</span><span class="o">.</span><span 
class="na">INT64</span><span class="o">),</span> <span 
class="n">Field</span><span class="o">.</span><span class="na">of</span><span 
class="o">(</span><span clas [...]
+
+  <span class="n">Integer</span> <span class="n">elementsPerSecond</span> 
<span class="o">=</span> <span class="mi">5</span><span class="o">;</span>
+
+  <span class="n">GenerateSequenceTable</span><span class="o">(</span><span 
class="n">Table</span> <span class="n">table</span><span class="o">)</span> 
<span class="o">{</span>
+    <span class="kd">super</span><span class="o">(</span><span 
class="n">TABLE_SCHEMA</span><span class="o">);</span>
+    <span class="k">if</span> <span class="o">(</span><span 
class="n">table</span><span class="o">.</span><span 
class="na">getProperties</span><span class="o">().</span><span 
class="na">containsKey</span><span class="o">(</span><span 
class="s">"elementsPerSecond"</span><span class="o">))</span> <span 
class="o">{</span>
+      <span class="n">elementsPerSecond</span> <span class="o">=</span> <span 
class="n">table</span><span class="o">.</span><span 
class="na">getProperties</span><span class="o">().</span><span 
class="na">getInteger</span><span class="o">(</span><span 
class="s">"elementsPerSecond"</span><span class="o">);</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">PCollection</span><span 
class="o">.</span><span class="na">IsBounded</span> <span 
class="nf">isBounded</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">IsBounded</span><span 
class="o">.</span><span class="na">UNBOUNDED</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">PCollection</span><span 
class="o">&lt;</span><span class="n">Row</span><span class="o">&gt;</span> 
<span class="nf">buildIOReader</span><span class="o">(</span><span 
class="n">PBegin</span> <span class="n">begin</span><span class="o">)</span> 
<span class="o">{</span>
+    <span class="k">return</span> <span class="n">begin</span>
+        <span class="o">.</span><span class="na">apply</span><span 
class="o">(</span><span class="n">GenerateSequence</span><span 
class="o">.</span><span class="na">from</span><span class="o">(</span><span 
class="mi">0</span><span class="o">).</span><span 
class="na">withRate</span><span class="o">(</span><span 
class="n">elementsPerSecond</span><span class="o">,</span> <span 
class="n">Duration</span><span class="o">.</span><span 
class="na">standardSeconds</span><span class="o">(</span><sp [...]
+        <span class="o">.</span><span class="na">apply</span><span 
class="o">(</span>
+            <span class="n">MapElements</span><span class="o">.</span><span 
class="na">into</span><span class="o">(</span><span 
class="n">TypeDescriptor</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span class="n">Row</span><span 
class="o">.</span><span class="na">class</span><span class="o">))</span>
+                <span class="o">.</span><span class="na">via</span><span 
class="o">(</span><span class="n">elm</span> <span class="o">-&gt;</span> <span 
class="n">Row</span><span class="o">.</span><span 
class="na">withSchema</span><span class="o">(</span><span 
class="n">TABLE_SCHEMA</span><span class="o">).</span><span 
class="na">addValues</span><span class="o">(</span><span 
class="n">elm</span><span class="o">,</span> <span 
class="n">Instant</span><span class="o">.</span><span class="na [...]
+        <span class="o">.</span><span class="na">setRowSchema</span><span 
class="o">(</span><span class="n">getSchema</span><span class="o">());</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">POutput</span> <span 
class="nf">buildIOWriter</span><span class="o">(</span><span 
class="n">PCollection</span><span class="o">&lt;</span><span 
class="n">Row</span><span class="o">&gt;</span> <span 
class="n">input</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">throw</span> <span class="k">new</span> <span 
class="nf">UnsupportedOperationException</span><span class="o">(</span><span 
class="s">"buildIOWriter unsupported!"</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="the-real-fun">The real fun</h2>
+
+<p>Now that we have implemented the two basic classes (a <code 
class="highlighter-rouge">BaseBeamTable</code>, and a
+<code class="highlighter-rouge">TableProvider</code>), we can start playing 
with them. After building the
+<a href="https://beam.apache.org/documentation/dsls/sql/shell/";>SQL CLI</a>, we
+can now perform selections on the table:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>0: BeamSQL&gt; 
CREATE EXTERNAL TABLE input_seq (
+. . . . . &gt;   sequence BIGINT COMMENT 'this is the primary key',
+. . . . . &gt;   event_time TIMESTAMP COMMENT 'this is the element timestamp'
+. . . . . &gt; )
+. . . . . &gt; TYPE 'sequence';
+No rows affected (0.005 seconds)
+</code></pre>
+</div>
+
+<p>And let’s select a few rows:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>0: BeamSQL&gt; 
SELECT * FROM input_seq LIMIT 5;
++---------------------+------------+
+|      sequence       | event_time |
++---------------------+------------+
+| 0                   | 2019-05-21 00:36:33 |
+| 1                   | 2019-05-21 00:36:33 |
+| 2                   | 2019-05-21 00:36:33 |
+| 3                   | 2019-05-21 00:36:33 |
+| 4                   | 2019-05-21 00:36:33 |
++---------------------+------------+
+5 rows selected (1.138 seconds)
+</code></pre>
+</div>
+
+<p>Now let’s try something more interesting. Such as grouping. This will also 
let
+us make sure that we’re providing the timestamp for each row properly:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>0: BeamSQL&gt; 
SELECT
+. . . . . &gt;   COUNT(sequence) as elements,
+. . . . . &gt;   TUMBLE_START(event_time, INTERVAL '2' SECOND) as window_start
+. . . . . &gt; FROM input_seq
+. . . . . &gt; GROUP BY TUMBLE(event_time, INTERVAL '2' SECOND) LIMIT 5;
++---------------------+--------------+
+|      elements       | window_start |
++---------------------+--------------+
+| 6                   | 2019-06-05 00:39:24 |
+| 10                  | 2019-06-05 00:39:26 |
+| 10                  | 2019-06-05 00:39:28 |
+| 10                  | 2019-06-05 00:39:30 |
+| 10                  | 2019-06-05 00:39:32 |
++---------------------+--------------+
+5 rows selected (10.142 seconds)
+</code></pre>
+</div>
+
+<p>And voilà! We can start playing with some interesting streaming queries to 
our
+sequence generator.</p>
+
+  </div>
+
+</article>
+
+    </div>
+    <!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. See accompanying LICENSE file.
+-->
+
+<footer class="footer">
+  <div class="footer__contained">
+    <div class="footer__cols">
+      <div class="footer__cols__col">
+        <div class="footer__cols__col__logo">
+          <img src="/images/beam_logo_circle.svg" class="footer__logo" 
alt="Beam logo">
+        </div>
+        <div class="footer__cols__col__logo">
+          <img src="/images/apache_logo_circle.svg" class="footer__logo" 
alt="Apache logo">
+        </div>
+      </div>
+      <div class="footer__cols__col footer__cols__col--md">
+        <div class="footer__cols__col__title">Start</div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/beam-overview/">Overview</a></div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/quickstart-java/">Quickstart (Java)</a></div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/quickstart-py/">Quickstart (Python)</a></div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/quickstart-go/">Quickstart (Go)</a></div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/downloads/">Downloads</a></div>
+      </div>
+      <div class="footer__cols__col footer__cols__col--md">
+        <div class="footer__cols__col__title">Docs</div>
+        <div class="footer__cols__col__link"><a 
href="/documentation/programming-guide/">Concepts</a></div>
+        <div class="footer__cols__col__link"><a 
href="/documentation/pipelines/design-your-pipeline/">Pipelines</a></div>
+        <div class="footer__cols__col__link"><a 
href="/documentation/runners/capability-matrix/">Runners</a></div>
+      </div>
+      <div class="footer__cols__col footer__cols__col--md">
+        <div class="footer__cols__col__title">Community</div>
+        <div class="footer__cols__col__link"><a 
href="/contribute/">Contribute</a></div>
+        <div class="footer__cols__col__link"><a 
href="https://projects.apache.org/committee.html?beam"; target="_blank">Team<img 
src="/images/external-link-icon.png"
+                                                                               
                                                 width="14" height="14"
+                                                                               
                                                 alt="External link."></a></div>
+        <div class="footer__cols__col__link"><a 
href="/contribute/presentation-materials/">Media</a></div>
+      </div>
+      <div class="footer__cols__col footer__cols__col--md">
+        <div class="footer__cols__col__title">Resources</div>
+        <div class="footer__cols__col__link"><a href="/blog/">Blog</a></div>
+        <div class="footer__cols__col__link"><a 
href="/get-started/support/">Support</a></div>
+        <div class="footer__cols__col__link"><a 
href="https://github.com/apache/beam";>GitHub</a></div>
+      </div>
+    </div>
+  </div>
+  <div class="footer__bottom">
+    &copy;
+    <a href="http://www.apache.org";>The Apache Software Foundation</a>
+    | <a href="/privacy_policy">Privacy Policy</a>
+    | <a href="/feed.xml">RSS Feed</a>
+    <br><br>
+    Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are
+    either registered trademarks or trademarks of The Apache Software
+    Foundation. All other products or name brands are trademarks of their
+    respective holders, including The Apache Software Foundation.
+  </div>
+</footer>
+
+  </body>
+</html>
diff --git a/website/generated-content/blog/index.html 
b/website/generated-content/blog/index.html
index 25942d7..df12054 100644
--- a/website/generated-content/blog/index.html
+++ b/website/generated-content/blog/index.html
@@ -153,6 +153,50 @@ limitations under the License.
 <p>This is the blog for the Apache Beam project. This blog contains news and 
updates
 for the project.</p>
 
+<h3 id="adding-new-data-sources-to-beam-sql-cli"><a class="post-link" 
href="/blog/2019/06/04/adding-data-sources-to-sql.html">Adding new Data Sources 
to Beam SQL CLI</a></h3>
+<p><i>Jun 4, 2019 •
+ Pablo Estrada [<a href="https://twitter.com/polecitoem";>@polecitoem</a>]
+</i></p>
+
+<!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<p>A new, exciting feature that came to Apache Beam is the ability to use
+SQL in your pipelines. This is done using Beam’s
+<a 
href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/extensions/sql/SqlTransform.html";><code
 class="highlighter-rouge">SqlTransform</code></a>
+in Java pipelines.</p>
+
+<p>Beam also has a fancy new SQL command line that you can use to query your
+data interactively, be it Batch or Streaming. If you haven’t tried it, check 
out
+<a href="http://bit.ly/ExploreBeamSQL";>http://bit.ly/ExploreBeamSQL</a>.</p>
+
+<p>A nice feature of the SQL CLI is that you can use <code 
class="highlighter-rouge">CREATE EXTERNAL TABLE</code>
+commands to <em>add</em> data sources to be accessed in the CLI. Currently, 
the CLI
+supports creating tables from BigQuery, PubSub, Kafka, and text files. In this
+post, we explore how to add new data sources, so that you will be able to
+consume data from other Beam sources.</p>
+
+<!-- Render a "read more" button if the post is longer than the excerpt -->
+
+<p>
+<a class="btn btn-default btn-sm" 
href="/blog/2019/06/04/adding-data-sources-to-sql.html" role="button">
+Read more&nbsp;<span class="glyphicon glyphicon-menu-right" 
aria-hidden="true"></span>
+</a>
+</p>
+
+<hr />
+
 <h3 id="apache-beam-katas"><a class="post-link" 
href="/blog/2019/05/30/beam-kata-release.html">Apache Beam Katas</a></h3>
 <p><i>May 30, 2019 •
  Henry Suryawirawan [<a href="https://twitter.com/henry_ken";>@henry_ken</a>]
diff --git a/website/generated-content/feed.xml 
b/website/generated-content/feed.xml
index 1817379..34d07a2 100644
--- a/website/generated-content/feed.xml
+++ b/website/generated-content/feed.xml
@@ -20,6 +20,208 @@
     <generator>Jekyll v3.2.0</generator>
     
       <item>
+        <title>Adding new Data Sources to Beam SQL CLI</title>
+        <description>&lt;!--
+Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+--&gt;
+
+&lt;p&gt;A new, exciting feature that came to Apache Beam is the ability to use
+SQL in your pipelines. This is done using Beam’s
+&lt;a 
href=&quot;https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/extensions/sql/SqlTransform.html&quot;&gt;&lt;code
 class=&quot;highlighter-rouge&quot;&gt;SqlTransform&lt;/code&gt;&lt;/a&gt;
+in Java pipelines.&lt;/p&gt;
+
+&lt;p&gt;Beam also has a fancy new SQL command line that you can use to query 
your
+data interactively, be it Batch or Streaming. If you haven’t tried it, check 
out
+&lt;a 
href=&quot;http://bit.ly/ExploreBeamSQL&quot;&gt;http://bit.ly/ExploreBeamSQL&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;A nice feature of the SQL CLI is that you can use &lt;code 
class=&quot;highlighter-rouge&quot;&gt;CREATE EXTERNAL TABLE&lt;/code&gt;
+commands to &lt;em&gt;add&lt;/em&gt; data sources to be accessed in the CLI. 
Currently, the CLI
+supports creating tables from BigQuery, PubSub, Kafka, and text files. In this
+post, we explore how to add new data sources, so that you will be able to
+consume data from other Beam sources.&lt;/p&gt;
+
+&lt;!--more--&gt;
+
+&lt;p&gt;The table provider we will be implementing in this post will be 
generating a
+continuous unbounded stream of integers. It will be based on the
+&lt;a 
href=&quot;https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/GenerateSequence.html&quot;&gt;&lt;code
 class=&quot;highlighter-rouge&quot;&gt;GenerateSequence&lt;/code&gt; 
PTransform&lt;/a&gt;
+from the Beam SDK. In the end will be able to define and use the sequence 
generator
+in SQL like this:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;CREATE EXTERNAL TABLE                
      -- all tables in Beam are external, they are not persisted
+  sequenceTable                              -- table alias that will be used 
in queries
+  (
+         sequence BIGINT,                  -- sequence number
+         event_timestamp TIMESTAMP         -- timestamp of the generated event
+  )
+TYPE sequence                              -- type identifies the table 
provider
+TBLPROPERTIES '{ elementsPerSecond : 12 }' -- optional rate at which events 
are generated
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;And we’ll be able to use it in queries like so:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;SELECT sequence FROM sequenceTable;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;Let’s dive in!&lt;/p&gt;
+
+&lt;h3 id=&quot;implementing-a-tableprovider&quot;&gt;Implementing a &lt;code 
class=&quot;highlighter-rouge&quot;&gt;TableProvider&lt;/code&gt;&lt;/h3&gt;
+
+&lt;p&gt;Beam’s &lt;code 
class=&quot;highlighter-rouge&quot;&gt;SqlTransform&lt;/code&gt; works by 
relying on &lt;code 
class=&quot;highlighter-rouge&quot;&gt;TableProvider&lt;/code&gt;s, which it 
uses when
+one uses a &lt;code class=&quot;highlighter-rouge&quot;&gt;CREATE EXTERNAL 
TABLE&lt;/code&gt; statement. If you are looking to add a new
+data source to the Beam SQL CLI, then you will want to add a &lt;code 
class=&quot;highlighter-rouge&quot;&gt;TableProvider&lt;/code&gt; to
+do it. In this post, I will show what steps are necessary to create a new table
+provider for the
+&lt;a 
href=&quot;https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/GenerateSequence.html&quot;&gt;&lt;code
 class=&quot;highlighter-rouge&quot;&gt;GenerateSequence&lt;/code&gt; 
transform&lt;/a&gt; available in the Java SDK.&lt;/p&gt;
+
+&lt;p&gt;The &lt;code 
class=&quot;highlighter-rouge&quot;&gt;TableProvider&lt;/code&gt; classes are 
under
+&lt;a 
href=&quot;https://github.com/apache/beam/tree/master/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider&quot;&gt;&lt;code
 
class=&quot;highlighter-rouge&quot;&gt;sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/&lt;/code&gt;&lt;/a&gt;.
 If you look in there, you can find providers, and their implementations, for 
all available data sources. So, you just need to add the one you want, along 
with an implementati [...]
+
+&lt;h3 id=&quot;the-generatesequencetableprovider&quot;&gt;The 
GenerateSequenceTableProvider&lt;/h3&gt;
+
+&lt;p&gt;Our table provider looks like this:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span 
class=&quot;nd&quot;&gt;@AutoService&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;TableProvider&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;GenerateSequenceTableProvider&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;InMemoryMetaTableProvider&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;getTableType&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&quot;sequence&quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;BeamSqlTable&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;buildBeamSqlTable&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Table&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;GenerateSequenceTable&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;All it does is give a type to the table - and it implements the
+&lt;code class=&quot;highlighter-rouge&quot;&gt;buildBeamSqlTable&lt;/code&gt; 
method, which simply returns a &lt;code 
class=&quot;highlighter-rouge&quot;&gt;BeamSqlTable&lt;/code&gt; defined by
+our &lt;code 
class=&quot;highlighter-rouge&quot;&gt;GenerateSequenceTable&lt;/code&gt; 
implementation.&lt;/p&gt;
+
+&lt;h3 id=&quot;the-generatesequencetable&quot;&gt;The 
GenerateSequenceTable&lt;/h3&gt;
+
+&lt;p&gt;We want a table implementation that supports streaming properly, so 
we will
+allow users to define the number of elements to be emitted per second. We will
+define a simple table that emits sequential integers in a streaming fashion.
+This looks like so:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;GenerateSequenceTable&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;BaseBeamTable&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Serializable&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt; [...]
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Schema&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;TABLE_SCHEMA&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;Schema&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;of&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Field&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;of&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;sequence&quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/sp [...]
+
+  &lt;span class=&quot;n&quot;&gt;Integer&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;elementsPerSecond&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;n&quot;&gt;GenerateSequenceTable&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Table&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;kd&quot;&gt;super&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;TABLE_SCHEMA&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getProperties&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;containsKey&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;elementsPerSecond&quot;&lt;/span&gt;&lt;span class 
[...]
+      &lt;span class=&quot;n&quot;&gt;elementsPerSecond&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getProperties&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getInteger&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;elementsPerSecond&quot;&lt;/span& [...]
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;PCollection&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;IsBounded&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;isBounded&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;IsBounded&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;UNBOUNDED&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;PCollection&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Row&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;buildIOReader&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;PBegin&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quo [...]
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;begin&lt;/span&gt;
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;apply&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;GenerateSequence&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;from&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;withRate&lt [...]
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;apply&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
+            &lt;span class=&quot;n&quot;&gt;MapElements&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;into&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;TypeDescriptor&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;of&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Row&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&l [...]
+                &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;via&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;elm&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Row&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;withSchema&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TAB [...]
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;setRowSchema&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;getSchema&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;());&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;POutput&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;buildIOWriter&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;PCollection&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Row&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;input&lt;/span&gt;&lt;span class=&qu [...]
+    &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;UnsupportedOperationException&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&quot;buildIOWriter 
unsupported!&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h2 id=&quot;the-real-fun&quot;&gt;The real fun&lt;/h2&gt;
+
+&lt;p&gt;Now that we have implemented the two basic classes (a &lt;code 
class=&quot;highlighter-rouge&quot;&gt;BaseBeamTable&lt;/code&gt;, and a
+&lt;code class=&quot;highlighter-rouge&quot;&gt;TableProvider&lt;/code&gt;), 
we can start playing with them. After building the
+&lt;a 
href=&quot;https://beam.apache.org/documentation/dsls/sql/shell/&quot;&gt;SQL 
CLI&lt;/a&gt;, we
+can now perform selections on the table:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;0: BeamSQL&amp;gt; CREATE EXTERNAL 
TABLE input_seq (
+. . . . . &amp;gt;   sequence BIGINT COMMENT 'this is the primary key',
+. . . . . &amp;gt;   event_time TIMESTAMP COMMENT 'this is the element 
timestamp'
+. . . . . &amp;gt; )
+. . . . . &amp;gt; TYPE 'sequence';
+No rows affected (0.005 seconds)
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;And let’s select a few rows:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;0: BeamSQL&amp;gt; SELECT * FROM 
input_seq LIMIT 5;
++---------------------+------------+
+|      sequence       | event_time |
++---------------------+------------+
+| 0                   | 2019-05-21 00:36:33 |
+| 1                   | 2019-05-21 00:36:33 |
+| 2                   | 2019-05-21 00:36:33 |
+| 3                   | 2019-05-21 00:36:33 |
+| 4                   | 2019-05-21 00:36:33 |
++---------------------+------------+
+5 rows selected (1.138 seconds)
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;Now let’s try something more interesting. Such as grouping. This will 
also let
+us make sure that we’re providing the timestamp for each row 
properly:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre 
class=&quot;highlight&quot;&gt;&lt;code&gt;0: BeamSQL&amp;gt; SELECT
+. . . . . &amp;gt;   COUNT(sequence) as elements,
+. . . . . &amp;gt;   TUMBLE_START(event_time, INTERVAL '2' SECOND) as 
window_start
+. . . . . &amp;gt; FROM input_seq
+. . . . . &amp;gt; GROUP BY TUMBLE(event_time, INTERVAL '2' SECOND) LIMIT 5;
++---------------------+--------------+
+|      elements       | window_start |
++---------------------+--------------+
+| 6                   | 2019-06-05 00:39:24 |
+| 10                  | 2019-06-05 00:39:26 |
+| 10                  | 2019-06-05 00:39:28 |
+| 10                  | 2019-06-05 00:39:30 |
+| 10                  | 2019-06-05 00:39:32 |
++---------------------+--------------+
+5 rows selected (10.142 seconds)
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;And voilà! We can start playing with some interesting streaming 
queries to our
+sequence generator.&lt;/p&gt;
+</description>
+        <pubDate>Tue, 04 Jun 2019 01:00:01 -0700</pubDate>
+        
<link>https://beam.apache.org/blog/2019/06/04/adding-data-sources-to-sql.html</link>
+        <guid 
isPermaLink="true">https://beam.apache.org/blog/2019/06/04/adding-data-sources-to-sql.html</guid>
+        
+        
+        <category>blog</category>
+        
+      </item>
+    
+      <item>
         <title>Apache Beam Katas</title>
         <description>&lt;!--
 Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
@@ -795,125 +997,5 @@ to the 2.9.0 release. Thank you to all 
contributors!&lt;/p&gt;
         
       </item>
     
-      <item>
-        <title>Inaugural edition of the Beam Summit Europe 2018 - 
aftermath</title>
-        <description>&lt;!--
-Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---&gt;
-
-&lt;p&gt;Almost 1 month ago, we had the pleasure to welcome the Beam community 
at Level39 in London for the inaugural edition of the Beam Summit London 
Summit. &lt;!--more--&gt;&lt;/p&gt;
-
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Day 1 of the first Beam Summit London going full speed 
ahead! Sessions by &lt;a 
href=&quot;https://twitter.com/SkyUK?ref_src=twsrc%5Etfw&quot;&gt;@SkyUK&lt;/a&gt;
 &lt;a 
href=&quot;https://twitter.com/GCPcloud?ref_src=twsrc%5Etfw&quot;&gt;@GCPcloud&lt;/a&gt;
 &lt;a 
href=&quot;https://twitter.com/Talend?ref_src=twsrc%5Etfw&quot;&gt;@Talend&lt;/a&gt;
 &lt;a href=&quot;ht [...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-&lt;h2 id=&quot;first-edition&quot;&gt;First edition!&lt;/h2&gt;
-
-&lt;p&gt;This first edition of the summit was a free event, with over 125 
RSVPs. We had two days of content; day one was focused on the roadmap of the 
project, the ASF and use cases from companies that use Beam. The second day was 
divided into tracks (a beginner and an advanced track). Those presentations 
&amp;amp; workshops were organised for the more than &lt;strong&gt;80 
attendees&lt;/strong&gt; - and next to that there were several other activities 
like discussions, a brainstorm sess [...]
-Google, Spotify, Talend, Sky, Amazon, Data Artisans, Datatonic, Vente 
Exclusive, ML6, Flumaion, Plantix, Polidea, Seznam and more!&lt;/p&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;h4 
id=&quot;topics-included-using-python-to-run-beam-on-flink&quot;&gt;Topics 
included using Python to run Beam on Flink:&lt;/h4&gt;
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;nl&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Don&amp;#39;t miss &lt;a 
href=&quot;https://twitter.com/snntrable?ref_src=twsrc%5Etfw&quot;&gt;@snntrable&lt;/a&gt;&amp;#39;s
 session at Beam Sumit London, Oct. 2, 2018, about &lt;a 
href=&quot;https://twitter.com/hashtag/Python?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#Python&lt;/a&gt;
 Streaming Pipelines with &lt;a href=&quot;https://twitter.com/ApacheBeam?ref 
[...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;h4 
id=&quot;ml-with-beam-with-the-tensorflow-transform-integration&quot;&gt;ML 
with Beam with the TensorFlow transform integration:&lt;/h4&gt;
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;nl&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Such a great pleasure to listen to the talk by &lt;a 
href=&quot;https://twitter.com/FsMatt?ref_src=twsrc%5Etfw&quot;&gt;@FsMatt&lt;/a&gt;
 on TensorFlow transform at the &lt;a 
href=&quot;https://twitter.com/hashtag/BeamSummit?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#BeamSummit&lt;/a&gt;!
  &lt;a href=&quot;https://twitter.com/ApacheBeam?ref_src=twsrc%5Etfw&quot; 
[...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;h4 id=&quot;the-portability-layer-was-a-big-topic&quot;&gt;The portability 
layer was a big topic:&lt;/h4&gt;
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;nl&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Excellent talk by &lt;a 
href=&quot;https://twitter.com/stadtlegende?ref_src=twsrc%5Etfw&quot;&gt;@stadtlegende&lt;/a&gt;
 on adding portability to &lt;a 
href=&quot;https://twitter.com/hashtag/ApacheBeam?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#ApacheBeam&lt;/a&gt;,
 awesome milestone and next step to make the Apache Beam vision become a 
reality! &lt;a href=&quot [...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;h4 id=&quot;as-well-as-a-session-on-how-to-build-your-own-sdk&quot;&gt;As 
well as a session on how to build your own SDK:&lt;/h4&gt;
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;nl&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Robert Bredshaw explains how to build a new &lt;a 
href=&quot;https://twitter.com/ApacheBeam?ref_src=twsrc%5Etfw&quot;&gt;@ApacheBeam&lt;/a&gt;
 SDK.&lt;a 
href=&quot;https://twitter.com/hashtag/BeamSummit?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#BeamSummit&lt;/a&gt;
 &lt;a 
href=&quot;https://t.co/Bj84GJimdo&quot;&gt;pic.twitter.com/Bj84GJimdo&lt;/a&gt;&lt;/p&gt;&;
 [...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-&lt;h2 id=&quot;presentations&quot;&gt;Presentations&lt;/h2&gt;
-&lt;p&gt;In the aftermath of the Summit, you can check the presentations of 
all the sessions.&lt;/p&gt;
-
-&lt;h3 id=&quot;day-1-use-cases&quot;&gt;Day 1: Use cases&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1hyHw7RVpFrFpli3vLt6JGBHrEm4BcgF-5nRdH1ZE8qo&quot;&gt;Day
 1 - Session 1 - Large scale stream analytics with Apache Beam at 
Sky&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1MxYrFDVoVFsrzbTtmr18zcbPFUU4nSdi&quot;&gt;Day
 1 - Session 2 - Running Quantitative Analytics with Apache 
Beam&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=0B4bFLXEWuluSdVBJSnZrbTZjSGFHbnd4cExYOGZQU2hmY3lF&quot;&gt;Day
 1 - Session 3 - Talend Data Streams: Building Big Data pipelines with Apache 
Beam&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1-GIUVn9QBtg6t-O8uINDkMO4PyZSU_HAEjMWuUHiYY4&quot;&gt;Day
 1 - Session 4 - Lesson Learned from Migrating to Apache Beam for Geo-Data 
Visualisation&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3 id=&quot;day-2-beginners-track&quot;&gt;Day 2: Beginners 
track&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1ntQEDhb8gkxof4uFftxWTOfN39laUDZU7IDHTPKWrcQ&quot;&gt;Day
 2 - Beginner - Session 1 - Development Environment with Apache 
Beam&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=0B4bFLXEWuluSWWJBWXV3ZTdseWpJN1o5UFdpSzV4Qi1sSGU0&quot;&gt;Day
 2 - Beginner - Session 2 - Towards Portability and Beyond&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=0B4bFLXEWuluSLTd6TFlYdFZZYjBTOFZQV3MxZzlPLWROWjZv&quot;&gt;Day
 2 - Beginner - Session 3 - Python Streaming Pipelines with Beam on 
Flink&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=0B4bFLXEWuluSMEV1a1cwM3ozeWQ4TkxlS0tFcnNtRGNGcjJ3&quot;&gt;Day
 2 - Beginner - Session 4 - How runners execute a Beam 
pipeline&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1QyqO8zJ3fIWD5DTnr1JNCEbm2dS15c1c02fI8zD-zqY&quot;&gt;Day
 2 - Beginner - Session 5 - IO Integration Testing framework in Apache 
Beam&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3 id=&quot;day-2-advanced-track&quot;&gt;Day 2: Advanced track&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1Kr1skutObtDil2CExSQUb5rCVwZQm1m2lpmuAXFCE5I&quot;&gt;Day
 2 - Advanced - Session 1 -  Pre-processing for TensorFlow pipelines with 
Apache Beam &amp;amp;  tf.Transform&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=11x7gtuAxg76nOQKaB0YOwcvzS4TUeWONTU1ZQK0LsX8&quot;&gt;Day
 2 - Advanced - Session 2 - Streaming data into BigQuery: schema generation 
with Protobuf&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1cgQGBIXaACSwbYu_w3AkvvTdsCfeXAS1tBvQ77eVn74&quot;&gt;Day
 2 - Advanced - Session 3 - Implementing a SplittableParDo&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://docs.google.com/presentation/d/1F02Lwnqm9H3cGqDQhIZ3gbftyLQSnVMRxX69H_d04OE/edit?usp=sharing&quot;&gt;Day
 2 - Advanced - Session 4 - Big Data on Google Cloud with Scala and 
Scio&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1D1ajcKoOR5OzehPwONdHLSzpO4PZOsLk&quot;&gt;Day
 2 - Advanced - Session 5 - Landuse Classification of Satellite 
Imagery&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1aFH6lhnVIq4Alu-_HItQ0QOddEPJQRqI5jV_t0o3CYI&quot;&gt;Day
 2 - Advanced - Session 6 - Java 8 DSL for Beam SDK&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a 
href=&quot;https://drive.google.com/open?id=1AkU-QXSflau-RSeolB4TSLy0_mg0xwb398Czw7aqVGw&quot;&gt;Day
 2  - Advanced - Session 7 - So, You Want to Write a Beam 
SDK?&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;recordings&quot;&gt;Recordings&lt;/h2&gt;
-&lt;p&gt;In case you prefer rewatching the recorded talks together with those 
slides, we are also happy to share the recordings of the majority of the 
sessions:&lt;/p&gt;
-
-&lt;iframe width=&quot;560&quot; height=&quot;315&quot; 
src=&quot;https://www.youtube.com/embed/videoseries?list=PL4dEBWmGSIU_9JTGnkGVg6-BwaV0FMxyJ&quot;
 frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; 
encrypted-media; gyroscope; picture-in-picture&quot; 
allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
-
-&lt;h3 id=&quot;day-1-use-cases-1&quot;&gt;Day 1: Use cases&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/En0FrjvNr3M&quot;&gt;Day 1 - 
Session 1 - Large scale stream analytics with Apache Beam at 
Sky&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/6yDEOUophuw&quot;&gt;Day 1 - 
Session 2 - Running Quantitative Analytics with Apache Beam&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/1AlEGUtiQek&quot;&gt;Day 1 - 
Session 3 - Talend Data Streams: Building Big Data pipelines with Apache 
Beam&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/GBKqw03doHE&quot;&gt;Day 1 - 
Session 4 - Lesson Learned from Migrating to Apache Beam for Geo-Data 
Visualisation&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3 id=&quot;day-2-advanced-track-1&quot;&gt;Day 2: Advanced 
track&lt;/h3&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/L-k6-3ApXR4&quot;&gt;Day 2 - 
Advanced - Session 1 -  Pre-processing for TensorFlow pipelines with Apache 
Beam &amp;amp;  tf.Transform&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/ctN5U_Ke8uk&quot;&gt;Day 2 - 
Advanced - Session 2 - Streaming data into BigQuery: schema generation with 
Protobuf&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/jU6EmPyKefg&quot;&gt;Day 2 - 
Advanced - Session 3 - Implementing a SplittableParDo&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/F0n9sqj1_NQ&quot;&gt;Day 2 - 
Advanced - Session 4 - Big Data on Google Cloud with Scala and 
Scio&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/s-IR2eFe4B4&quot;&gt;Day 2 - 
Advanced - Session 5 - Landuse Classification of Satellite 
Imagery&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/ott1e_CnZ04&quot;&gt;Day 2 - 
Advanced - Session 6 - Java 8 DSL for Beam SDK&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://youtu.be/VsGQ2LFeTHY&quot;&gt;Day 2  - 
Advanced - Session 7 - So, You Want to Write a Beam SDK?&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;
-
-&lt;p&gt;We are also gathering feedback and thoughts on the Summit - please 
add your thoughts and discussions to the &lt;a 
href=&quot;https://lists.apache.org/thread.html/aa1306da25029dff12a49ba3ce63f2caf6a5f8ba73eda879c8403f3f@%3Cdev.beam.apache.org%3E&quot;&gt;topic
 on the mailing list&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;Overall, we hope our attendees enjoyed this first edition of our 
summit and want to thank &lt;strong&gt;our sponsors Google, Datatonic, 
Vente-Exclusive&lt;/strong&gt; to make this possible.&lt;/p&gt;
-
-&lt;blockquote class=&quot;twitter-tweet&quot; 
data-lang=&quot;nl&quot;&gt;&lt;p lang=&quot;en&quot; 
dir=&quot;ltr&quot;&gt;Wrapping up the first day of the &lt;a 
href=&quot;https://twitter.com/hashtag/BeamSummit?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#BeamSummit&lt;/a&gt;.
 Excellent view from the &lt;a 
href=&quot;https://twitter.com/hashtag/level39?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#level39&lt;/a&gt;
 venue. Very happy with the line up. &lt;a href=&quot;https://t.co/7F [...]
-&lt;script async=&quot;&quot; 
src=&quot;https://platform.twitter.com/widgets.js&quot; 
charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
-</description>
-        <pubDate>Wed, 31 Oct 2018 01:00:01 -0700</pubDate>
-        
<link>https://beam.apache.org/blog/2018/10/31/beam-summit-aftermath.html</link>
-        <guid 
isPermaLink="true">https://beam.apache.org/blog/2018/10/31/beam-summit-aftermath.html</guid>
-        
-        
-        <category>blog</category>
-        
-      </item>
-    
   </channel>
 </rss>
diff --git a/website/generated-content/index.html 
b/website/generated-content/index.html
index e5141a8..1e0342e 100644
--- a/website/generated-content/index.html
+++ b/website/generated-content/index.html
@@ -177,6 +177,11 @@ limitations under the License.
           </div>
           <div class="hero__blog__cards">
             
+            <a class="hero__blog__cards__card" 
href="/blog/2019/06/04/adding-data-sources-to-sql.html">
+              <div class="hero__blog__cards__card__title">Adding new Data 
Sources to Beam SQL CLI</div>
+              <div class="hero__blog__cards__card__date">Jun 4, 2019</div>
+            </a>
+            
             <a class="hero__blog__cards__card" 
href="/blog/2019/05/30/beam-kata-release.html">
               <div class="hero__blog__cards__card__title">Apache Beam 
Katas</div>
               <div class="hero__blog__cards__card__date">May 30, 2019</div>
@@ -187,11 +192,6 @@ limitations under the License.
               <div class="hero__blog__cards__card__date">May 11, 2019</div>
             </a>
             
-            <a class="hero__blog__cards__card" 
href="/blog/2019/04/25/beam-kotlin.html">
-              <div class="hero__blog__cards__card__title">Apache Beam + Kotlin 
= ❤️</div>
-              <div class="hero__blog__cards__card__date">Apr 25, 2019</div>
-            </a>
-            
           </div>
         </div>
       </div>

Reply via email to