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

datafusion.SessionContext
=========================

.. currentmodule:: datafusion

.. autoclass:: SessionContext

   
   .. automethod:: __init__

   
   .. rubric:: Methods

   .. autosummary::
   
      ~SessionContext.__init__
      ~SessionContext.catalog
      ~SessionContext.create_dataframe
      ~SessionContext.deregister_table
      ~SessionContext.empty_table
      ~SessionContext.register_csv
      ~SessionContext.register_parquet
      ~SessionContext.register_record_batches
      ~SessionContext.register_table
      ~SessionContext.register_udf
      ~SessionContext.sql
      ~SessionContext.table
      ~SessionContext.tables
   
   

   
   
   