***************************************************************************

 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.

***************************************************************************

Apache MRQL 0.9.2-incubating
============================

Apache 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 three modes:

* in Map-Reduce mode using Apache Hadoop,
* in BSP mode (Bulk Synchronous Parallel mode) using Apache Hama, and
* in Spark mode using Apache Spark.

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.

General Info
============

For the latest information about MRQL, please visit our website at:

   http://mrql.incubator.apache.org/

and our wiki, at:

   http://wiki.apache.org/mrql/

Getting Started
===============

Installation instructions and a quick tutorial:

   http://wiki.apache.org/mrql/GettingStarted

To build MRQL using maven, use 'mvn clean install'. To validate the
installation use 'mvn -DskipTests=false clean install', which runs the
queries in 'tests/queries' in memory, local Hadoop mode, local Hama
mode, and local Spark mode.

Useful mailing lists
====================

1. user@mrql.incubator.apache.org - To discuss and ask usage questions. Send an
   empty email to user-subscribe@mrql.incubator.apache.org in order to subscribe
   to this mailing list.

2. dev@mrql.incubator.apache.org - For discussions about code, design and features.
   Send an empty email to dev-subscribe@mrql.incubator.apache.org in order to
   subscribe to this mailing list.

3. commits@mrql.incubator.apache.org - In order to monitor commits to the source
   repository. Send an empty email to commits-subscribe@mrql.incubator.apache.org
   in order to subscribe to this mailing list.
