<?xml version="1.0" encoding="iso-8859-1"?>
<!--
 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 KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties></properties>
  <title>A Query Processing and Optimization System</title>
  <body>
    <section name="Apache MRQL"></section>
    <p>MRQL is a query processing and optimization system for large-scale, distributed data analysis, built on top of Apache Hadoop, Hama, Spark, and Flink.
    <br/><br/>
    MRQL (pronounced miracle) is a query processing and optimization system for large-scale, distributed data analysis. MRQL (the MapReduce Query Language) is an SQL-like query language for large-scale data analysis on a cluster of computers. The MRQL query processing system can evaluate MRQL queries in four modes:
</p><ol style="list-style-type: decimal">
<li>in Map-Reduce mode using Apache Hadoop,</li>
<li>in BSP mode (Bulk Synchronous Parallel mode) using Apache Hama,</li>
<li>in Spark mode using Apache Spark, and</li>
<li>in Flink mode using Apache Flink.</li>
</ol>
The MRQL query language is powerful enough to express most common data analysis tasks over many forms of raw in-situ data, such as XML and JSON documents, binary files, and CSV documents. MRQL is more powerful than other current high-level MapReduce languages, such as Hive and PigLatin, since it can operate on more complex data and supports more powerful query constructs, thus eliminating the need for using explicit MapReduce code. With MRQL, users are able to express complex data analysis tasks, such as PageRank, k-means clustering, matrix factorization, etc, using SQL-like queries exclusively, while the MRQL query processing system is able to compile these queries to efficient Java code.
    <section name="Download MRQL"></section>
<p>
The latest stable release MRQL-0.9.6-incubating can be <a href="http://www.apache.org/dyn/closer.cgi/incubator/mrql/">downloaded from the ASF</a>.
You can <a href="https://www.apache.org/info/verification.html">verify</a> the integrity of the downloaded files using the SHA1 or MD5 signatures.
The signatures should be matched against the <a href="https://www.apache.org/dist/incubator/mrql/KEYS">KEYS file</a>.
Older releases may be found in <a href="https://archive.apache.org/dist/incubator/mrql">the archives</a>.
Detailed installation instructions can be found at the <a href="getting_started.html">Getting Started page</a>.
</p>

    <section name="News"></section>
    <p>
      <ul>
        <li>2013-03-13: MRQL project enters Apache Incubation.</li>
        <li>2013-10-31: First release, MRQL-0.9.0-incubating (<a href="ReleaseNotes-0.9.0.html">release notes</a>)</li>
        <li>2014-06-26: Second release, MRQL-0.9.2-incubating (<a href="ReleaseNotes-0.9.2.html">release notes</a>)</li>
        <li>2015-02-25: Third release, MRQL-0.9.4-incubating (<a href="ReleaseNotes-0.9.4.html">release notes</a>)</li>
        <li>2016-03-02: Fourth release, MRQL-0.9.6-incubating (<a href="ReleaseNotes-0.9.6.html">release notes</a>)</li>
      </ul>
    </p>    

    <section name="Disclaimer"></section>
    <p>Apache MRQL is an effort undergoing incubation at The Apache Software Foundation (ASF) sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-62083383-1', 'auto');
  ga('send', 'pageview');

</script>
  </body>
</document>
