<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title>Cassandra Adapter</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <meta name="generator" content="Jekyll v3.7.3">
  <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
  <link rel="stylesheet" href="/css/screen.css">
  <link rel="icon" type="image/x-icon" href="/favicon.ico">
  <!--[if lt IE 9]>
  <script src="/js/html5shiv.min.js"></script>
  <script src="/js/respond.min.js"></script>
  <![endif]-->
</head>


<body class="wrap">
  <header role="banner">
  <nav class="mobile-nav show-on-mobiles">
    <ul>
  <li class="">
    <a href="/">Home</a>
  </li>
  <li class="">
    <a href="/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/community/">Community</a>
  </li>
  <li class="">
    <a href="/develop/">Develop</a>
  </li>
  <li class="current">
    <a href="/news/">News</a>
  </li>
  <li class="">
    <a href="/docs/">Docs</a>
  </li>
</ul>

  </nav>
  <div class="grid">
    <div class="unit one-third center-on-mobiles">
      <h1>
        <a href="/">
          <span class="sr-only">Apache Calcite</span>
          <img src="/img/logo.png" width="226" height="140" alt="Calcite Logo">
        </a>
      </h1>
    </div>
    <nav class="main-nav unit two-thirds hide-on-mobiles">
      <ul>
  <li class="">
    <a href="/">Home</a>
  </li>
  <li class="">
    <a href="/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/community/">Community</a>
  </li>
  <li class="">
    <a href="/develop/">Develop</a>
  </li>
  <li class="current">
    <a href="/news/">News</a>
  </li>
  <li class="">
    <a href="/docs/">Docs</a>
  </li>
</ul>

    </nav>
  </div>
</header>


    <section class="news">
    <div class="grid">

      <div class="docs-nav-mobile unit whole show-on-mobiles">
  <select onchange="if (this.value) window.location.href=this.value">
    <option value="">Navigate the blog…</option>
    <option value="/news/">Home</option>
    <optgroup label="v1.x">
            <option value="/news/2019/06/24/release-1.20.0/">Release 1.20.0</option>
      <option value="/news/2019/03/25/release-1.19.0/">Release 1.19.0</option>
      <option value="/news/2018/12/21/release-1.18.0/">Release 1.18.0</option>
      <option value="/news/2018/07/20/release-1.17.0/">Release 1.17.0</option>
      <option value="/news/2018/03/19/release-1.16.0/">Release 1.16.0</option>
      <option value="/news/2017/12/11/release-1.15.0/">Release 1.15.0</option>
      <option value="/news/2017/10/02/release-1.14.0/">Release 1.14.0</option>
      <option value="/news/2017/06/26/release-1.13.0/">Release 1.13.0</option>
      <option value="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</option>
      <option value="/news/2017/03/24/release-1.12.0/">Release 1.12.0</option>
      <option value="/news/2017/01/09/release-1.11.0/">Release 1.11.0</option>
      <option value="/news/2016/10/12/release-1.10.0/">Release 1.10.0</option>
      <option value="/news/2016/09/22/release-1.9.0/">Release 1.9.0</option>
      <option value="/news/2016/06/13/release-1.8.0/">Release 1.8.0</option>
      <option value="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</option>
      <option value="/news/2016/03/22/release-1.7.0/">Release 1.7.0</option>
      <option value="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</option>
      <option value="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</option>
      <option value="/news/2016/01/22/release-1.6.0/">Release 1.6.0</option>
      <option value="/news/2015/11/10/release-1.5.0/">Release 1.5.0</option>
      <option value="/news/2015/11/08/new-committers/">Calcite adds 2 committers</option>
      <option value="/news/2015/10/22/calcite-graduates/">Calcite Graduates</option>
      <option value="/news/2015/09/02/release-1.4.0-incubating/">Release 1.4.0 Incubating</option>
      <option value="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</option>
      <option value="/news/2015/06/05/algebra-builder/">Algebra builder</option>
      <option value="/news/2015/05/30/release-1.3.0-incubating/">Release 1.3.0 Incubating</option>
      <option value="/news/2015/04/24/new-committers/">Calcite adds 5 committers</option>
      <option value="/news/2015/04/07/release-1.2.0-incubating/">Release 1.2.0 Incubating</option>
      <option value="/news/2015/03/13/release-1.1.0-incubating/">Release 1.1.0 Incubating</option>
      <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>

    </optgroup>
  </select>
