blob: 6e82480d2a47ebafb6722e7323d2d7713bd6ee30 [file] [log] [blame]
<!--
▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
-->
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="canonical" href="https://ignite.apache.org/features/sql.html" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Distributed ANSI SQL - Apache Ignite</title>
<meta name="description"
content="Apache Ignite comes with a ANSI-99 compliant, horizontally scalable, and fault-tolerant SQL engine that
allows you to interact with Ignite as with a regular SQL database."/>
<!--#include virtual="/includes/styles.html" -->
</head>
<body>
<!--#include virtual="/includes/header.html" -->
<article>
<header>
<div class="container">
<h1>Distributed ANSI SQL <strong>With JOINs</strong></h1>
</div>
</header>
<div class="container">
<p>
Apache Ignite® comes with a ANSI-99 compliant, horizontally scalable, and fault-tolerant SQL engine
that allows you to interact with Ignite as with a regular SQL database using JDBC, ODBC drivers, or
native SQL APIs available for Java, C#, C++, Python, and other programming languages.
</p>
<img class="img-responsive diagram-right" alt="SQL Database diagram" src="/images/svg-diagrams/distributed_sql.svg" alt="Distributed ANSI SQL With JOINs" />
<p>
Ignite supports all DML commands, including SELECT, UPDATE, INSERT, and DELETE queries as well
as a subset of DDL commands relevant for distributed systems.
</p>
<h2>SQL Joins</h2>
<p>
Ignite fully supports distributed joins for advanced querying needs. A distributed join is a SQL statement
with a join clause that combines two or more tables. If the tables are joined on the partitioning column
(affinity or primary key), the join is called a co-located join. Otherwise, if the tables were not
co-located initially, then Ignite does the join in a non-colocated fashion. Co-located joins avoid data
shuffling between nodes and minimize network usage, thus, performing much faster than a non-colocated
counterpart.
</p>
<h2>SQL and In-Memory Mode</h2>
<p>
Apache Ignite can function in a pure in-memory mode when all the data and indexes are located solely in
memory. In this mode, Ignite SQL shows the highest performance since all the data is served from memory
with no usage of the disk tier at all.
</p>
<h2>SQL and Native Persistence</h2>
<p>
In this mode, Ignite persists 100% of data and indexes in the native persistence while caching as much
as possible in memory. Ignite SQL engine does not require to cache an entire data set in memory to
operate correctly. If the engine finds that a record is not cached, then it will read the record from
disk. Your application only executes SQL queries, and Ignite gets the records from both memory and disk
automatically.
</p>
<p>
On cluster restarts, Ignite reads data and indexes from disk, eliminating the need for memory warm-up,
which significantly decreases the time of any potential downtimes.
</p>
<h2>SQL and 3rd Party Databases</h2>
<p>
Ignite can be used as a caching layer for external databases such as RDBMS, NoSQL, or Hadoop. In this mode,
the Ignite SQL engine requires caching all the data needed for SQL queries in memory since the engine
currently does not support federated queries.
</p>
<p>
If federated queries between Ignite and an external database are required, then you can consider Ignite
integration for Spark, where the DataFrames API can join the data stored in Ignite and other systems.
</p>
<div class="jumbotron jumbotron-fluid">
<div class="container">
<div class="display-6 title">Learn More</div>
<hr class="my-4">
<div class="row">
<div class="col-sm-6">
<ul>
<li>
<p><a href="https://apacheignite-sql.readme.io/docs/how-ignite-sql-works" target="docs">Ignite SQL implementation details <i class="fas fa-angle-double-right"></i></a></p>
</li>
<li>
<p><a href="https://apacheignite-sql.readme.io/docs/distributed-joins" target="docs">Distributed JOINs <i class="fas fa-angle-double-right"></i></a></p>
</li>
<li>
<p><a href="https://apacheignite-sql.readme.io/docs/sql-reference-overview" target="docs">SQL Reference <i class="fas fa-angle-double-right"></i></a></p>
</li>
</ul>
</div>
<div class="col-sm-6">
<ul>
<li>
<p><a href="/use-cases/spark-acceleration.html">Apache Ignite and Spark <i class="fas fa-angle-double-right"></i></a></p>
</li>
<li>
<p><a href="/arch/multi-tier-storage.html">Multi-Tier Storage <i class="fas fa-angle-double-right"></i></a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</article>
<!--#include virtual="/includes/footer.html" -->
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>