<?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="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>
