Files
scylladb/stable/features/cdc/cdc-basic-operations.html
GitHub Action 0eb2ca3ec5 Publish docs
2026-04-19 09:28:28 +00:00

1511 lines
132 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="no-js" lang="en" style="visibility: hidden;">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>
Basic operations in CDC | ScyllaDB Docs
</title>
<meta name="description" content="ScyllaDB is an Apache Cassandra-compatible NoSQL data store that can handle 1 million transactions per second on a single server." />
<link rel="icon" href="../../_static/img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="../../_static/img/favicon-32x32.png" sizes="32x32" />
<link rel="icon" href="../../_static/img/favicon-228x228.png" sizes="192x192" />
<link rel="apple-touch-icon" href="../../_static/img/favicon-228x228.png" />
<meta name="msapplication-TileImage" href="../../_static/img/favicon-228x228.png" />
<link rel="canonical" href="https://opensource.docs.scylladb.com/stable/features/cdc/cdc-basic-operations.html"/>
<link rel="author" href="mailto:info@scylladb.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="preload" as="style"
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400&display=swap" />
<!-- async CSS -->
<link rel="stylesheet" media="print" onload="this.onload=null;this.removeAttribute('media');"
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400&display=swap" />
<!-- no-JS fallback -->
<noscript>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400&display=swap" />
</noscript>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/biel-search@latest/dist/biel-search/biel-search.css">
<script type="module" src="https://cdn.jsdelivr.net/npm/biel-search@latest/dist/biel-search/biel-search.esm.js"></script>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="../../_static/css/main.css?v=041c0933" />
<link rel="stylesheet" type="text/css" href="../../_static/sphinx_collapse.css?v=226d88b4" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="../../_static/css/custom.css?v=5a6d8084" />
<meta name="robots" content="noindex">
<script type="text/javascript" src="../../_static/js/runtime.bundle.js"></script>
<script type="text/javascript" src="../../_static/js/main.bundle.js"></script>
<script src="../../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
<script src="../../_static/copybutton.js?v=f281be69"></script>
<!-- Local meta tags -->
<!-- Google Tag Manager docs -->
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
"gtm.start": new Date().getTime(),
event: "gtm.js"
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-54NWVS4");
</script>
<!-- End Google Tag Manager -->
<!-- Google Tag Manager global -->
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
"gtm.start": new Date().getTime(),
event: "gtm.js"
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-T8P2JP");
</script>
<!-- End Google Tag Manager -->
<!-- Expertrec -->
<!-- End Expertrec -->
</head>
<body class="brand-open-source">
<section class="promo-banner promo-banner--hide" style="display: none;">
<div class="promo-banner-wrapper">
<div class="promo-banner__content">
<div class="promo-banner__title">ScyllaDB University LIVE, FREE Virtual Training Event | March 21</div>
<a class="promo-banner__button button button--reverse" href="https://lp.scylladb.com/university-live-2023-03-registration?siteplacement=docs"
target="_blank" rel="noopener noreferrer">Register for Free</a>
</div>
<button class="promo-banner__close">
<i class="icon-cancel"></i>
</button>
</div>
</section>
<header class="header">
<div class="header-logo">
<a class="header-logo__img" href="https://scylladb.com/">
<img src="../../_static/img/scylladb-logo-horizontal.svg" alt="ScyllaDB Documentation Logo" />
</a>
<span class="header-logo__bar"></span>
<a class="header-logo__text" href="https://docs.scylladb.com/">
Documentation
</a>
</div>
<div class="header-navigation">
<ul class="dropdown menu scylla-dropdown scylla-dropdown--header" data-dropdown-menu>
<li class="scylla-dropdown__item">
<a href="#" class="scylla-dropdown__title">Deployments <i class="chevron icon-arrow-dropdown"></i></a>
<ul class="menu scylla-dropdown__content">
<li>
<a href="https://docs.scylladb.com/scylla-cloud/">
<i class="icon-docs-cloud"></i>Cloud</a>
</li>
<li>
<a href="https://docs.scylladb.com/manual/">
<i class="icon-server"></i>Server</a>
</li>
</ul>
</li>
<li class="scylla-dropdown__item">
<a href="#" class="scylla-dropdown__title">Tools <i class="chevron icon-arrow-dropdown"></i></a>
<ul class="menu scylla-dropdown__content">
<li>
<a href="https://manager.docs.scylladb.com/">
<i class="icon-docs-manager"></i>ScyllaDB Manager</a>
</li>
<li>
<a href="https://monitoring.docs.scylladb.com/">
<i class="icon-docs-monitoring"></i>ScyllaDB
Monitoring Stack</a>
</li>
<li>
<a href="https://operator.docs.scylladb.com/">
<i class="icon-docs-operator"></i>ScyllaDB Operator
</a>
</li>
</ul>
</li>
<li class="scylla-dropdown__item">
<a href="#" class="scylla-dropdown__title">Drivers <i class="chevron icon-arrow-dropdown"></i></a>
<ul class="menu scylla-dropdown__content">
<li>
<a href="https://docs.scylladb.com/stable/drivers/cql-drivers">
<i class="icon-docs-nsql-guides"></i>CQL Drivers
</a>
</li>
<li>
<a href="https://docs.scylladb.com/stable/drivers/dynamo-drivers">
<i class="icon-docs-alternator"></i>DynamoDB Drivers
</a>
<li>
<a href="https://docs.scylladb.com/stable/versioning/driver-support">
<i class="icon-docs-blog"></i>Supported Driver Versions
</a>
</li>
</li>
</ul>
</li>
<li class="scylla-dropdown__item">
<a href="#" class="scylla-dropdown__title">Resources
<i class="chevron icon-arrow-dropdown"></i></a>
<ul class="menu scylla-dropdown__content">
<li>
<a href="https://university.scylladb.com">
<i class="icon-university"></i>
ScyllaDB University
</a>
</li>
<li>
<a href="https://forum.scylladb.com">
<i class="icon-docs-community"></i>
Community Forum
</a>
</li>
<li>
<a href="https://docs.scylladb.com/stable/get-started/develop-with-scylladb/tutorials-example-projects.html">
<i class="icon-docs-training"></i>
Tutorials
</a>
</li>
</ul>
</li>
</ul>
<div class="header-button">
<a href="https://docs.scylladb.com/manual/stable/getting-started/install-scylla/index.html" class="button"><i class="icon-download me-2"></i> Install</a>
</div>
</div>
<div class="header-search-box">
<i class="dark-theme-toggler icon-theme"></i>
<biel-search-button
project="ddfdo8m94k"
button-style="rounded"
hide-filters="false"
header-title="ScyllaDB chatbot (beta)"
modal-position="top-center">
Search
</biel-search-button>
<biel-button class="header-ask-ai" project="ddfdo8m94k"
header-title="ScyllaDB chatbot (beta)"
button-position="default"
modal-position="sidebar-right"
button-style="dark">
Ask AI
</biel-button>
</div>
<div class="side-nav-toggle">
<i class="dark-theme-toggler icon-theme"></i>
<div class="side-nav-toggle__button" data-toggle="side-nav">
<i class="icon-menu"></i>
</div>
</div>
</header>
<div class="title"></div>
<section
class="layout layout--sidebar layout--has-secondary-sidebar ">
<div class="content large-order-2">
<div class="pre-content">
<div class="breadcrumbs">
<span class="bread__item">
<a href="https://docs.scylladb.com"
class="bread__highlight">
<i class="icon-home"></i> ScyllaDB Docs
</a>
</span>
<span class="bread__item">
<a href="../../index.html"
class="bread__highlight">
ScyllaDB Open Source
</a>
</span>
<span class="bread__item">
<a href="../index.html" class="bread__highlight">
Features
</a>
</span>
<span class="bread__item">
<a href="index.html" class="bread__highlight">
Change Data Capture (CDC)
</a>
</span>
<span class="bread__item bread__item--last">Basic operations in CDC</span>
</div>
</div>
<div class="sidebar-right-layout">
<div class="body-container">
<div class="content-body"
data-view-source-url="https://github.com/scylladb/scylladb/blob/master/docs/features/cdc/cdc-basic-operations.rst"
>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>
You're viewing documentation for a previous version.
<a href="https://docs.scylladb.com/manual/">Switch to the latest stable version.</a>
</p>
</div>
<section id="basic-operations-in-cdc">
<h1>Basic operations in CDC<a class="headerlink" href="#basic-operations-in-cdc" title="Link to this heading"></a></h1>
<p>The CDC log table reflects operations that are performed on the base table. Different types of operations give different corresponding entries in the CDC log. These operations are:</p>
<ul class="simple">
<li><p>inserts,</p></li>
<li><p>updates,</p></li>
<li><p>single row deletions,</p></li>
<li><p>row range deletions,</p></li>
<li><p>partition deletions.</p></li>
</ul>
<p>The following sections describe how each of these operations are handled by the CDC log.</p>
<section id="updates">
<span id="id1"></span><h2>Updates<a class="headerlink" href="#updates" title="Link to this heading"></a></h2>
<p>Updates are the most basic statements that can be performed. The following is an example of an update with CDC enabled.</p>
<ol class="arabic">
<li><p>Start with a basic table and perform some UPDATEs:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v1</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v2</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v1</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v2</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>Confirm that the update was performed by displaying the contents of the table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v1 | v2
----+----+----+------
0 | 0 | 0 | null
(1 rows)
</pre></div>
</div>
</li>
<li><p>Display the contents of the CDC log table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v1</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$deleted_v1&quot;</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$deleted_v2&quot;</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | v1 | cdc$deleted_v1 | v2 | cdc$deleted_v2 | cdc$operation
------------------+----+----+------+----------------+------+----------------+---------------
0 | 0 | 0 | 0 | null | null | null | 1
0 | 0 | 0 | null | null | null | True | 1
(2 rows)
</pre></div>
</div>
</li>
</ol>
<p>Delta rows corresponding to updates are indicated by <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">1</span></code>. All columns corresponding to the primary key in the log are set to the same values as in the base table, in this case <code class="docutils literal notranslate"><span class="pre">pk</span> <span class="pre">=</span> <span class="pre">0</span></code> and <code class="docutils literal notranslate"><span class="pre">ck</span> <span class="pre">=</span> <span class="pre">0</span></code>.</p>
<p>Each non-key column, such as <code class="docutils literal notranslate"><span class="pre">v1</span></code> above, has a corresponding column in the log with the same name, but theres an additional column with the <code class="docutils literal notranslate"><span class="pre">cdc$deleted_</span></code> prefix (e. g. <code class="docutils literal notranslate"><span class="pre">cdc$deleted_v1</span></code>) used to indicate whether the column was set to <code class="docutils literal notranslate"><span class="pre">null</span></code> in the update.</p>
<p>If the update sets a column <code class="docutils literal notranslate"><span class="pre">X</span></code> to a non-null value, the <code class="docutils literal notranslate"><span class="pre">X</span></code> column in the log will have that value; however, if the update sets <code class="docutils literal notranslate"><span class="pre">X</span></code> to a null value, the <code class="docutils literal notranslate"><span class="pre">X</span></code> column in the log will be <code class="docutils literal notranslate"><span class="pre">null</span></code>, and well use the <code class="docutils literal notranslate"><span class="pre">cdc$deleted_X</span></code> column to indicate the update by setting it to <code class="docutils literal notranslate"><span class="pre">True</span></code>. In the example above, this is what happened with the <code class="docutils literal notranslate"><span class="pre">v2</span></code> column.</p>
<p>Column deletions are a special case of an update statement. That is, the following two statements are equivalent:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="o">&lt;</span><span class="n">table_name</span><span class="o">&gt;</span> <span class="k">SET</span> <span class="n">X</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="o">&lt;</span><span class="n">condition</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">DELETE</span> <span class="n">X</span> <span class="k">FROM</span> <span class="o">&lt;</span><span class="n">table_name</span><span class="o">&gt;</span> <span class="k">WHERE</span> <span class="o">&lt;</span><span class="n">condition</span><span class="o">&gt;</span><span class="p">;</span>
</pre></div>
</div>
<p>Thus, in the example above, instead of</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v2</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>we could have used</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="n">v2</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>and we wouldve obtained the same result.</p>
<p>Note that column deletions, (which are equivalent to updates that set a column to <code class="docutils literal notranslate"><span class="pre">null</span></code>) <em>are different than row deletions</em>, i.e. <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> statements that specify a clustering row but dont specify any particular column, like the following:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>You can read about row deletions in the <a class="reference internal" href="#row-deletions"><span class="std std-ref">corresponding section</span></a>.</p>
<section id="digression-static-rows-in-scylladb">
<h3>Digression: static rows in ScyllaDB<a class="headerlink" href="#digression-static-rows-in-scylladb" title="Link to this heading"></a></h3>
<p>If a table in ScyllaDB has static columns, then every partition in this table contains a <em>static row</em>, which is global for the partition. This static row is different from the clustered rows: it contains values for partition key columns and static columns, while clustered rows contain values for partition key, clustering key, and regular columns. The following example illustrates how the static row can be used:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">s</span> <span class="nb">int</span> <span class="k">static</span><span class="p">,</span> <span class="n">c</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">));</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | s | c
----+------+---+------
0 | null | 0 | null
(1 rows)
</pre></div>
</div>
<p>Even though no regular columns were set, the above query returned a row; the static row.</p>
<p>We can still update clustered rows, of course:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">1</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">1</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | s | c
----+----+------+---
1 | 0 | null | 0
(1 rows)
</pre></div>
</div>
<p>Somewhat confusingly, CQL mixes the static row with the clustered rows if both appear within the same partition. Example:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">2</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">1</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">2</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">1</span><span class="p">;</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">2</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">2</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">2</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | s | c
----+----+---+---
2 | 0 | 2 | 0
2 | 1 | 2 | 1
(2 rows)
</pre></div>
</div>
<p>From the above query result it seems as if the static column was a part of every clustered row, and setting the static column to a value within one partition is setting it “for every clustered row”. <strong>That is not the case</strong>, it is simply CQLs way of showing the static row when both the static row and clustered rows are present: it “mixes” the static row into each clustered row. But to understand the static row, think of it as a separate row in the partition, with the property that there can be at most one static row in a partition; the static row exists if and only if at least one of the static columns are non-null.</p>
</section>
<section id="static-rows-in-cdc">
<h3>Static rows in CDC<a class="headerlink" href="#static-rows-in-cdc" title="Link to this heading"></a></h3>
<p>CDC separates static row updates from clustered row updates, showing them as different entries, even if you update both within one statement. Example:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">s</span> <span class="nb">int</span> <span class="k">static</span><span class="p">,</span> <span class="n">c</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span> <span class="n">true</span><span class="p">};</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">0</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | s | c | cdc$operation
------------------+----+------+------+------+---------------
0 | 0 | null | 0 | null | 1
1 | 0 | 0 | null | 0 | 1
(2 rows)
</pre></div>
</div>
<p>CDC recognizes that logically two updates happened: one to the static row and one to the clustered row. In other words, CDC interprets the following:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">0</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>as follows:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">BEGIN</span> <span class="k">UNLOGGED</span> <span class="k">BATCH</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">APPLY</span> <span class="k">BATCH</span><span class="p">;</span>
</pre></div>
</div>
<p>However, since they happened in a single statement and had a single timestamp, it grouped them using <code class="docutils literal notranslate"><span class="pre">cdc$batch_seq_no</span></code>. The static row update can be distinguished from the clustered row update by looking at clustering key columns, in case <code class="docutils literal notranslate"><span class="pre">ck</span></code>: they are <code class="docutils literal notranslate"><span class="pre">null</span></code> for static row updates and non-null for clustered row updates.</p>
</section>
</section>
<section id="inserts">
<h2>Inserts<a class="headerlink" href="#inserts" title="Link to this heading"></a></h2>
<section id="digression-the-difference-between-inserts-and-updates">
<h3>Digression: the difference between inserts and updates<a class="headerlink" href="#digression-the-difference-between-inserts-and-updates" title="Link to this heading"></a></h3>
<p>Inserts are not the same as updates, contrary to a popular belief in Cassandra/ScyllaDB communities. The following example illustrates the difference:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span> <span class="n">pk</span> <span class="o">|</span> <span class="n">ck</span> <span class="o">|</span> <span class="n">v</span>
<span class="c1">----+----+---</span>
<span class="p">(</span><span class="mf">0</span> <span class="n">rows</span><span class="p">)</span>
</pre></div>
</div>
<p>However:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="k">null</span><span class="p">);</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+------
0 | 0 | null
(1 rows)
</pre></div>
</div>
<p id="row-marker">Each table has an additional invisible column called the <em>row marker</em>. It doesnt hold a value; it only holds <em>liveness information</em> (timestamp and time-to-live). If the row marker is alive, the row shows up when you query it, even if all its non-key columns are null. The difference between inserts and updates is that <strong>updates dont affect the row marker</strong>, while <strong>inserts create an alive row marker</strong>.</p>
<p>Heres another example:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span> <span class="n">pk</span> <span class="o">|</span> <span class="n">ck</span> <span class="o">|</span> <span class="n">v</span>
<span class="c1">----+----+---</span>
<span class="mf">0</span> <span class="o">|</span> <span class="mf">0</span> <span class="o">|</span> <span class="mf">0</span>
<span class="p">(</span><span class="mf">1</span> <span class="n">rows</span><span class="p">)</span>
</pre></div>
</div>
<p>The value in the <code class="docutils literal notranslate"><span class="pre">v</span></code> column keeps the <code class="docutils literal notranslate"><span class="pre">(pk</span> <span class="pre">=</span> <span class="pre">0,</span> <span class="pre">ck</span> <span class="pre">=</span> <span class="pre">0)</span></code> row alive, therefore it shows up in the query. After we delete it, the row will be gone:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+---
(0 rows)
</pre></div>
</div>
<p>However, if we had used an <code class="docutils literal notranslate"><span class="pre">INSERT</span></code> instead of an <code class="docutils literal notranslate"><span class="pre">UPDATE</span></code> in the first place, the row would still show up even after deleting <code class="docutils literal notranslate"><span class="pre">v</span></code>:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">set</span> <span class="n">v</span> <span class="o">=</span> <span class="k">null</span> <span class="k">where</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">and</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+------
0 | 0 | null
(1 rows)
</pre></div>
</div>
<p>The row marker introduced by <code class="docutils literal notranslate"><span class="pre">INSERT</span></code> keeps the row alive, even if there are no other non-key columns that are not <code class="docutils literal notranslate"><span class="pre">null</span></code>. Therefore the row shows up in the query.
We can create just the row marker, without updating any columns, like this:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
</pre></div>
</div>
<p>When specifying both key and non-key columns in an <code class="docutils literal notranslate"><span class="pre">INSERT</span></code> statement, were saying “create a row marker, <em>and</em> set cells for this row”. We can explicitly divide these two operations; the following:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
</pre></div>
</div>
<p>is equivalent to:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">BEGIN</span> <span class="k">UNLOGGED</span> <span class="k">BATCH</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
<span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="k">APPLY</span> <span class="k">BATCH</span><span class="p">;</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">INSERT</span></code> creates a row marker, the <code class="docutils literal notranslate"><span class="pre">UPDATE</span></code> sets the cell in the <code class="docutils literal notranslate"><span class="pre">(pk,</span> <span class="pre">ck)</span> <span class="pre">=</span> <span class="pre">(0,</span> <span class="pre">0)</span></code> row and <code class="docutils literal notranslate"><span class="pre">v</span></code> column.</p>
</section>
<section id="inserts-in-cdc">
<h3>Inserts in CDC<a class="headerlink" href="#inserts-in-cdc" title="Link to this heading"></a></h3>
<p>Inserts affect the CDC log very similarly to updates; if no collections or static columns are involved, the difference lies only in the <code class="docutils literal notranslate"><span class="pre">cdc$operation</span></code> column:</p>
<ol class="arabic">
<li><p>Start with a basic table and perform some insert:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v1</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v2</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v1</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="k">NULL</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Confirm that the insert was performed by displaying the contents of the table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v1 | v2
----+----+----+------
0 | 0 | 0 | null
(1 rows)
</pre></div>
</div>
</li>
<li><p>Display the contents of the CDC log table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v1</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$deleted_v1&quot;</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$deleted_v2&quot;</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | v1 | cdc$deleted_v1 | v2 | cdc$deleted_v2 | cdc$operation
------------------+----+----+------+----------------+------+----------------+---------------
0 | 0 | 0 | 0 | null | null | null | 2
0 | 0 | 0 | null | null | null | True | 2
(2 rows)
</pre></div>
</div>
</li>
</ol>
<p>Delta rows corresponding to inserts are indicated by <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">2</span></code>.</p>
<p>If a static row update is performed within an <code class="docutils literal notranslate"><span class="pre">INSERT</span></code>, it is separated from the <code class="docutils literal notranslate"><span class="pre">INSERT</span></code>, in the same way a clustered row update is separated from a static row update. Example:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">s</span> <span class="nb">int</span> <span class="k">static</span><span class="p">,</span> <span class="n">c</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span> <span class="n">true</span><span class="p">};</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
<span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | s | c | cdc$operation
------------------+----+------+------+------+---------------
0 | 0 | null | 0 | null | 1
1 | 0 | 0 | null | 0 | 2
(2 rows)
</pre></div>
</div>
<p>There is no such thing as a “static row insert”. Indeed, static rows dont have a row marker; the only way to make a static row show up is to set a static column to a non-null value. Therefore, the following statement (using the table from above):</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span> <span class="mf">0</span><span class="p">);</span>
</pre></div>
</div>
<p>is equivalent to:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">s</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>This is the reason why <code class="docutils literal notranslate"><span class="pre">cdc$operation</span></code> is <code class="docutils literal notranslate"><span class="pre">1</span></code>, not <code class="docutils literal notranslate"><span class="pre">2</span></code>, in the example above for the static row update.</p>
</section>
</section>
<section id="row-deletions">
<span id="id2"></span><h2>Row deletions<a class="headerlink" href="#row-deletions" title="Link to this heading"></a></h2>
<p>Row deletions are operations where you delete an entire clustering row by using a <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> statement, specifying the values of all clustering key columns, but <strong>not</strong> specifying any particular regular column.
The following is an example of a row deletion with CDC enabled.</p>
<ol class="arabic">
<li><p>Start with a basic table and insert some data into it.</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span> <span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the table</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+---
0 | 0 | 0
(1 rows)
</pre></div>
</div>
</li>
<li><p>Remove the row where the primary key 0 and the clustering key is 0.</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>Check that after performing a row deletion, querying the deleted row returns 0 results:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+------
(0 rows)
</pre></div>
</div>
</li>
</ol>
<p>Note that row deletions <em>are different than column deletions</em>, which are <code class="docutils literal notranslate"><span class="pre">DELETE</span></code> statements with some particular non-key column specified, like the following:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="n">v</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>Column deletions are equivalent to UPDATEs with the column set to null, e.g.:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">UPDATE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">SET</span> <span class="n">v</span> <span class="o">=</span> <span class="k">null</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
<p>You can read about UPDATEs in the <a class="reference internal" href="#updates"><span class="std std-ref">corresponding section</span></a>.</p>
</section>
<section id="row-range-deletions">
<h2>Row range deletions<a class="headerlink" href="#row-range-deletions" title="Link to this heading"></a></h2>
<p>Range deletions are statements in which you delete a set of rows specified by a continuous range of clustering keys.
They work within one partition, so you must provide a single partition key when performing a range deletion.</p>
<p>The following is an example of a row range deletion with CDC enabled.</p>
<ol class="arabic">
<li><p>Start with a basic table and insert some data into it.</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">1</span><span class="p">,</span><span class="mf">1</span><span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">2</span><span class="p">,</span><span class="mf">2</span><span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">3</span><span class="p">,</span><span class="mf">3</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the table</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+---
0 | 0 | 0
0 | 1 | 1
0 | 2 | 2
0 | 3 | 3
(4 rows)
</pre></div>
</div>
</li>
<li><p>Remove all rows where the primary key is 0 and the clustering key is in the <code class="docutils literal notranslate"><span class="pre">(0,</span> <span class="pre">2]</span></code> range (left-opened, right-closed).</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">&lt;=</span> <span class="mf">2</span> <span class="k">and</span> <span class="n">ck</span> <span class="o">&gt;</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the table after the delete:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+---
0 | 0 | 0
0 | 3 | 3
(2 rows)
</pre></div>
</div>
</li>
<li><p>Display the contents of the CDC log table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | v | cdc$operation
------------------+----+----+------+---------------
0 | 0 | 0 | 0 | 2
0 | 0 | 1 | 1 | 2
0 | 0 | 2 | 2 | 2
0 | 0 | 3 | 3 | 2
0 | 0 | 0 | null | 6
1 | 0 | 2 | null | 7
(6 rows)
</pre></div>
</div>
</li>
</ol>
<p>A range deletion appears in CDC as a batch of up to two entries into the log table: an entry corresponding to ranges left bound (if specified), and an entry corresponding to the ranges right bound (if specified). The appropriate values of <code class="docutils literal notranslate"><span class="pre">cdc$operation</span></code> are as follows:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">5</span></code> denotes an inclusive left bound,</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">6</span></code> denotes an exclusive left bound,</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">7</span></code> denotes an inclusive right bound,</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">8</span></code> denotes an exclusive right bound.</p></li>
</ul>
<p>In the example above weve used the range <code class="docutils literal notranslate"><span class="pre">(0,</span> <span class="pre">2]</span></code>, with an exclusive left bound and inclusive right bound. This is presented in the CDC log as two log rows: one with <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">6</span></code> and the other with <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">7</span></code>.</p>
<p>The values for non-key base columns are <code class="docutils literal notranslate"><span class="pre">null</span></code> in these entries.</p>
<p>If you specify a one-sided range:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck</span> <span class="o">&lt;</span> <span class="mf">3</span><span class="p">;</span>
</pre></div>
</div>
<p>then two entries will appear in the CDC log: one with <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">5</span></code> and <code class="docutils literal notranslate"><span class="pre">null</span></code> clustering key, indicating the range is not left-bounded and the other with <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">8</span></code>, representing the right bound of the range:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | v | cdc$operation
------------------+----+------+------+---------------
0 | 0 | null | null | 5
1 | 0 | 3 | null | 8
</pre></div>
</div>
<section id="range-deletions-with-multi-column-clustering-keys">
<h3>Range deletions with multi-column clustering keys<a class="headerlink" href="#range-deletions-with-multi-column-clustering-keys" title="Link to this heading"></a></h3>
<p>In the case of multi-column clustering keys, range deletions allow to specify an equality relation for some prefix of the clustering key, followed by an ordering relation on the column that follows the prefix.</p>
<ol class="arabic">
<li><p>Start with a basic table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck1</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck2</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck3</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">primary</span> <span class="k">key</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck1</span><span class="p">,</span> <span class="n">ck2</span><span class="p">,</span> <span class="n">ck3</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
</pre></div>
</div>
</li>
<li><p>Remove the rows where the primary key is 0, a prefix of the clustering key (<code class="docutils literal notranslate"><span class="pre">ck1</span></code>) is <code class="docutils literal notranslate"><span class="pre">0</span></code>, and the following column of the clustering key (<code class="docutils literal notranslate"><span class="pre">ck2</span></code>) is in the range <code class="docutils literal notranslate"><span class="pre">(0,</span> <span class="pre">3)</span></code>:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">and</span> <span class="n">ck1</span> <span class="o">=</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck2</span> <span class="o">&gt;</span> <span class="mf">0</span> <span class="k">AND</span> <span class="n">ck2</span> <span class="o">&lt;</span> <span class="mf">3</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck1</span><span class="p">,</span> <span class="n">ck2</span><span class="p">,</span> <span class="n">ck3</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck1 | ck2 | ck3 | v | cdc$operation
------------------+----+-----+-----+------+------+---------------
0 | 0 | 0 | 0 | null | null | 6
1 | 0 | 0 | 3 | null | null | 8
(2 rows)
</pre></div>
</div>
</li>
</ol>
</section>
</section>
<section id="partition-deletion">
<h2>Partition deletion<a class="headerlink" href="#partition-deletion" title="Link to this heading"></a></h2>
<p>An example for deleting a partition is as follows:</p>
<ol class="arabic">
<li><p>Start with a basic table and insert some data into it.</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span> <span class="nb">int</span><span class="p">,</span> <span class="n">ck</span> <span class="nb">int</span><span class="p">,</span> <span class="n">v</span> <span class="nb">int</span><span class="p">,</span> <span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">))</span> <span class="k">WITH</span> <span class="n">cdc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;enabled&#39;</span><span class="p">:</span><span class="s1">&#39;true&#39;</span><span class="p">};</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">,</span><span class="mf">0</span><span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="p">(</span><span class="n">pk</span><span class="p">,</span><span class="n">ck</span><span class="p">,</span><span class="n">v</span><span class="p">)</span> <span class="k">VALUES</span> <span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">1</span><span class="p">,</span><span class="mf">1</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the base table</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> pk | ck | v
----+----+---
0 | 0 | 0
0 | 1 | 1
(2 rows)
</pre></div>
</div>
</li>
<li><p>Remove all rows where the primary key is equal to 0.</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t</span> <span class="k">WHERE</span> <span class="n">pk</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>Display the contents of the corresponding CDC log table:</p>
<div class="highlight-cql notranslate"><div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="s s-Name">&quot;cdc$batch_seq_no&quot;</span><span class="p">,</span> <span class="n">pk</span><span class="p">,</span> <span class="n">ck</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="s s-Name">&quot;cdc$operation&quot;</span> <span class="k">FROM</span> <span class="n">ks</span><span class="mf">.</span><span class="n">t_scylla_cdc_log</span><span class="p">;</span>
</pre></div>
</div>
<p>returns:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> cdc$batch_seq_no | pk | ck | v | cdc$operation
------------------+----+------+------+---------------
0 | 0 | 0 | 0 | 2
0 | 0 | 1 | 1 | 2
0 | 0 | null | null | 4
(3 rows)
</pre></div>
</div>
</li>
</ol>
<p>In the CDC log, partition deletion is identified by <code class="docutils literal notranslate"><span class="pre">cdc$operation</span> <span class="pre">=</span> <span class="pre">4</span></code>. Columns in the log that correspond to clustering key and non-key columns in the base table are set to <code class="docutils literal notranslate"><span class="pre">null</span></code>.</p>
</section>
</section>
</div>
<div class="post-content">
<div class="feedback-container">
<p class="feedback-container__title">Was this page helpful?</p>
<span data-tooltip tabindex="1" title="Yes" data-position="top">
<button class="feedback-container__button" id="feedback-positive">
<i class="feedback-container__icon icon-docs-thumbs-up"></i>
</button>
</span>
<span data-tooltip tabindex="1" title="No" data-position="top">
<button class="feedback-container__button" id="feedback-negative">
<i class="feedback-container__icon icon-docs-thumbs-down"></i>
</button>
</span>
<div class="feedback-container__message" id="feedback-message"></div>
</div>
<script>
function resetFeedbackButtonActive() {
const feedbackButtons = document.getElementsByClassName('feedback-container__button');
for (let i = 0; i < feedbackButtons.length; i++) {
feedbackButtons[i].classList.remove('active');
}
}
function showMessage(liked) {
const feedbackMessage = document.getElementById('feedback-message');
const themeGithubRepository = true;
let message = 'Great! Thanks for your feedback.';
if (themeGithubRepository && !liked) {
message = "Thanks for your feedback! Please don't hesitate to <a href='https://github.com/scylladb/scylladb/issues/new?title=docs:%20Issue on page Basic operations in CDC&&body=I%20would%20like%20to%20report%20an%20issue%20on%20page%20https://opensource.docs.scylladb.com/branch-6.2/features/cdc/cdc-basic-operations%0A%0A%23%23%23%20Problem%0A%0A%23%23%23%20%20Suggest%20a%20fix&labels=documentation'>create an issue</a> if you have any suggestions on how we can improve.";
}
feedbackMessage.innerHTML = message;
}
function sendGaEvent(liked) {
const event_label = liked ? "positive" : "negative";
const event = "feedback_" + event_label;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': event,
});
}
const positiveFeebackButton = document.getElementById('feedback-positive');
const negativeFeedbackButton = document.getElementById('feedback-negative');
positiveFeebackButton.addEventListener('click', function() {
resetFeedbackButtonActive();
sendGaEvent(true);
showMessage(true);
positiveFeebackButton.classList.add('active');
});
negativeFeedbackButton.addEventListener('click', function() {
resetFeedbackButtonActive();
sendGaEvent(false);
showMessage(false);
negativeFeedbackButton.classList.add('active');
});
</script>
<div class="content-navigation">
<div class="navigation navigation--prev">
<a class="navigation__link" href="cdc-log-table.html">
<button class="navigation__button">
<i class="icon-chevron-left"></i>
</button>
<div class="navigation__title">
<span class="colored">PREVIOUS</span> <br />The CDC Log Table
</div>
</a>
</div>
<div class="navigation navigation--next">
<a class="navigation__link" href="cdc-streams.html">
<div class="navigation__title">
<span class="colored">NEXT</span> <br />CDC Streams
</div>
<button class="navigation__button">
<i class="icon-chevron-right"></i>
</button>
</a>
</div>
</div>
<!-- Post content text -->
</div>
</div>
<div class="sidebar-right large-order-3">
<div class="secondary-side-nav custom-scroll-bar">
<ul class="contribute">
<li class="contribute__item">
<a class="button button-sm" href="https://github.com/scylladb/scylladb/issues/new?title=docs:%20Issue on page Basic operations in CDC&&body=I%20would%20like%20to%20report%20an%20issue%20on%20page%20https://opensource.docs.scylladb.com/branch-6.2/features/cdc/cdc-basic-operations%0A%0A%23%23%23%20Problem%0A%0A%23%23%23%20%20Suggest%20a%20fix&labels=documentation"
target="_blank">
<i class="icon-github" aria-hidden="true"></i>Create an issue
</a>
</li>
<li class="contribute__item">
<a class="button button-sm" href="https://github.com/scylladb/scylladb/edit/master/docs/features/cdc/cdc-basic-operations.rst"
target="_blank">
<i class="icon-edit" aria-hidden="true"></i>Edit this page
</a>
</li>
</ul>
<div class="secondary-side-nav__content">
<p class="topic-title">On this page</p>
<ul>
<li><a class="reference internal" href="#">Basic operations in CDC</a><ul>
<li><a class="reference internal" href="#updates">Updates</a><ul>
<li><a class="reference internal" href="#digression-static-rows-in-scylladb">Digression: static rows in ScyllaDB</a></li>
<li><a class="reference internal" href="#static-rows-in-cdc">Static rows in CDC</a></li>
</ul>
</li>
<li><a class="reference internal" href="#inserts">Inserts</a><ul>
<li><a class="reference internal" href="#digression-the-difference-between-inserts-and-updates">Digression: the difference between inserts and updates</a></li>
<li><a class="reference internal" href="#inserts-in-cdc">Inserts in CDC</a></li>
</ul>
</li>
<li><a class="reference internal" href="#row-deletions">Row deletions</a></li>
<li><a class="reference internal" href="#row-range-deletions">Row range deletions</a><ul>
<li><a class="reference internal" href="#range-deletions-with-multi-column-clustering-keys">Range deletions with multi-column clustering keys</a></li>
</ul>
</li>
<li><a class="reference internal" href="#partition-deletion">Partition deletion</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="sidebar-left large-order-1">
<div id="side-nav" class="side-nav custom-scroll-bar" data-closable data-toggler=".show">
<button class="collapsible-button">
<i class="icon-docs-menu-collapse"></i>
</button>
<div class="side-nav-content custom-scroll-bar">
<div class="side-nav__title">
<a href="../../index.html">ScyllaDB Open Source</a>
</div>
<div class="side-nav__search">
<biel-search-button
project="ddfdo8m94k"
button-style="rounded"
hide-filters="false"
hide-ctrl-k="true"
header-title="ScyllaDB chatbot (beta)"
modal-position="top-center">
Search
</biel-search-button>
<biel-button class="side-nav__ask-ai" project="ddfdo8m94k"
header-title="ScyllaDB chatbot (beta)"
button-position="default"
modal-position="sidebar-right"
button-style="dark">
Ask AI
</biel-button>
</div>
<div class="side-nav__versions"><ul class="dropdown menu scylla-dropdown scylla-dropdown--versions" data-dropdown-menu>
<li class="scylla-dropdown__item">
<a class="scylla-dropdown__title" href="#">
6.2
<i class="chevron icon-docs-chevron-right"></i>
</a>
<ul class="menu scylla-dropdown__content">
<li>
<a href="cdc-basic-operations.html">6.2</a>
</li>
<li>
<a href="../../../branch-6.1/index.html">6.1</a>
</li>
<li>
<a href="../../../branch-6.0/index.html">6.0</a>
</li>
<li>
<a href="../../../branch-5.4/index.html">5.4</a>
</li>
<li>
<a href="../../../branch-5.2/index.html">5.2</a>
</li>
<li>
<a href="../../../branch-5.1/index.html">5.1</a>
</li>
</ul>
</li>
</ul></div>
<div class="side-nav__content">
<ul class="current">
<li class="toctree-l1 has-children"><a class="reference internal" href="../../getting-started/index.html">Getting Started</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label for="toctree-checkbox-1"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../getting-started/install-scylla/index.html">Install ScyllaDB</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label for="toctree-checkbox-2"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/launch-on-aws.html">Launch ScyllaDB on AWS</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/launch-on-gcp.html">Launch ScyllaDB on GCP</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/launch-on-azure.html">Launch ScyllaDB on Azure</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/scylla-web-installer.html">ScyllaDB Web Installer for Linux</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/install-on-linux.html">Install ScyllaDB Linux Packages</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/install-jmx.html">Install scylla-jmx Package</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/install-scylla/run-in-docker.html">Run ScyllaDB in Docker</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/unified-installer.html">Install ScyllaDB Without root Privileges</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/air-gapped-install.html">Air-gapped Server Installation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/disable-housekeeping.html">ScyllaDB Housekeeping and how to disable it</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/dev-mod.html">ScyllaDB Developer Mode</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../getting-started/configure.html">Configure ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../getting-started/config-commands.html">ScyllaDB Configuration Reference</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../getting-started/requirements.html">ScyllaDB Requirements</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/><label for="toctree-checkbox-3"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/system-requirements.html">System Requirements</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/os-support.html">OS Support by Linux Distributions and Version</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/cloud-instance-recommendations.html">Cloud Instance Recommendations</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/scylla-in-a-shared-environment.html">ScyllaDB in a Shared Environment</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../using-scylla/migrate-scylla.html">Migrate to ScyllaDB</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label for="toctree-checkbox-4"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/cassandra-to-scylla-migration-process.html">Migration Process from Cassandra to ScyllaDB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/cassandra-compatibility.html">ScyllaDB and Apache Cassandra Compatibility</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/mig-tool-review.html">Migration Tools Overview</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../using-scylla/integrations/index.html">Integration Solutions</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/><label for="toctree-checkbox-5"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-spark.html">Integrate ScyllaDB with Spark</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-kairos.html">Integrate ScyllaDB with KairosDB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-presto.html">Integrate ScyllaDB with Presto</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-elasticsearch.html">Integrate ScyllaDB with Elasticsearch</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-k8.html">Integrate ScyllaDB with Kubernetes</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-janus.html">Integrate ScyllaDB with the JanusGraph Graph Data System</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-datadog.html">Integrate ScyllaDB with DataDog</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-kafka.html">Integrate ScyllaDB with Kafka</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-iota.html">Integrate ScyllaDB with IOTA Chronicle</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-spring.html">Integrate ScyllaDB with Spring</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/sink-kafka-connector.html">Shard-Aware Kafka Connector for ScyllaDB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-ansible.html">Install ScyllaDB with Ansible</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-databricks.html">Integrate ScyllaDB with Databricks</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-jaeger.html">Integrate ScyllaDB with Jaeger Server</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/integrations/integration-mindsdb.html">Integrate ScyllaDB with MindsDB</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../getting-started/tutorials.html">Tutorials</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../operating-scylla/index.html">ScyllaDB for Administrators</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" type="checkbox"/><label for="toctree-checkbox-6"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../operating-scylla/admin.html">Administration Guide</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../operating-scylla/procedures/index.html">Procedures</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" type="checkbox"/><label for="toctree-checkbox-7"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/cluster-management/index.html">Cluster Management</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/backup-restore/index.html">Backup &amp; Restore</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/config-change/index.html">Change Configuration</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/maintenance/index.html">Maintenance</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/tips/index.html">Best Practices</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/benchmarking-scylla.html">Benchmarking ScyllaDB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/cassandra-to-scylla-migration-process.html">Migrate from Cassandra to ScyllaDB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/installation-common/disable-housekeeping.html">Disable Housekeeping</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../operating-scylla/security/index.html">Security</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" type="checkbox"/><label for="toctree-checkbox-8"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/security-checklist.html">ScyllaDB Security Checklist</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/authentication.html">Enable Authentication</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/runtime-authentication.html">Enable and Disable Authentication Without Downtime</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/create-superuser.html">Creating a Custom Superuser</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/gen-cqlsh-file.html">Generate a cqlshrc File</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/password-reset.html">Reset Authenticator Password</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/enable-authorization.html">Enable Authorization</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/authorization.html">Grant Authorization CQL Reference</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/certificate-authentication.html">Certificate-based Authentication</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/rbac-usecase.html">Role Based Access Control (RBAC)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/client-node-encryption.html">Encryption: Data in Transit Client to Node</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/node-node-encryption.html">Encryption: Data in Transit Node to Node</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/generate-certificate.html">Generating a self-signed Certificate Chain Using openssl</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/security/saslauthd.html">Configure SaslauthdAuthenticator</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../operating-scylla/admin-tools/index.html">Admin Tools</a><input class="toctree-checkbox" id="toctree-checkbox-9" name="toctree-checkbox-9" type="checkbox"/><label for="toctree-checkbox-9"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/nodetool.html">Nodetool Reference</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../cql/cqlsh.html">CQLSh</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/rest.html">Admin REST API</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/tracing.html">Tracing</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/scylla-sstable.html">ScyllaDB SStable</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/scylla-types.html">ScyllaDB Types</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/sstableloader.html">SSTableLoader</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/cassandra-stress.html">cassandra-stress</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/sstabledump.html">SSTabledump</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/sstablemetadata.html">SSTableMetadata</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/logging.html">ScyllaDB Logs</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/perftune.html">Seastar Perftune</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/virtual-tables.html">Virtual Tables</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/select-from-mutation-fragments.html">Reading mutation fragments</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/maintenance-socket.html">Maintenance socket</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/maintenance-mode.html">Maintenance mode</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin-tools/task-manager.html">Task manager</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference external" href="https://monitoring.docs.scylladb.com/">ScyllaDB Monitoring Stack</a></li>
<li class="toctree-l2"><a class="reference external" href="https://operator.docs.scylladb.com/">ScyllaDB Operator</a></li>
<li class="toctree-l2"><a class="reference external" href="https://manager.docs.scylladb.com/">ScyllaDB Manager</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../upgrade/index.html">Upgrade Procedures</a><input class="toctree-checkbox" id="toctree-checkbox-10" name="toctree-checkbox-10" type="checkbox"/><label for="toctree-checkbox-10"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../upgrade/scylladb-versioning.html">ScyllaDB Versioning</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../upgrade/upgrade-opensource/index.html">ScyllaDB Open Source Upgrade</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../upgrade/upgrade-to-enterprise/index.html">ScyllaDB Open Source to ScyllaDB Enterprise Upgrade</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../upgrade/ami-upgrade.html">ScyllaDB Image</a></li>
<li class="toctree-l3"><a class="reference external" href="https://enterprise.docs.scylladb.com/stable/upgrade/upgrade-enterprise/index.html">ScyllaDB Enterprise</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../operating-scylla/system-configuration/index.html">System Configuration</a><input class="toctree-checkbox" id="toctree-checkbox-11" name="toctree-checkbox-11" type="checkbox"/><label for="toctree-checkbox-11"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../getting-started/system-configuration.html">System Configuration Guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/admin.html">scylla.yaml</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/system-configuration/snitch.html">ScyllaDB Snitches</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../operating-scylla/benchmarking-scylla.html">Benchmarking ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../operating-scylla/diagnostics.html">ScyllaDB Diagnostic Tools</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../using-scylla/index.html">ScyllaDB for Developers</a><input class="toctree-checkbox" id="toctree-checkbox-12" name="toctree-checkbox-12" type="checkbox"/><label for="toctree-checkbox-12"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference external" href="https://docs.scylladb.com/stable/get-started/develop-with-scylladb/index.html">Develop with ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference external" href="https://docs.scylladb.com/stable/get-started/develop-with-scylladb/tutorials-example-projects.html">Tutorials and Example Projects</a></li>
<li class="toctree-l2"><a class="reference external" href="https://docs.scylladb.com/stable/get-started/learn-resources/index.html">Learn to Use ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../using-scylla/alternator/index.html">ScyllaDB Alternator</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../using-scylla/drivers/index.html">ScyllaDB Drivers</a><input class="toctree-checkbox" id="toctree-checkbox-13" name="toctree-checkbox-13" type="checkbox"/><label for="toctree-checkbox-13"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/drivers/cql-drivers/index.html">ScyllaDB CQL Drivers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../using-scylla/drivers/dynamo-drivers/index.html">ScyllaDB DynamoDB Drivers</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../cql/index.html">CQL Reference</a><input class="toctree-checkbox" id="toctree-checkbox-14" name="toctree-checkbox-14" type="checkbox"/><label for="toctree-checkbox-14"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../cql/cqlsh.html">CQLSh: the CQL shell</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/appendices.html">Appendices</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/compaction.html">Compaction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/consistency.html">Consistency Levels</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/consistency-calculator.html">Consistency Level Calculator</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/ddl.html">Data Definition</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../cql/dml.html">Data Manipulation</a><input class="toctree-checkbox" id="toctree-checkbox-15" name="toctree-checkbox-15" type="checkbox"/><label for="toctree-checkbox-15"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../cql/dml/select.html">SELECT</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../cql/dml/insert.html">INSERT</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../cql/dml/update.html">UPDATE</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../cql/dml/delete.html">DELETE</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../cql/dml/batch.html">BATCH</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/types.html">Data Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/definitions.html">Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/secondary-indexes.html">Global Secondary Indexes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/time-to-live.html">Expiring Data with Time to Live (TTL)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/functions.html">Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/wasm.html">Wasm support for user-defined functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/json.html">JSON Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/mv.html">Materialized Views</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/non-reserved-keywords.html">Non-Reserved CQL Keywords</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/reserved-keywords.html">Reserved CQL Keywords</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/service-levels.html">Service Levels</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cql/cql-extensions.html">ScyllaDB CQL Extensions</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../alternator/alternator.html">Alternator: DynamoDB API in Scylla</a><input class="toctree-checkbox" id="toctree-checkbox-16" name="toctree-checkbox-16" type="checkbox"/><label for="toctree-checkbox-16"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../alternator/getting-started.html">Getting Started With ScyllaDB Alternator</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../alternator/compatibility.html">ScyllaDB Alternator for DynamoDB users</a></li>
</ul>
</li>
<li class="toctree-l1 current has-children"><a class="reference internal" href="../index.html">Features</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-17" name="toctree-checkbox-17" type="checkbox"/><label for="toctree-checkbox-17"><i class="icon-chevron-right"></i></label><div class="break"></div><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../lwt.html">Lightweight Transactions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../secondary-indexes.html">Global Secondary Indexes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../local-secondary-indexes.html">Local Secondary Indexes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../materialized-views.html">Materialized Views</a></li>
<li class="toctree-l2"><a class="reference internal" href="../counters.html">Counters</a></li>
<li class="toctree-l2 current has-children"><a class="reference internal" href="index.html">Change Data Capture</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-18" name="toctree-checkbox-18" type="checkbox"/><label for="toctree-checkbox-18"><i class="icon-chevron-right"></i></label><div class="break"></div><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="cdc-intro.html">CDC Overview</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-log-table.html">The CDC Log Table</a></li>
<li class="toctree-l3 current current-page"><a class="current reference internal" href="#">Basic operations in CDC</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-streams.html">CDC Streams</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-stream-generations.html">CDC Stream Generations</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-querying-streams.html">Querying CDC Streams</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-advanced-types.html">Advanced column types</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-preimages.html">Preimages and postimages</a></li>
<li class="toctree-l3"><a class="reference internal" href="cdc-consistency.html">Data Consistency in CDC</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../workload-attributes.html">Workload Attributes</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../architecture/index.html">ScyllaDB Architecture</a><input class="toctree-checkbox" id="toctree-checkbox-19" name="toctree-checkbox-19" type="checkbox"/><label for="toctree-checkbox-19"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/tablets.html">Data Distribution with Tablets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/ringarchitecture/index.html">ScyllaDB Ring Architecture</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/architecture-fault-tolerance.html">ScyllaDB Fault Tolerance</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/console-CL-full-demo.html">Consistency Level Console Demo</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../architecture/anti-entropy/index.html">ScyllaDB Anti-Entropy</a><input class="toctree-checkbox" id="toctree-checkbox-20" name="toctree-checkbox-20" type="checkbox"/><label for="toctree-checkbox-20"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../architecture/anti-entropy/hinted-handoff.html">ScyllaDB Hinted Handoff</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../architecture/anti-entropy/read-repair.html">ScyllaDB Read Repair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../operating-scylla/procedures/maintenance/repair.html">ScyllaDB Repair</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../architecture/sstable/index.html">SSTable</a><input class="toctree-checkbox" id="toctree-checkbox-21" name="toctree-checkbox-21" type="checkbox"/><label for="toctree-checkbox-21"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../architecture/sstable/sstable2/index.html">ScyllaDB SSTable - 2.x</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../architecture/sstable/sstable3/index.html">ScyllaDB SSTable - 3.x</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/compaction/compaction-strategies.html">Compaction Strategies</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/raft.html">Raft Consensus Algorithm in ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../architecture/zero-token-nodes.html">Zero-token Nodes</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../troubleshooting/index.html">Troubleshooting ScyllaDB</a><input class="toctree-checkbox" id="toctree-checkbox-22" name="toctree-checkbox-22" type="checkbox"/><label for="toctree-checkbox-22"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/support/index.html">Errors and Support</a><input class="toctree-checkbox" id="toctree-checkbox-23" name="toctree-checkbox-23" type="checkbox"/><label for="toctree-checkbox-23"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/report-scylla-problem.html">Report a ScyllaDB problem</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/error-messages/index.html">Error Messages</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/log-level.html">Change Log Level</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/startup/index.html">ScyllaDB Startup</a><input class="toctree-checkbox" id="toctree-checkbox-24" name="toctree-checkbox-24" type="checkbox"/><label for="toctree-checkbox-24"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/change-ownership.html">Ownership Problems</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/scylla-wont-start.html">ScyllaDB will not Start</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/python-error-no-module-named-yaml.html">ScyllaDB Python Script broken</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/upgrade/index.html">Upgrade</a><input class="toctree-checkbox" id="toctree-checkbox-25" name="toctree-checkbox-25" type="checkbox"/><label for="toctree-checkbox-25"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/missing-dotmount-files.html">Inaccessible configuration files after ScyllaDB upgrade</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/cluster/index.html">Cluster and Node</a><input class="toctree-checkbox" id="toctree-checkbox-26" name="toctree-checkbox-26" type="checkbox"/><label for="toctree-checkbox-26"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/handling-node-failures.html">Handling Node Failures</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/failed-add-remove-replace.html">Failure to Add, Remove, or Replace a Node</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/failed-decommission.html">Failed Decommission Problem</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/timeouts.html">Cluster Timeouts</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/node-joined-without-any-data.html">Node Joined With No Data</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/nodetool-nullpointerexception.html">NullPointerException</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/failed-schema-sync.html">Failed Schema Sync</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/modeling/index.html">Data Modeling</a><input class="toctree-checkbox" id="toctree-checkbox-27" name="toctree-checkbox-27" type="checkbox"/><label for="toctree-checkbox-27"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/large-partition-table.html">ScyllaDB Large Partitions Table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/large-rows-large-cells-tables.html">ScyllaDB Large Rows and Cells Table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/debugging-large-partition.html">Large Partitions Hunting</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/failed-update-schema.html">Failure to Update the Schema</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/storage/index.html">Data Storage and SSTables</a><input class="toctree-checkbox" id="toctree-checkbox-28" name="toctree-checkbox-28" type="checkbox"/><label for="toctree-checkbox-28"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/space-up.html">Space Utilization Increasing</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/drop-table-space-up.html">Disk Space is not Reclaimed</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/sstable-corruption.html">SSTable Corruption Problem</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/pointless-compactions.html">Pointless Compactions</a></li>
<li class="toctree-l3"><a class="reference external" href="https://monitoring.docs.scylladb.com/stable/use-monitoring/advisor/heavyCompaction.html">Limiting Compaction</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/CQL/index.html">CQL</a><input class="toctree-checkbox" id="toctree-checkbox-29" name="toctree-checkbox-29" type="checkbox"/><label for="toctree-checkbox-29"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/time-zone.html">Time Range Query Fails</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/copy-from-failed.html">COPY FROM Fails</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/clients-table.html">CQL Connection Table</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/monitor/index.html">ScyllaDB Monitor and Manager</a><input class="toctree-checkbox" id="toctree-checkbox-30" name="toctree-checkbox-30" type="checkbox"/><label for="toctree-checkbox-30"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/manager-monitoring-integration.html">Manager and Monitoring integration</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/reverse-dns-sshd.html">Manager lists healthy nodes as down</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../troubleshooting/install-remove/index.html">Installation and Removal</a><input class="toctree-checkbox" id="toctree-checkbox-31" name="toctree-checkbox-31" type="checkbox"/><label for="toctree-checkbox-31"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l3"><a class="reference internal" href="../../troubleshooting/autoremove-ubuntu.html">Removing ScyllaDB on Ubuntu breaks system packages</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../kb/index.html">Knowledge Base</a><input class="toctree-checkbox" id="toctree-checkbox-32" name="toctree-checkbox-32" type="checkbox"/><label for="toctree-checkbox-32"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../kb/cdc-experimental-upgrade.html">Upgrading from experimental CDC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/compaction.html">Compaction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/consistency.html">Consistency in ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/count-all-rows.html">Counting all rows in a table is slow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/cqlsh-more.html">CQL Query Does Not Display Entire Result Set</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/cqlsh-results.html">When CQLSh query returns partial results with followed by “More”</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/custom-user.html">Run ScyllaDB and supporting services as a custom user:group</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/customizing-cpuset.html">Customizing CPUSET</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/decode-stack-trace.html">Decoding Stack Traces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/disk-utilization.html">Snapshots and Disk Utilization</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/dpdk-hardware.html">DPDK mode</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/flamegraph.html">Debug your database with Flame Graphs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/gc-grace-seconds.html">How to Change gc_grace_seconds for a Table</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/gossip.html">Gossip in ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/increase-permission-cache.html">Increase Permission Cache to Avoid Non-paged Queries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/lwt-differences.html">How does ScyllaDB LWT Differ from Apache Cassandra ?</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/map-cpu.html">Map CPUs to ScyllaDB Shards</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/memory-usage.html">ScyllaDB Memory Usage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/ntp.html">NTP Configuration for ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/perftune-modes-sync.html">Updating the Mode in perftune.yaml After a ScyllaDB Upgrade</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/posix.html">POSIX networking for ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/quiz-administrators.html">ScyllaDB consistency quiz for administrators</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/raid-device.html">Recreate RAID devices</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/rf-increase.html">How to Safely Increase the Replication Factor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/scylla-and-spark-integration.html">ScyllaDB and Spark integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/scylla-limits-systemd.html">Increase ScyllaDB resource limits over systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/seed-nodes.html">ScyllaDB Seed Nodes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/set-up-swap.html">How to Set up a Swap Space</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/snapshots.html">ScyllaDB Snapshots</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/static-columns.html">ScyllaDB payload sent duplicated static columns</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/stop-local-repair.html">Stopping a local repair</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/system-limits.html">System Limits</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/tombstones-flush.html">How to flush old tombstones from a table</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/ttl-facts.html">Time to Live (TTL) and Compaction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/unresponsive-nodes.html">ScyllaDB Nodes are Unresponsive</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/update-pk.html">Update a Primary Key</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/use-perf.html">Using the perf utility with ScyllaDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../kb/yaml-address.html">Configure ScyllaDB Networking with Multiple NIC/IP Combinations</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../reference/index.html">Reference</a><input class="toctree-checkbox" id="toctree-checkbox-33" name="toctree-checkbox-33" type="checkbox"/><label for="toctree-checkbox-33"><i class="icon-chevron-right"></i></label><div class="break"></div><ul>
<li class="toctree-l2"><a class="reference internal" href="../../reference/aws-images.html">AWS Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/azure-images.html">Azure Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/gcp-images.html">GCP Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/configuration-parameters.html">Configuration Parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/glossary.html">Glossary</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/limits.html">Limits</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/api-reference.html">API Reference (BETA)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../reference/metrics.html">Metrics (BETA)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../faq.html">ScyllaDB FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contribute.html">Contribute to ScyllaDB</a></li>
</ul>
</div>
</div>
</div>
</div>
</section>
<footer class="footer">
<div class="footer-group">
<div class="footer-top">
<a class="footer-logo" href="https://www.scylladb.com"></a>
<div class="footer-links">
<a class="footer-links__link" href="https://docs.scylladb.com/" target="_blank">Docs</a>
<a class="footer-links__link" href="https://docs.scylladb.com/stable/get-started/develop-with-scylladb/tutorials-example-projects.html" target="_blank">Tutorials</a>
<a class="footer-links__link" href="https://university.scylladb.com/" target="_blank">University</a>
<a class="footer-links__link" href="https://www.scylladb.com/company/contact-us/"
target="_blank">Contact Us</a>
<a class="footer-links__link" href="https://www.scylladb.com/company/" target="_blank">About Us</a>
</div>
<div class="footer-actions">
<a class="footer-actions__link" href="http://slack.scylladb.com/" target="_blank">
<span data-tooltip tabindex="1" title="User Slack channel" data-position="bottom">
<i class="icon-slack"></i>
</span>
</a>
<a class="footer-actions__link" href="https://forum.scylladb.com/" target="_blank">
<span data-tooltip tabindex="1" title="Community forum" data-position="bottom">
<i class="icon-docs-community"></i>
</span>
</a>
</div>
</div>
<div class="footer-copyright">
&#169; 2026, ScyllaDB. All rights reserved.
| <a class="footer-copyright__link" href="https://www.scylladb.com/tos/" target="_blank">Terms of Service</a>
| <a class="footer-copyright__link" href="https://www.scylladb.com/privacy/" target="_blank">Privacy Policy</a>
| ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
</div>
<div class="footer-bottom">
<div class="footer-bottom__last-updated">
Last updated on 19 Apr 2026.
</div>
<div class="footer-bottom__version">
Powered by
<a class="footer-bottom__link" href="http://sphinx-doc.org/">Sphinx 9.1.0</a> &amp;
<a class="footer-bottom__link" href="https://sphinx-theme.scylladb.com/">ScyllaDB Theme 1.9.2</a>
</div>
</div>
</div>
</footer>
<noscript>
<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T8P2JP" height="0" width="0"
style="display: none; visibility: hidden"></iframe>
</noscript>
</body>
</html>