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


=======
Catalog
=======

.. currentmodule:: pyspark.sql

.. autosummary::
    :toctree: api/

    Catalog.analyzeTable
    Catalog.cacheTable
    Catalog.clearCache
    Catalog.createDatabase
    Catalog.createExternalTable
    Catalog.createTable
    Catalog.currentCatalog
    Catalog.currentDatabase
    Catalog.databaseExists
    Catalog.dropDatabase
    Catalog.dropGlobalTempView
    Catalog.dropTable
    Catalog.dropTempView
    Catalog.dropView
    Catalog.functionExists
    Catalog.getCreateTableString
    Catalog.getDatabase
    Catalog.getFunction
    Catalog.getTable
    Catalog.getTableProperties
    Catalog.isCached
    Catalog.listCatalogs
    Catalog.listColumns
    Catalog.listDatabases
    Catalog.listFunctions
    Catalog.listPartitions
    Catalog.listTables
    Catalog.listViews
    Catalog.recoverPartitions
    Catalog.refreshByPath
    Catalog.refreshTable
    Catalog.registerFunction
    Catalog.setCurrentCatalog
    Catalog.setCurrentDatabase
    Catalog.tableExists
    Catalog.truncateTable
    Catalog.uncacheTable
