.. Licensed 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 Tajo documentation master file, created by
   sphinx-quickstart on Thu Feb 27 08:29:11 2014.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Apache Tajo™ (dev) - User documentation
===========================================================================

.. warning::
   
  This documentation is based on the development branch (master).
  As a result, some contents can be mismatched to the actual implementation.

Table of Contents:

.. toctree::
   :maxdepth: 3

   introduction
   getting_started
   configuration
   tsql
   sql_language
   time_zone
   functions
   table_management
   table_partitioning
   storage_plugins
   index_overview
   backup_and_restore
   hive_integration
   hbase_integration
   swift_integration
   jdbc_driver
   tajo_client_api
   faq

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

