.. 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.

.. default-domain:: cpp
.. highlight:: cpp

User Guide
==========

.. toctree::

   user_guide/catalog
   user_guide/schema
   user_guide/snapshot
   user_guide/manifest
   user_guide/manifest_cache
   user_guide/manifest_entry_cache
   user_guide/parquet_metadata_cache
   user_guide/data_types
   user_guide/primary_key_table
   user_guide/append_only_table
   user_guide/system_tables
   user_guide/write
   user_guide/commit
   user_guide/compaction
   user_guide/read
   user_guide/clean
   user_guide/prefetch
   user_guide/arrow
   user_guide/global_index