</div>


      <div class="unit four-fifths">
        <article>
  <h2>
    Cassandra Adapter
    <a href="/news/2016/03/22/cassandra-adapter/" class="permalink" title="Permalink">∞</a>
  </h2>
  <span class="post-category">
    <span class="label">
      new features
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      22 Mar 2016
    </span>
    
    
    
    <a href="http://people.apache.org/~jhyde" class="post-author">
      <img src="http://github.com/julianhyde.png"
           class="avatar" alt="jhyde avatar"
           width="24" height="24">
      jhyde
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>A new Apache Calcite adapter allows you to access
<a href="http://cassandra.apache.org/">Apache Cassandra</a> via industry-standard SQL.</p>

<p>You can map a Cassandra keyspace into Calcite as a schema, Cassandra
CQL tables as tables, and execute SQL queries on them, which Calcite
converts into <a href="https://cassandra.apache.org/doc/cql/CQL.html">CQL</a>.
Cassandra can define and maintain materialized views but the adapter
goes further: it can transparently rewrite a query to use a
materialized view even if the view is not mentioned in the query.</p>

<p>Read more about the adapter <a href="/docs/cassandra.html">here</a>.</p>

<p>The Cassandra adapter is available as part of
<a href="/docs/history.html#v1-7-0">Apache Calcite version 1.7.0</a>,
which has just been released. Calcite also has
<a href="/docs/adapter.html">adapters</a>
for CSV and JSON files, and JDBC data source, MongoDB, Spark and Splunk.</p>

    
  </div>
</article>

      </div>

      <div class="unit one-fifth hide-on-mobiles">
  <aside>
    <ul>
      <li class="">
        <a href="/news/">All News</a>
      </li>
      <li class="">
        <a href="/news/releases/">Calcite Releases</a>
      </li>
    </ul>
    <h4>Recent Releases</h4>
    <ul>
      
      <li class="">
        <a href="/news/2019/06/24/release-1.20.0/">1.20.0</a>
      </li>
      
      <li class="">
        <a href="/news/2019/03/25/release-1.19.0/">1.19.0</a>
      </li>
      
      <li class="">
        <a href="/news/2018/12/21/release-1.18.0/">1.18.0</a>
      </li>
      
      <li class="">
        <a href="/news/2018/07/20/release-1.17.0/">1.17.0</a>
      </li>
      
      <li class="">
        <a href="/news/2018/03/19/release-1.16.0/">1.16.0</a>
      </li>
      
    </ul>
    <h4>Other News</h4>
    <ul>
        
        <li class="">
          <a href="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</a>
        </li>
          
        <li class="current">
          <a href="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</a>
        </li>
          
        <li class="">
          <a href="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</a>
        </li>
          
        <li class="">
          <a href="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</a>
        </li>
          
        <li class="">
          <a href="/news/2015/11/08/new-committers/">Calcite adds 2 committers</a>
        </li>
          
        <li class="">
          <a href="/news/2015/10/22/calcite-graduates/">Calcite Graduates</a>
        </li>
          
        <li class="">
          <a href="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</a>
        </li>
          
        <li class="">
          <a href="/news/2015/06/05/algebra-builder/">Algebra builder</a>
        </li>
          
        <li class="">
          <a href="/news/2015/04/24/new-committers/">Calcite adds 5 committers</a>
        </li>
          
    </ul>
  </aside>
</div>


      <div class="clear"></div>

    </div>
  </section>


  <footer role="contentinfo">
  <div id="poweredby">
    <a href="http://www.apache.org/">
      <span class="sr-only">Apache</span>
      <img src="/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
  </div>
  <div id="copyright">
  <p>The contents of this website are Copyright &copy;&nbsp;2019
     <a href="https://www.apache.org/">Apache Software Foundation</a>
     under the terms of
     the <a href="https://www.apache.org/licenses/">
     Apache&nbsp;License&nbsp;v2</a>. Apache Calcite and its logo are
     trademarks of the Apache Software Foundation.</p>
  </div>
</footer>

  <script>
  var anchorForId = function (id) {
    var anchor = document.createElement("a");
    anchor.className = "header-link";
    anchor.href      = "#" + id;
    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
    anchor.title = "Permalink";
    return anchor;
  };

  var linkifyAnchors = function (level, containingElement) {
    var headers = containingElement.getElementsByTagName("h" + level);
    for (var h = 0; h < headers.length; h++) {
      var header = headers[h];

      if (typeof header.id !== "undefined" && header.id !== "") {
        header.appendChild(anchorForId(header.id));
      }
    }
  };

  document.onreadystatechange = function () {
    if (this.readyState === "complete") {
      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
      if (!contentBlock) {
        return;
      }
      for (var level = 1; level <= 6; level++) {
        linkifyAnchors(level, contentBlock);
      }
    }
  };
</script>


</body>
</html>
