| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> |
| <title>Data Types | Apache Cassandra Documentation</title> |
| <link rel="stylesheet" href="../../../../assets/css/site.css"> |
| <link rel="schema.dcterms" href="https://purl.org/dc/terms/"> |
| <meta name="dcterms.subject" content="Cassandra"> |
| <meta name="dcterms.identifier" content="3.11"> |
| <meta name="generator" content="Antora 2.3.4"> |
| <link rel="icon" href="../../../../assets/img/favicon.ico" type="image/x-icon"> |
| <script> |
| const script = document.createElement("script"); |
| const domain = window.location.hostname; |
| script.type = "text/javascript"; |
| script.src = "https://plausible.cassandra.apache.org/js/plausible.js"; |
| script.setAttribute("data-domain",domain); |
| script.setAttribute("defer",'true'); |
| script.setAttribute("async",'true'); |
| document.getElementsByTagName("head")[0].appendChild(script); |
| </script> </head> |
| <body class="docs-wrapper article"> |
| <div class="container mx-auto relative"> |
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> |
| <meta property="og:type" content="website" /> |
| <meta property="og:url" content="/" /> |
| <meta property="og:site_name" content="Apache Cassandra" /> |
| |
| <header id="top-nav"> |
| <div class="inner relative"> |
| <div class="header-social-icons text-right"> |
| <a href="https://twitter.com/cassandra?lang=en" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a> |
| <a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a> |
| <a href="https://www.youtube.com/c/PlanetCassandra" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a> |
| </div> |
| <div class="cf"> |
| <div class="logo left"><a href="/"><img src="../../../../assets/img/logo-white-r.png" alt="Cassandra Logo"></a></div> |
| <div class="mobile-nav-icon right"> |
| <img class="toggle-icon" src="../../../../assets/img/hamburger-nav.svg"> |
| </div> |
| <ul class="main-nav nav-links right flex flex-vert-center flex-space-between"> |
| <li> |
| <a class="nav-link hide-mobile">Get Started</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/cassandra-basics.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-basics.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Cassandra Basics |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/quickstart.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-rocket.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Quickstart |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/ecosystem.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-ecosystem.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Ecosystem |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li><a class="nav-link" href="/doc/latest/">Documentation</a></li> |
| <li> |
| <a class="nav-link" href="/_/community.html">Community</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/community.html#code-of-conduct"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-welcome.png" alt="welcome icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Welcome |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#discussions"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-discussions.png" alt="discussions icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Discussions |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#project-governance"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-governance.png" alt="Governance icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Governance |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#how-to-contribute"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-contribute.png" alt="Contribute icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Contribute |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#meet-the-community"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-community.png" alt="Meet the Community icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Meet the Community |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/cassandra-catalyst-program.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-catalyst.png" alt="Catalyst icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Catalyst Program |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/events.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-events.png" alt="Events icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Events |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li> |
| <a class="nav-link hide-mobile">Learn</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/Apache-Cassandra-5.0-Moving-Toward-an-AI-Driven-Future.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-basics.png" alt="Basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Cassandra 5.0 |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/case-studies.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-case-study.png" alt="Case Studies icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Case Studies |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/resources.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-resources.png" alt="Resources icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Resources |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/blog.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-blog.png" alt="Blog icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Blog |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li><a class="nav-link btn btn--filled" href="/_/download.html">Download Now</a></li> |
| </ul> |
| </div> |
| </div> |
| </header> |
| |
| <div class="hero hero--home grad"> |
| <div class="eye"></div> |
| <div id="docs-content" class="text-center flex flex-center flex-column relative z2 ma-xlarge"> |
| <h2>Cassandra Documentation</h2> |
| </div> |
| </div> |
| <div class="body px-medium py-medium container"> |
| <div class="docs-nav-bar flex flex-space-between mb-medium"> |
| <div id="mobile-docs-nav-burger" class="hidden"> |
| <svg viewBox="0 0 24 24" width="36" height="36" stroke="#1c81a0" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg> |
| </div> |
| <div class="docs-nav-item relative"> |
| <input id="search-input" type="text" placeholder="Search docs"> |
| </div> |
| <div class="versions-wrapper"> |
| <h4>Version:</h4> |
| <div class="nav-panel-explore" data-panel="explore"> |
| |
| <div id="version-toggle" class="context"> |
| <span class="version">3.11</span> |
| </div> |
| <ul id="versions-list" class="components"> |
| <li class="component"> |
| <ul class="versions"> |
| <li class="version is-latest"> |
| <a href="../../../../_/index.html">master</a> |
| </li> |
| </ul> |
| </li> |
| <li class="component is-current"> |
| <ul class="versions"> |
| <li class="version"> |
| <a href="../../../trunk/index.html">trunk</a> |
| </li> |
| <li class="version"> |
| <a href="../../../5.0/index.html">5.0</a> |
| </li> |
| <li class="version is-latest"> |
| <a href="../../../4.1/index.html">4.1</a> |
| </li> |
| <li class="version"> |
| <a href="../../../4.0/index.html">4.0</a> |
| </li> |
| <li class="version is-current"> |
| <a href="../../index.html">3.11</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> </div> |
| <div class="cf relative"> |
| <nav class="nav docs-nav full-800"> |
| <div class="nav-menu"> |
| <ul class="nav-list"> |
| <li class="nav-item is-active" data-depth="0"> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="1"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../../index.html">Main</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/glossary.html">Glossary</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/bugs.html">How to report bugs</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/contactus.html">Contact us</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item is-active" data-depth="0"> |
| <ul class="nav-list"> |
| <li class="nav-item is-current-path is-active" data-depth="1"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <span class="nav-text">Cassandra</span> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../getting_started/index.html">Getting Started</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/installing.html">Installing Cassandra</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/configuring.html">Configuring Cassandra</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/querying.html">Inserting and querying</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/drivers.html">Client drivers</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/production.html">Production recommendations</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../architecture/index.html">Architecture</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/overview.html">Overview</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/dynamo.html">Dynamo</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/storage_engine.html">Storage engine</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/guarantees.html">Guarantees</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../data_modeling/index.html">Data modeling</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/intro.html">Introduction</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_conceptual.html">Conceptual data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_rdbms.html">RDBMS design</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_queries.html">Defining application queries</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_logical.html">Logical data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_physical.html">Physical data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_refining.html">Evaluating and refining data models</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_schema.html">Defining database schema</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_tools.html">Cassandra data modeling tools</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item is-current-path is-active" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="index.html">Cassandra Query Language (CQL)</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="definitions.html">Definitions</a> |
| </span> |
| </li> |
| <li class="nav-item is-current-page is-active" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="types.html">Data types</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="ddl.html">Data definition (DDL)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="dml.html">Data manipulation (DML)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="operators.html">Operators</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="indexes.html">Secondary indexes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="mvs.html">Materialized views</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="functions.html">Functions</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="json.html">JSON</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="security.html">Security</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="triggers.html">Triggers</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="appendices.html">Appendices</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="changes.html">Changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="SASI.html">SASI</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="cql_singlefile.html">Single file of CQL information</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../configuration/index.html">Configuration</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_yaml_file.html">cassandra.yaml</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_rackdc_file.html">cassandra-rackdc.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_env_sh_file.html">cassandra-env.sh</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_topo_file.html">cassandra-topologies.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_cl_archive_file.html">commitlog-archiving.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_logback_xml_file.html">logback.xml</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_jvm_options_file.html">jvm-* files</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../operating/index.html">Operating</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="#operating/snitch.adoc">Snitches</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/topo_changes.html">Topology changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/repair.html">Repair</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/hints.html">Hints</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/bloom_filters.html">Bloom filters</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/compression.html">Compression</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/cdc.html">Change Data Capture (CDC)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/backups.html">Backups</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/bulk_loading.html">Bulk loading</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/metrics.html">Metrics</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/security.html">Security</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/hardware.html">Hardware</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/audit_logging.html">Audit logging</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../operating/compaction/index.html">Compaction</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../tools/index.html">Tools</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/cqlsh.html">cqlsh: the CQL shell</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/nodetool/nodetool.html">nodetool</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/sstable/index.html">SSTable tools</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/cassandra_stress.html">cassandra-stress</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../troubleshooting/index.html">Troubleshooting</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/finding_nodes.html">Finding misbehaving nodes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/reading_logs.html">Reading Cassandra logs</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/use_nodetool.html">Using nodetool</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/use_tools.html">Using external tools to deep-dive</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../../../../_/development/index.html">Development</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/gettingstarted.html">Getting started</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/ide.html">Building and IDE integration</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/testing.html">Testing</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/patches.html">Contributing code changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/code_style.html">Code style</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/how_to_review.html">Review checklist</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/how_to_commit.html">How to commit</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/documentation.html">Working on documentation</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/ci.html">Jenkins CI environment</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/dependencies.html">Dependency management</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/release_process.html">Release process</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../faq/index.html">FAQ</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../plugins/index.html">Plug-ins</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </nav> |
| <aside class="toc sidebar"> |
| <div class="toc-menu"></div> |
| </aside> |
| <main class="article default-main full-800" data-ceiling="topbar"> |
| <div class="article-banner"> |
| <p>A newer version of this documentation is available.</p> |
| <a class="btn" href="../../../4.1/cassandra/cql/types.html">View Latest</a> |
| </div> |
| <div class="article-header"> |
| <nav class="crumbs" aria-label="breadcrumbs"> |
| <ul> |
| <li class="crumb">Cassandra</li> |
| <li class="crumb"><a href="index.html">Cassandra Query Language (CQL)</a></li> |
| <li class="crumb"><a href="types.html">Data types</a></li> |
| </ul> |
| </nav> |
| <div class="tools" role="navigation"> |
| <ul> |
| <li class="tool edit"><a href="file:///home/jenkins/working/cassandra/doc/modules/cassandra/pages/cql/types.adoc" title="Edit Page" target="_blank" rel="noopener">Edit</a></li> |
| </ul> |
| </div> |
| </div> |
| <article class="doc"> |
| <h1 class="page">Data Types</h1> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>CQL is a typed language and supports a rich set of data types, including |
| <a href="#native-types">native types</a>, <a href="#collections">collection types</a>, |
| <a href="#udts">user-defined types</a>, <a href="#tuples">tuple types</a>, and <a href="#custom-types">custom |
| types</a>:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">cql_type::= native_type| collection_type| user_defined_type | tuple_type | custom_type</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="native-types"><a class="anchor" href="#native-types"></a><a class="link" href="#native-types">Native types</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The native types supported by CQL are:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">native_type::= ASCII | BIGINT | BLOB | BOOLEAN | COUNTER | DATE |
| | DECIMAL | DOUBLE | DURATION | FLOAT | INET | INT | |
| SMALLINT | TEXT | TIME | TIMESTAMP | TIMEUUID | TINYINT | |
| UUID | VARCHAR | VARINT</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following table gives additional informations on the native data |
| types, and on which kind of <a href="definitions.html#constants" class="page">constants</a> each type supports:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 33.3333%;"> |
| <col style="width: 33.3333%;"> |
| <col style="width: 33.3334%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Type</th> |
| <th class="tableblock halign-left valign-top">Constants supported</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>ascii</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ASCII character string</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>bigint</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">64-bit signed long</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>blob</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>blob</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Arbitrary bytes (no validation)</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Either <code>true</code> or <code>false</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>counter</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Counter column (64-bit signed value). See <code>counters</code> for details.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>date</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code>, <code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A date (with no corresponding time value). See <code>dates</code> below for details.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>decimal</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code>, <code>float</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Variable-precision decimal</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>double</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code> <code>float</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">64-bit IEEE-754 floating point</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>duration</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>duration</code>,</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A duration with nanosecond precision. See <code>durations</code> below for details.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>float</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code>, <code>float</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">32-bit IEEE-754 floating point</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>inet</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">An IP address, either IPv4 (4 bytes long) or IPv6 (16 bytes long). Note |
| that there is no <code>inet</code> constant, IP address should be input as strings.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">32-bit signed int</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>smallint</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">16-bit signed int</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>text</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">UTF8 encoded string</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>time</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code>, <code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A time (with no corresponding date value) with nanosecond precision. See |
| <code>times</code> below for details.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>timestamp</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code>, <code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A timestamp (date and time) with millisecond precision. See <code>timestamps</code> |
| below for details.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>timeuuid</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>uuid</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Version 1 <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a>, |
| generally used as a “conflict-free” timestamp. Also see <code>timeuuid-functions</code>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>tinyint</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">8-bit signed int</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>uuid</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>uuid</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a> (of any version)</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>varchar</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>string</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">UTF8 encoded string</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>varint</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>integer</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Arbitrary-precision integer</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="sect2"> |
| <h3 id="counters"><a class="anchor" href="#counters"></a><a class="link" href="#counters">Counters</a></h3> |
| <div class="paragraph"> |
| <p>The <code>counter</code> type is used to define <em>counter columns</em>. A counter column |
| is a column whose value is a 64-bit signed integer and on which 2 |
| operations are supported: incrementing and decrementing (see the |
| <a href="dml.html#update-statement" class="page">UPDATE</a> statement for syntax). |
| Note that the value of a counter cannot |
| be set: a counter does not exist until first incremented/decremented, |
| and that first increment/decrement is made as if the prior value was 0.</p> |
| </div> |
| <div id="counter-limitations" class="paragraph"> |
| <p>Counters have a number of important limitations:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>They cannot be used for columns part of the <code>PRIMARY KEY</code> of a table.</p> |
| </li> |
| <li> |
| <p>A table that contains a counter can only contain counters. In other |
| words, either all the columns of a table outside the <code>PRIMARY KEY</code> have |
| the <code>counter</code> type, or none of them have it.</p> |
| </li> |
| <li> |
| <p>Counters do not support <a href="dml.html#writetime-and-ttl-function" class="page">expiration</a>.</p> |
| </li> |
| <li> |
| <p>The deletion of counters is supported, but is only guaranteed to work |
| the first time you delete a counter. In other words, you should not |
| re-update a counter that you have deleted (if you do, proper behavior is |
| not guaranteed).</p> |
| </li> |
| <li> |
| <p>Counter updates are, by nature, not |
| <a href="https://en.wikipedia.org/wiki/Idempotence">idemptotent</a>. An important |
| consequence is that if a counter update fails unexpectedly (timeout or |
| loss of connection to the coordinator node), the client has no way to |
| know if the update has been applied or not. In particular, replaying the |
| update may or may not lead to an over count.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="timestamps"><a class="anchor" href="#timestamps"></a><a class="link" href="#timestamps">Working with timestamps</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Values of the <code>timestamp</code> type are encoded as 64-bit signed integers |
| representing a number of milliseconds since the standard base time known |
| as <a href="https://en.wikipedia.org/wiki/Unix_time">the epoch</a>: January 1 1970 at |
| 00:00:00 GMT.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Timestamps can be input in CQL either using their value as an <code>integer</code>, |
| or using a <code>string</code> that represents an |
| <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> date. For instance, all |
| of the values below are valid <code>timestamp</code> values for Mar 2, 2011, at |
| 04:05:00 AM, GMT:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>1299038700000</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03 04:05+0000'</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03 04:05:00+0000'</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03 04:05:00.000+0000'</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03T04:05+0000'</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03T04:05:00+0000'</code></p> |
| </li> |
| <li> |
| <p><code>'2011-02-03T04:05:00.000+0000'</code></p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The <code>+0000</code> above is an RFC 822 4-digit time zone specification; <code>+0000</code> |
| refers to GMT. US Pacific Standard Time is <code>-0800</code>. The time zone may be |
| omitted if desired (<code>'2011-02-03 04:05:00'</code>), and if so, the date will |
| be interpreted as being in the time zone under which the coordinating |
| Cassandra node is configured. There are however difficulties inherent in |
| relying on the time zone configuration being as expected, so it is |
| recommended that the time zone always be specified for timestamps when |
| feasible.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The time of day may also be omitted (<code>'2011-02-03'</code> or |
| <code>'2011-02-03+0000'</code>), in which case the time of day will default to |
| 00:00:00 in the specified or default time zone. However, if only the |
| date part is relevant, consider using the <a href="#dates">date</a> type.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="dates"><a class="anchor" href="#dates"></a><a class="link" href="#dates">Date type</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Values of the <code>date</code> type are encoded as 32-bit unsigned integers |
| representing a number of days with “the epoch” at the center of the |
| range (2^31). Epoch is January 1st, 1970</p> |
| </div> |
| <div class="paragraph"> |
| <p>For <a href="#timestamps">timestamps</a>, a date can be input either as an |
| <code>integer</code> or using a date <code>string</code>. In the later case, the format should |
| be <code>yyyy-mm-dd</code> (so <code>'2011-02-03'</code> for instance).</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="times"><a class="anchor" href="#times"></a><a class="link" href="#times">Time type</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Values of the <code>time</code> type are encoded as 64-bit signed integers |
| representing the number of nanoseconds since midnight.</p> |
| </div> |
| <div class="paragraph"> |
| <p>For <a href="#timestamps">timestamps</a>, a time can be input either as an |
| <code>integer</code> or using a <code>string</code> representing the time. In the later case, |
| the format should be <code>hh:mm:ss[.fffffffff]</code> (where the sub-second |
| precision is optional and if provided, can be less than the nanosecond). |
| So for instance, the following are valid inputs for a time:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>'08:12:54'</code></p> |
| </li> |
| <li> |
| <p><code>'08:12:54.123'</code></p> |
| </li> |
| <li> |
| <p><code>'08:12:54.123456'</code></p> |
| </li> |
| <li> |
| <p><code>'08:12:54.123456789'</code></p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="durations"><a class="anchor" href="#durations"></a><a class="link" href="#durations">Duration type</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Values of the <code>duration</code> type are encoded as 3 signed integer of |
| variable lengths. The first integer represents the number of months, the |
| second the number of days and the third the number of nanoseconds. This |
| is due to the fact that the number of days in a month can change, and a |
| day can have 23 or 25 hours depending on the daylight saving. |
| Internally, the number of months and days are decoded as 32 bits |
| integers whereas the number of nanoseconds is decoded as a 64 bits |
| integer.</p> |
| </div> |
| <div class="paragraph"> |
| <p>A duration can be input as:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>(quantity unit)+</code> like <code>12h30m</code> where the unit can be:</p> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>y</code>: years (12 months)</p> |
| </li> |
| <li> |
| <p><code>mo</code>: months (1 month)</p> |
| </li> |
| <li> |
| <p><code>w</code>: weeks (7 days)</p> |
| </li> |
| <li> |
| <p><code>d</code>: days (1 day)</p> |
| </li> |
| <li> |
| <p><code>h</code>: hours (3,600,000,000,000 nanoseconds)</p> |
| </li> |
| <li> |
| <p><code>m</code>: minutes (60,000,000,000 nanoseconds)</p> |
| </li> |
| <li> |
| <p><code>s</code>: seconds (1,000,000,000 nanoseconds)</p> |
| </li> |
| <li> |
| <p><code>ms</code>: milliseconds (1,000,000 nanoseconds)</p> |
| </li> |
| <li> |
| <p><code>us</code> or <code>µs</code> : microseconds (1000 nanoseconds)</p> |
| </li> |
| <li> |
| <p><code>ns</code>: nanoseconds (1 nanosecond)</p> |
| </li> |
| </ul> |
| </div> |
| </li> |
| <li> |
| <p>ISO 8601 format: <code>P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W</code></p> |
| </li> |
| <li> |
| <p>ISO 8601 alternative format: <code>P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]</code></p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>For example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">INSERT INTO RiderResults (rider, race, result) |
| VALUES ('Christopher Froome', 'Tour de France', 89h4m48s); |
| INSERT INTO RiderResults (rider, race, result) |
| VALUES ('BARDET Romain', 'Tour de France', PT89H8M53S); |
| INSERT INTO RiderResults (rider, race, result) |
| VALUES ('QUINTANA Nairo', 'Tour de France', P0000-00-00T89:09:09);</code></pre> |
| </div> |
| </div> |
| <div id="duration-limitation" class="paragraph"> |
| <p>Duration columns cannot be used in a table’s <code>PRIMARY KEY</code>. This |
| limitation is due to the fact that durations cannot be ordered. It is |
| effectively not possible to know if <code>1mo</code> is greater than <code>29d</code> without |
| a date context.</p> |
| </div> |
| <div class="paragraph"> |
| <p>A <code>1d</code> duration is not equal to a <code>24h</code> one as the duration type has |
| been created to be able to support daylight saving.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="collections"><a class="anchor" href="#collections"></a><a class="link" href="#collections">Collections</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>CQL supports three kinds of collections: <code>maps</code>, <code>sets</code> and <code>lists</code>. The |
| types of those collections is defined by:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">collection_type::= MAP '<' cql_type',' cql_type'>' |
| | SET '<' cql_type '>' |
| | LIST '<' cql_type'>'</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>and their values can be inputd using collection literals:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">collection_literal::= map_literal | set_literal | list_literal |
| map_literal::= '\{' [ term ':' term (',' term : term)* ] '}' |
| set_literal::= '\{' [ term (',' term)* ] '}' |
| list_literal::= '[' [ term (',' term)* ] ']'</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note however that neither <code>bind_marker</code> nor <code>NULL</code> are supported inside |
| collection literals.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="noteworthy-characteristics"><a class="anchor" href="#noteworthy-characteristics"></a><a class="link" href="#noteworthy-characteristics">Noteworthy characteristics</a></h3> |
| <div class="paragraph"> |
| <p>Collections are meant for storing/denormalizing relatively small amount |
| of data. They work well for things like “the phone numbers of a given |
| user”, “labels applied to an email”, etc. But when items are expected to |
| grow unbounded (“all messages sent by a user”, “events registered by a |
| sensor”…​), then collections are not appropriate and a specific table |
| (with clustering columns) should be used. Concretely, (non-frozen) |
| collections have the following noteworthy characteristics and |
| limitations:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Individual collections are not indexed internally. Which means that |
| even to access a single element of a collection, the while collection |
| has to be read (and reading one is not paged internally).</p> |
| </li> |
| <li> |
| <p>While insertion operations on sets and maps never incur a |
| read-before-write internally, some operations on lists do. Further, some |
| lists operations are not idempotent by nature (see the section on |
| <a href="#lists">lists</a> below for details), making their retry in case of |
| timeout problematic. It is thus advised to prefer sets over lists when |
| possible.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Please note that while some of those limitations may or may not be |
| removed/improved upon in the future, it is a anti-pattern to use a |
| (single) collection to store large amounts of data.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="maps"><a class="anchor" href="#maps"></a><a class="link" href="#maps">Maps</a></h3> |
| <div class="paragraph"> |
| <p>A <code>map</code> is a (sorted) set of key-value pairs, where keys are unique and |
| the map is sorted by its keys. You can define and insert a map with:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">CREATE TABLE users ( |
| id text PRIMARY KEY, |
| name text, |
| favs map<text, text> // A map of text keys, and text values |
| ); |
| |
| INSERT INTO users (id, name, favs) |
| VALUES ('jsmith', 'John Smith', { 'fruit' : 'Apple', 'band' : 'Beatles' }); |
| |
| // Replace the existing map entirely. |
| UPDATE users SET favs = { 'fruit' : 'Banana' } WHERE id = 'jsmith';</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Further, maps support:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Updating or inserting one or more elements:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE users SET favs['author'] = 'Ed Poe' WHERE id = 'jsmith'; |
| UPDATE users SET favs = favs + { 'movie' : 'Cassablanca', 'band' : 'ZZ Top' } WHERE id = 'jsmith';</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Removing one or more element (if an element doesn’t exist, removing it |
| is a no-op but no error is thrown):</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">DELETE favs['author'] FROM users WHERE id = 'jsmith'; |
| UPDATE users SET favs = favs - { 'movie', 'band'} WHERE id = 'jsmith';</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that for removing multiple elements in a <code>map</code>, you remove from it |
| a <code>set</code> of keys.</p> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Lastly, TTLs are allowed for both <code>INSERT</code> and <code>UPDATE</code>, but in both |
| case the TTL set only apply to the newly inserted/updated elements. In |
| other words:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE users USING TTL 10 SET favs['color'] = 'green' WHERE id = 'jsmith';</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>will only apply the TTL to the <code>{ 'color' : 'green' }</code> record, the rest |
| of the map remaining unaffected.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="sets"><a class="anchor" href="#sets"></a><a class="link" href="#sets">Sets</a></h3> |
| <div class="paragraph"> |
| <p>A <code>set</code> is a (sorted) collection of unique values. You can define and |
| insert a map with:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">CREATE TABLE images ( |
| name text PRIMARY KEY, |
| owner text, |
| tags set<text> // A set of text values |
| ); |
| |
| INSERT INTO images (name, owner, tags) |
| VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' }); |
| |
| // Replace the existing set entirely |
| UPDATE images SET tags = { 'kitten', 'cat', 'lol' } WHERE name = 'cat.jpg';</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Further, sets support:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Adding one or multiple elements (as this is a set, inserting an |
| already existing element is a no-op):</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE images SET tags = tags + { 'gray', 'cuddly' } WHERE name = 'cat.jpg';</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Removing one or multiple elements (if an element doesn’t exist, |
| removing it is a no-op but no error is thrown):</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE images SET tags = tags - { 'cat' } WHERE name = 'cat.jpg';</code></pre> |
| </div> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Lastly, for <a href="#sets">sets</a>, TTLs are only applied to newly inserted values.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="lists"><a class="anchor" href="#lists"></a><a class="link" href="#lists">Lists</a></h3> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| <div class="title">Note</div> |
| <div class="paragraph"> |
| <p>As mentioned above and further discussed at the end of this section, |
| lists have limitations and specific performance considerations that you |
| should take into account before using them. In general, if you can use a |
| <a href="#sets">set</a> instead of list, always prefer a set.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>A <code>list</code> is a (sorted) collection of non-unique values where |
| elements are ordered by there position in the list. You can define and |
| insert a list with:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">CREATE TABLE plays ( |
| id text PRIMARY KEY, |
| game text, |
| players int, |
| scores list<int> // A list of integers |
| ) |
| |
| INSERT INTO plays (id, game, players, scores) |
| VALUES ('123-afde', 'quake', 3, [17, 4, 2]); |
| |
| // Replace the existing list entirely |
| UPDATE plays SET scores = [ 3, 9, 4] WHERE id = '123-afde';</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Further, lists support:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Appending and prepending values to a list:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE plays SET players = 5, scores = scores + [ 14, 21 ] WHERE id = '123-afde'; |
| UPDATE plays SET players = 6, scores = [ 3 ] + scores WHERE id = '123-afde';</code></pre> |
| </div> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div class="admonitionblock warning"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-warning" title="Warning"></i> |
| </td> |
| <td class="content"> |
| <div class="title">Warning</div> |
| <div class="paragraph"> |
| <p>The append and prepend operations are not idempotent by nature. So in |
| particular, if one of these operation timeout, then retrying the |
| operation is not safe and it may (or may not) lead to |
| appending/prepending the value twice.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Setting the value at a particular position in a list that has a pre-existing element for that position. An error |
| will be thrown if the list does not have the position.:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE plays SET scores[1] = 7 WHERE id = '123-afde';</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Removing an element by its position in the list that has a pre-existing element for that position. An error |
| will be thrown if the list does not have the position. Further, as the operation removes an |
| element from the list, the list size will decrease by one element, shifting |
| the position of all the following elements one forward:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">DELETE scores[1] FROM plays WHERE id = '123-afde';</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Deleting <em>all</em> the occurrences of particular values in the list (if a |
| particular element doesn’t occur at all in the list, it is simply |
| ignored and no error is thrown):</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">UPDATE plays SET scores = scores - [ 12, 21 ] WHERE id = '123-afde';</code></pre> |
| </div> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div class="admonitionblock warning"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-warning" title="Warning"></i> |
| </td> |
| <td class="content"> |
| <div class="title">Warning</div> |
| <div class="paragraph"> |
| <p>Setting and removing an element by position and removing occurences of |
| particular values incur an internal <em>read-before-write</em>. These operations will |
| run slowly and use more resources than usual updates (with the |
| exclusion of conditional write that have their own cost).</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Lastly, for <a href="#lists">lists</a>, TTLs only apply to newly inserted values.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="udts"><a class="anchor" href="#udts"></a><a class="link" href="#udts">User-Defined Types (UDTs)</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>CQL support the definition of user-defined types (UDTs). Such a |
| type can be created, modified and removed using the |
| <code>create_type_statement</code>, <code>alter_type_statement</code> and |
| <code>drop_type_statement</code> described below. But once created, a UDT is simply |
| referred to by its name:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">user_defined_type::= udt_name |
| udt_name::= [ keyspace_name '.' ] identifier</code></pre> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="creating-a-udt"><a class="anchor" href="#creating-a-udt"></a><a class="link" href="#creating-a-udt">Creating a UDT</a></h3> |
| <div class="paragraph"> |
| <p>Creating a new user-defined type is done using a <code>CREATE TYPE</code> statement |
| defined by:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">create_type_statement::= CREATE TYPE [ IF NOT EXISTS ] udt_name |
| '(' field_definition ( ',' field_definition)* ')' |
| field_definition::= identifier cql_type</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>A UDT has a name (used to declared columns of that type) and is a set of |
| named and typed fields. Fields name can be any type, including |
| collections or other UDT. For instance:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">CREATE TYPE phone ( |
| country_code int, |
| number text, |
| ); |
| |
| CREATE TYPE address ( |
| street text, |
| city text, |
| zip text, |
| phones map<text, phone> |
| ); |
| |
| CREATE TABLE user ( |
| name text PRIMARY KEY, |
| addresses map<text, frozen<address>> |
| );</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Things to keep in mind about UDTs:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Attempting to create an already existing type will result in an error |
| unless the <code>IF NOT EXISTS</code> option is used. If it is used, the statement |
| will be a no-op if the type already exists.</p> |
| </li> |
| <li> |
| <p>A type is intrinsically bound to the keyspace in which it is created, |
| and can only be used in that keyspace. At creation, if the type name is |
| prefixed by a keyspace name, it is created in that keyspace. Otherwise, |
| it is created in the current keyspace.</p> |
| </li> |
| <li> |
| <p>As of Cassandra , UDT have to be frozen in most cases, hence the |
| <code>frozen<address></code> in the table definition above. Please see the section |
| on <a href="#frozen">frozen</a> for more details.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="udt-literals"><a class="anchor" href="#udt-literals"></a><a class="link" href="#udt-literals">UDT literals</a></h3> |
| <div class="paragraph"> |
| <p>Once a used-defined type has been created, value can be input using a |
| UDT literal:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">udt_literal::= '{' identifier ':' term ( ',' identifier ':' term)* '}'</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>In other words, a UDT literal is like a <a href="#maps">map</a>` literal but its |
| keys are the names of the fields of the type. For instance, one could |
| insert into the table define in the previous section using:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">INSERT INTO user (name, addresses) |
| VALUES ('z3 Pr3z1den7', { |
| 'home' : { |
| street: '1600 Pennsylvania Ave NW', |
| city: 'Washington', |
| zip: '20500', |
| phones: { 'cell' : { country_code: 1, number: '202 456-1111' }, |
| 'landline' : { country_code: 1, number: '...' } } |
| }, |
| 'work' : { |
| street: '1600 Pennsylvania Ave NW', |
| city: 'Washington', |
| zip: '20500', |
| phones: { 'fax' : { country_code: 1, number: '...' } } |
| } |
| } |
| );</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>To be valid, a UDT literal can only include fields defined by the |
| type it is a literal of, but it can omit some fields (these will be set to <code>NULL</code>).</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="altering-a-udt"><a class="anchor" href="#altering-a-udt"></a><a class="link" href="#altering-a-udt">Altering a UDT</a></h3> |
| <div class="paragraph"> |
| <p>An existing user-defined type can be modified using an <code>ALTER TYPE</code> |
| statement:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">alter_type_statement::= ALTER TYPE udt_name alter_type_modification |
| alter_type_modification::= ADD field_definition |
| | RENAME identifier TO identifier( identifier TO identifier )*</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>You can:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Add a new field to the type (<code>ALTER TYPE address ADD country text</code>). |
| That new field will be <code>NULL</code> for any values of the type created before |
| the addition.</p> |
| </li> |
| <li> |
| <p>Rename the fields of the type.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">ALTER TYPE address RENAME zip TO zipcode;</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="dropping-a-udt"><a class="anchor" href="#dropping-a-udt"></a><a class="link" href="#dropping-a-udt">Dropping a UDT</a></h3> |
| <div class="paragraph"> |
| <p>You can drop an existing user-defined type using a <code>DROP TYPE</code> |
| statement:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">drop_type_statement::= DROP TYPE [ IF EXISTS ] udt_name</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Dropping a type results in the immediate, irreversible removal of that |
| type. However, attempting to drop a type that is still in use by another |
| type, table or function will result in an error.</p> |
| </div> |
| <div class="paragraph"> |
| <p>If the type dropped does not exist, an error will be returned unless |
| <code>IF EXISTS</code> is used, in which case the operation is a no-op.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="tuples"><a class="anchor" href="#tuples"></a><a class="link" href="#tuples">Tuples</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>CQL also support tuples and tuple types (where the elements can be of |
| different types). Functionally, tuples can be though as anonymous UDT |
| with anonymous fields. Tuple types and tuple literals are defined by:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">tuple_type::= TUPLE '<' cql_type( ',' cql_type)* '>' |
| tuple_literal::= '(' term( ',' term )* ')'</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>and can be created:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-cql hljs" data-lang="cql">CREATE TABLE durations ( |
| event text, |
| duration tuple<int, text>, |
| ); |
| |
| INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours'));</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Unlike other composed types, like collections and UDTs, a tuple is always |
| <code>frozen <frozen></code> (without the need of the <code>frozen</code> keyword) |
| and it is not possible to update only some elements of a tuple (without |
| updating the whole tuple). Also, a tuple literal should always have the |
| same number of value than declared in the type it is a tuple of (some of |
| those values can be null but they need to be explicitly declared as so).</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="custom-types"><a class="anchor" href="#custom-types"></a><a class="link" href="#custom-types">Custom Types</a></h2> |
| <div class="sectionbody"> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| <div class="title">Note</div> |
| <div class="paragraph"> |
| <p>Custom types exists mostly for backward compatibility purposes and their |
| usage is discouraged. Their usage is complex, not user friendly and the |
| other provided types, particularly <a href="#udts">user-defined types</a>, should |
| almost always be enough.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>A custom type is defined by:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-bnf hljs" data-lang="bnf">custom_type::= string</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>A custom type is a <code>string</code> that contains the name of Java class that |
| extends the server side <code>AbstractType</code> class and that can be loaded by |
| Cassandra (it should thus be in the <code>CLASSPATH</code> of every node running |
| Cassandra). That class will define what values are valid for the type |
| and how the time sorts when used for a clustering column. For any other |
| purpose, a value of a custom type is the same than that of a <code>blob</code>, and |
| can in particular be input using the <code>blob</code> literal syntax.</p> |
| </div> |
| </div> |
| </div> |
| </article> |
| </main> |
| </div> |
| </div> |
| <footer class="grad grad--two flex-center pb-xlarge"> |
| <div class="inner text-center z2 relative"> |
| <h2 class="white py-small">Get started with Cassandra, fast.</h2> |
| <a id="footer-cta" href="/_/quickstart.html" class="btn btn--filled ma-medium">Quickstart Guide</a> |
| </div> |
| <div class="inner flex flex-distribute-items mt-xlarge z2 relative"> |
| <div class="col-2"> |
| <div id="footer-logo" class="logo logo--footer mb-medium"><img src="../../../../assets/img/logo-white-r.png" alt="Cassandra Logo"></div> |
| <p>Apache Cassandra<img src="../../../../assets/img/registered.svg" alt="®" style="width:18px;"> powers mission-critical deployments with improved performance and unparalleled levels of scale in the cloud.</p> |
| <div class="footer-social-icons"> |
| <a href="https://twitter.com/cassandra?lang=en" target="_blank"><img src="../../../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a> |
| <a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank"><img src="../../../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a> |
| <a href="https://www.youtube.com/c/PlanetCassandra" target="_blank"><img src="../../../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a> |
| </div> |
| </div> |
| <div class="col-2 flex flex-center"> |
| <ul class="columns-2"> |
| <li class="mb-small"><a href="/">Home</a></li> |
| <li class="mb-small"><a href="/_/cassandra-basics.html">Cassandra Basics</a></li> |
| <li class="mb-small"><a href="/_/quickstart.html">Quickstart</a></li> |
| <li class="mb-small"><a href="/_/ecosystem.html">Ecosystem</a></li> |
| <li class="mb-small"><a href="/doc/latest/">Documentation</a></li> |
| <li class="mb-small"><a href="/_/community.html">Community</a></li> |
| <li class="mb-small"><a href="/_/case-studies.html">Case Studies</a></li> |
| <li class="mb-small"><a href="/_/resources.html">Resources</a></li> |
| <li class="mb-small"><a href="/_/blog.html">Blog</a></li> |
| </ul> |
| </div> |
| </div> |
| </footer> |
| <div class="lower-footer bg-white pa-medium"> |
| <div class="flex flex-row flex-vert-center"> |
| <div class="pr-medium"><img src="../../../../assets/img//feather-small.png" alt="ASF" width="20"></div> |
| <div class="pr-medium"><a href="http://www.apache.org/" target="_blank">Foundation</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/events/current-event.html" target="_blank">Events</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/licenses/" target="_blank">License</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/foundation/thanks" target="_blank">Thanks</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/security" target="_blank">Security</a></div> |
| <div class="pr-medium"><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/foundation/sponsorship" target="_blank">Sponsorship</a></div> |
| </div> |
| <p class="my-medium">© 2009-<script>document.write(new Date().getFullYear())</script> <a href="https://apache.org" target="_blank">The Apache Software Foundation</a> under the terms of the Apache License 2.0. Apache, the Apache feather logo, Apache Cassandra, Cassandra, and the Cassandra logo, are either registered trademarks or trademarks of The Apache Software Foundation.</p> |
| </div> |
| <div id="fade" class="hidden"></div> |
| <div id="modal" class="hidden"> |
| <div id="close-modal" class="cursor-pointer"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></div> |
| <div id="mod-content" class="vid-mod-content resp-container"></div> |
| </div> |
| <script src="../../../../assets/js/site.js"></script> |
| <script async src="../../../../assets/js/vendor/highlight.js"></script> |
| <script src="../../../../assets/js/vendor/lunr.js"></script> |
| <script src="../../../../assets/js/vendor/search.js" id="search-script" data-base-path="../../../.." data-page-path="/Cassandra/3.11/cassandra/cql/types.html"></script> |
| <script async src="../../../../assets/../search-index.js"></script> |
| <script> |
| jQuery(function(){ |
| var windowW = $(window).width(); |
| $(document) |
| .on('click','.mobile-nav-icon',function(){ |
| $('.main-nav').fadeIn(); |
| }) |
| .on('click','.main-nav',function(){ |
| if(windowW <= 1000){ |
| $(this).fadeOut(); |
| } |
| }) |
| .on('click','#version-toggle',function(){ |
| $(this).toggleClass('active'); |
| $(this).next().fadeToggle(); |
| }) |
| .on('click','#mobile-docs-nav-burger', function(){ |
| $(this).toggleClass('active'); |
| $('.docs-nav').toggleClass('active'); |
| }); |
| var url = window.location.pathname; |
| var isQuickstart = url.includes('quickstart.html'); |
| if(isQuickstart){ |
| var footerCTA = document.getElementById('footer-cta'); |
| footerCTA.innerHTML = 'Get latest updates'; |
| footerCTA.setAttribute('href', '/_/blog.html'); |
| } |
| }); |
| </script> |
| </div> |
| </body> |
| </html> |