blob: 4b1a60eca4a574ce10f3bdb931ce2eebef64961e [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" dir=ZgotmplZ>
<head>
<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
<script src="/bootstrap/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" type="text/css" href="/font-awesome/css/font-awesome.min.css">
<script src="/js/anchor.min.js"></script>
<script src="/js/flink.js"></script>
<link rel="canonical" href="https://flink.apache.org/2023/01/13/apache-flink-table-store-0.3.0-release-announcement/">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The Apache Flink community is pleased to announce the release of the Apache Flink Table Store (0.3.0).
We highly recommend all users upgrade to Flink Table Store 0.3.0. 0.3.0 completed 150&#43; issues, which were completed by nearly 30 contributors.
Please check out the full documentation for detailed information and user guides.
Flink Table Store 0.3 completes many exciting features, enhances its ability as a data lake storage and greatly improves the availability of its stream pipeline.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Apache Flink Table Store 0.3.0 Release Announcement" />
<meta property="og:description" content="The Apache Flink community is pleased to announce the release of the Apache Flink Table Store (0.3.0).
We highly recommend all users upgrade to Flink Table Store 0.3.0. 0.3.0 completed 150&#43; issues, which were completed by nearly 30 contributors.
Please check out the full documentation for detailed information and user guides.
Flink Table Store 0.3 completes many exciting features, enhances its ability as a data lake storage and greatly improves the availability of its stream pipeline." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://flink.apache.org/2023/01/13/apache-flink-table-store-0.3.0-release-announcement/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2023-01-13T08:00:00+00:00" />
<meta property="article:modified_time" content="2023-01-13T08:00:00+00:00" />
<title>Apache Flink Table Store 0.3.0 Release Announcement | Apache Flink</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.22eceb4d17baa9cdc0f57345edd6f215a40474022dfee39b63befb5fb3c596b5.css" integrity="sha256-IuzrTRe6qc3A9XNF7dbyFaQEdAIt/uObY777X7PFlrU=">
<script defer src="/en.search.min.2698f0d1b683dae4d6cb071668b310a55ebcf1c48d11410a015a51d90105b53e.js" integrity="sha256-Jpjw0baD2uTWywcWaLMQpV688cSNEUEKAVpR2QEFtT4="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
<meta name="generator" content="Hugo 0.124.1">
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(["setDomains", ["*.flink.apache.org","*.nightlies.apache.org/flink"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</head>
<body dir=ZgotmplZ>
<header>
<nav class="navbar navbar-expand-xl">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/img/logo/png/100/flink_squirrel_100_color.png" alt="Apache Flink" height="47" width="47" class="d-inline-block align-text-middle">
<span>Apache Flink</span>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<i class="fa fa-bars navbar-toggler-icon"></i>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">About</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/what-is-flink/flink-architecture/">Architecture</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/flink-applications/">Applications</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/flink-operations/">Operations</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/use-cases/">Use Cases</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/powered-by/">Powered By</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/roadmap/">Roadmap</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/community/">Community & Project Info</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/security/">Security</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/special-thanks/">Special Thanks</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Getting Started</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/">With Flink<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/">With Flink Kubernetes Operator<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/get-started/introduction/">With Flink CDC<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-stable/docs/try-flink-ml/quick-start/">With Flink ML<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-stable/getting-started/project-setup.html">With Flink Stateful Functions<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/docs/learn-flink/overview/">Training Course<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Documentation</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/">Flink 1.19 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-master/">Flink Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/">Kubernetes Operator 1.8 (latest)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-main">Kubernetes Operator Main (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-stable">CDC 3.0 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-master">CDC Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-stable/">ML 2.3 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-master">ML Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-stable/">Stateful Functions 3.3 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-master">Stateful Functions Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">How to Contribute</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/how-to-contribute/overview/">Overview</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/contribute-code/">Contribute Code</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/reviewing-prs/">Review Pull Requests</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/code-style-and-quality-preamble/">Code Style and Quality Guide</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/contribute-documentation/">Contribute Documentation</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/documentation-style-guide/">Documentation Style Guide</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/improve-website/">Contribute to the Website</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/getting-help/">Getting Help</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="/posts/">Flink Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/downloads/">Downloads</a>
</li>
</ul>
<div class="book-search">
<div class="book-search-spinner hidden">
<i class="fa fa-refresh fa-spin"></i>
</div>
<form class="search-bar d-flex" onsubmit="return false;"su>
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/">
<i class="fa fa-search search"></i>
<i class="fa fa-circle-o-notch fa-spin spinner"></i>
</form>
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
</div>
</div>
</nav>
<div class="navbar-clearfix"></div>
</header>
<main class="flex">
<section class="container book-page">
<article class="markdown">
<h1>
<a href="/2023/01/13/apache-flink-table-store-0.3.0-release-announcement/">Apache Flink Table Store 0.3.0 Release Announcement</a>
</h1>
January 13, 2023 -
Jingsong Lee
<p><p>The Apache Flink community is pleased to announce the release of the
<a href="https://github.com/apache/flink-table-store">Apache Flink Table Store</a> (0.3.0).</p>
<p>We highly recommend all users upgrade to Flink Table Store 0.3.0. 0.3.0 completed 150+ issues, which were completed by nearly 30 contributors.</p>
<p>Please check out the full <a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/">documentation</a> for detailed information and user guides.</p>
<br/>
<p>Flink Table Store 0.3 completes many exciting features, enhances its ability as a data lake storage and greatly
improves the availability of its stream pipeline. Some important features are described below.</p>
<h2 id="changelog-producer-full-compaction">
Changelog Producer: Full-Compaction
<a class="anchor" href="#changelog-producer-full-compaction">#</a>
</h2>
<p>If:</p>
<ul>
<li>You are using <code>partial-update</code> or <code>aggregation</code> table, at the time of writing, table store can&rsquo;t know what the
result is after merging, so table store can&rsquo;t generate the corresponding changelog.</li>
<li>Your input can’t produce a complete changelog but you still want to get rid of the costly normalized operator,</li>
</ul>
<p>You may consider using the <a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/features/table-types/#full-compaction">Full compaction changelog producer</a>.</p>
<p>By specifying <code>'changelog-producer' = 'full-compaction'</code>, Table Store will compare the results between full compactions
and produce the differences as changelog. The latency of changelog is affected by the frequency of full compactions.
By specifying <code>changelog-producer.compaction-interval</code> table property (default value 30min), users can define the
maximum interval between two full compactions to ensure latency.</p>
<center>
<img src="/img/blog/table-store/changelog-producer-full-compaction.png" width="100%"/>
</center>
<br/>
<h2 id="dedicated-compaction-job--multiple-writers">
Dedicated Compaction Job &amp;&amp; Multiple Writers
<a class="anchor" href="#dedicated-compaction-job--multiple-writers">#</a>
</h2>
<p>By default, Table Store writers will perform compaction as needed when writing records. This is sufficient for most use cases, but there are two downsides:</p>
<ul>
<li>This may result in unstable write throughput because throughput might temporarily drop when performing a compaction.</li>
<li>Compaction will mark some data files as &ldquo;deleted&rdquo;. If multiple writers mark the same file a conflict will occur when
committing the changes. Table Store will automatically resolve the conflict, but this may result in job restarts.</li>
</ul>
<p>To avoid these downsides, users can also choose to skip compactions in writers, and run a
<a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/maintenance/write-performance/#dedicated-compaction-job">dedicated job only for compaction</a>.
As compactions are performed only by the dedicated job, writers can continuously write records without pausing and no conflicts will ever occur.</p>
<p>To skip compactions in writers, set <code>write-only</code> to <code>true</code>.</p>
<p>To run a dedicated job for compaction, follow these instructions.</p>
<p>Flink SQL currently does not support statements related to compactions, so we have to submit the compaction job through <code>flink run</code>.</p>
<p>Run the following command to submit a compaction job for the table.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">&lt;FLINK_HOME&gt;/bin/flink run <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -c org.apache.flink.table.store.connector.action.FlinkActions <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> /path/to/flink-table-store-dist-&lt;version&gt;.jar <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> compact <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --warehouse &lt;warehouse-path&gt; <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --database &lt;database-name&gt; <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --table &lt;table-name&gt;
</span></span></code></pre></div><h2 id="aggregation-table">
Aggregation Table
<a class="anchor" href="#aggregation-table">#</a>
</h2>
<p>Sometimes users only care about aggregated results. The
<a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/features/table-types/#aggregation">aggregation merge engine</a>
aggregates each value field with the latest data one by one under the same primary key according to the aggregate function.</p>
<p>Each field that is not part of the primary keys must be given an aggregate function, specified by the
<code>fields.&lt;field-name&gt;.aggregate-function</code> table property.</p>
<p>For example:</p>
<pre tabindex="0"><code>CREATE TABLE MyTable (
product_id BIGINT,
price DOUBLE,
sales BIGINT,
PRIMARY KEY (product_id) NOT ENFORCED
) WITH (
&#39;merge-engine&#39; = &#39;aggregation&#39;,
&#39;fields.price.aggregate-function&#39; = &#39;max&#39;,
&#39;fields.sales.aggregate-function&#39; = &#39;sum&#39;
);
</code></pre><h2 id="schema-evolution">
Schema Evolution
<a class="anchor" href="#schema-evolution">#</a>
</h2>
<p>In version 0.2, the research and development of Schema Evolution has begun. In version 0.3, some of the capabilities
of Schema Evolution have been completed. You can use below operations in Spark-SQL (Flink SQL completes the following syntax in 1.17):</p>
<ul>
<li>Adding New Columns</li>
<li>Renaming Column Name</li>
<li>Dropping Columns</li>
</ul>
<p>Flink Table Store ensures that the above operations are safe, and the old data will automatically adapt to
the new schema when it is read.</p>
<p>For example:</p>
<pre tabindex="0"><code>CREATE TABLE T (i INT, j INT);
INSERT INTO T (1, 1);
ALTER TABLE T ADD COLUMN k INT;
ALTER TABLE T RENAME COLUMN i to a;
INSERT INTO T (2, 2, 2);
SELECT * FROM T;
-- outputs (1, 1, NULL) and (2, 2, 2)
</code></pre><h2 id="flink-lookup-join">
Flink Lookup Join
<a class="anchor" href="#flink-lookup-join">#</a>
</h2>
<p><a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/features/lookup-joins/">Lookup Joins</a> are a type of join
in streaming queries. It is used to enrich a table with data that is queried from Table Store. The join requires one
table to have a processing time attribute and the other table to be backed by a lookup source connector.</p>
<p>Table Store supports lookup joins on unpartitioned tables with primary keys in Flink.</p>
<p>The lookup join operator will maintain a RocksDB cache locally and pull the latest updates of the table in real time.
Lookup join operator will only pull the necessary data, so your filter conditions are very important for performance.</p>
<p>This feature is only suitable for tables containing at most tens of millions of records to avoid excessive use of local disks.</p>
<h2 id="time-traveling">
Time Traveling
<a class="anchor" href="#time-traveling">#</a>
</h2>
<p>You can use <a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/how-to/querying-tables/#snapshots-table">Snapshots Table</a>
and <a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/how-to/querying-tables/#scan-mode">Scan Mode</a> to time traveling.</p>
<ul>
<li>You can view all current snapshots by reading snapshots table.</li>
<li>You can travel time through <code>from-timestamp</code> and <code>from-snapshot</code>.</li>
</ul>
<p>For example:</p>
<pre tabindex="0"><code>SELECT * FROM T$options;
/*
+--------------+------------+--------------+-------------------------+
| snapshot_id | schema_id | commit_kind | commit_time |
+--------------+------------+--------------+-------------------------+
| 2 | 0 | APPEND | 2022-10-26 11:44:15.600 |
| 1 | 0 | APPEND | 2022-10-26 11:44:15.148 |
+--------------+------------+--------------+-------------------------+
2 rows in set
*/
SELECT * FROM T /*+ OPTIONS(&#39;from-snapshot&#39;=&#39;1&#39;) */;
</code></pre><h2 id="audit-log-table">
Audit Log Table
<a class="anchor" href="#audit-log-table">#</a>
</h2>
<p>If you need to audit the changelog of the table, you can use the
<a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/how-to/querying-tables/#audit-log-table">audit_log</a>
system table. Through audit_log table, you can get the <code>rowkind</code> column when you get the incremental data of the table.
You can use this column for filtering and other operations to complete the audit.</p>
<p>There are four values for <code>rowkind</code>:</p>
<ul>
<li>+I: Insertion operation.</li>
<li>-U: Update operation with the previous content of the updated row.</li>
<li>+U: Update operation with new content of the updated row.</li>
<li>-D: Deletion operation.</li>
</ul>
<p>For example:</p>
<pre tabindex="0"><code>SELECT * FROM MyTable$audit_log;
/*
+------------------+-----------------+-----------------+
| rowkind | column_0 | column_1 |
+------------------+-----------------+-----------------+
| +I | ... | ... |
+------------------+-----------------+-----------------+
| -U | ... | ... |
+------------------+-----------------+-----------------+
| +U | ... | ... |
+------------------+-----------------+-----------------+
3 rows in set
*/
</code></pre><h2 id="ecosystem">
Ecosystem
<a class="anchor" href="#ecosystem">#</a>
</h2>
<p>Flink Table Store continues to strengthen its ecosystem and gradually gets through the reading and writing
of all engines. Each engine below 0.3 has been enhanced.</p>
<ul>
<li>Spark write has been supported. But <code>INSERT OVERWRITE</code> and stream write are still unsupported.</li>
<li><a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/filesystems/s3/">S3</a> and
<a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/filesystems/oss/">OSS</a>
are supported by all computing engines.</li>
<li>Hive 3.1 is supported.</li>
<li>Trino the latest version (JDK 1s.17) is supported.</li>
</ul>
<h2 id="getting-started">
Getting started
<a class="anchor" href="#getting-started">#</a>
</h2>
<p>Please refer to the <a href="https://nightlies.apache.org/flink/flink-table-store-docs-release-0.3/docs/try-table-store/quick-start/">getting started guide</a> for more details.</p>
<br/>
<h2 id="whats-next">
What&rsquo;s Next?
<a class="anchor" href="#whats-next">#</a>
</h2>
<p>In the upcoming 0.4.0 release you can expect the following additional features:</p>
<ul>
<li>Provides Flink decoupled independent Java APIs</li>
<li>Spark: enhance batch write, provide streaming write and streaming read</li>
<li>Flink: complete DDL &amp; DML, providing more management operations</li>
<li>Changelog producer: Lookup, the delay of stream reading each scenario is less than one minute</li>
<li>Provide multi table consistent materialized views in real-time</li>
<li>Data Integration: Schema Evolution integration, whole database integration.</li>
</ul>
<p>Please give the release a try, share your feedback on the Flink mailing list and contribute to the project!</p>
<br/>
<h2 id="list-of-contributors">
List of Contributors
<a class="anchor" href="#list-of-contributors">#</a>
</h2>
<p>The Apache Flink community would like to thank every one of the contributors that have made this release possible:</p>
<p>Feng Wang, Hannankan, Jane Chan, Jia Liu, Jingsong Lee, Jonathan Leitschuh, JunZhang, Kirill Listopad, Liwei Li,
MOBIN-F, Nicholas Jiang, Wang Luning, WencongLiu, Yubin Li, gongzhongqiang, houhang1005, liuzhuang2017, openinx,
tsreaper, wuyouwuyoulian, zhuangchong, zjureel (shammon), 吴祥平</p>
</p>
</article>
<div class="edit-this-page">
<p>
<a href="https://cwiki.apache.org/confluence/display/FLINK/Flink+Translation+Specifications">Want to contribute translation?</a>
</p>
<p>
<a href="//github.com/apache/flink-web/edit/asf-site/docs/content/posts/2023-01-13-release-table-store-0.3.0.md">
Edit This Page<i class="fa fa-edit fa-fw"></i>
</a>
</p>
</div>
</section>
<aside class="book-toc">
<nav id="TableOfContents"><h3>On This Page <a href="javascript:void(0)" class="toc" onclick="collapseToc()"><i class="fa fa-times" aria-hidden="true"></i></a></h3>
<ul>
<li>
<ul>
<li><a href="#changelog-producer-full-compaction">Changelog Producer: Full-Compaction</a></li>
<li><a href="#dedicated-compaction-job--multiple-writers">Dedicated Compaction Job &amp;&amp; Multiple Writers</a></li>
<li><a href="#aggregation-table">Aggregation Table</a></li>
<li><a href="#schema-evolution">Schema Evolution</a></li>
<li><a href="#flink-lookup-join">Flink Lookup Join</a></li>
<li><a href="#time-traveling">Time Traveling</a></li>
<li><a href="#audit-log-table">Audit Log Table</a></li>
<li><a href="#ecosystem">Ecosystem</a></li>
<li><a href="#getting-started">Getting started</a></li>
<li><a href="#whats-next">What&rsquo;s Next?</a></li>
<li><a href="#list-of-contributors">List of Contributors</a></li>
</ul>
</li>
</ul>
</nav>
</aside>
<aside class="expand-toc hidden">
<a class="toc" onclick="expandToc()" href="javascript:void(0)">
<i class="fa fa-bars" aria-hidden="true"></i>
</a>
</aside>
</main>
<footer>
<div class="separator"></div>
<div class="panels">
<div class="wrapper">
<div class="panel">
<ul>
<li>
<a href="https://flink-packages.org/">flink-packages.org</a>
</li>
<li>
<a href="https://www.apache.org/">Apache Software Foundation</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
<li>
<a href="/zh/">
<i class="fa fa-globe" aria-hidden="true"></i>&nbsp;中文版
</a>
</li>
</ul>
</div>
<div class="panel">
<ul>
<li>
<a href="/what-is-flink/security">Security</a-->
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Donate</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</div>
<div class="panel icons">
<div>
<a href="/posts">
<div class="icon flink-blog-icon"></div>
<span>Flink blog</span>
</a>
</div>
<div>
<a href="https://github.com/apache/flink">
<div class="icon flink-github-icon"></div>
<span>Github</span>
</a>
</div>
<div>
<a href="https://twitter.com/apacheflink">
<div class="icon flink-twitter-icon"></div>
<span>Twitter</span>
</a>
</div>
</div>
</div>
</div>
<hr/>
<div class="container disclaimer">
<p>The contents of this website are © 2024 Apache Software Foundation under the terms of the Apache License v2. Apache Flink, Flink, and the Flink logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p>
</div>
</footer>
</body>
</html>