:py:mod:`airflow.providers.amazon.aws.hooks.glue_catalog`
=========================================================

.. py:module:: airflow.providers.amazon.aws.hooks.glue_catalog

.. autoapi-nested-parse::

   This module contains AWS Glue Catalog Hook



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.glue_catalog.GlueCatalogHook
   airflow.providers.amazon.aws.hooks.glue_catalog.AwsGlueCatalogHook




.. py:class:: GlueCatalogHook(*args, **kwargs)

   Bases: :py:obj:`airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   Interact with AWS Glue Catalog

   Additional arguments (such as ``aws_conn_id``) may be specified and
   are passed down to the underlying AwsBaseHook.

   .. seealso::
       :class:`~airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   .. py:method:: get_partitions(self, database_name, table_name, expression = '', page_size = None, max_items = None)

      Retrieves the partition values for a table.

      :param database_name: The name of the catalog database where the partitions reside.
      :param table_name: The name of the partitions' table.
      :param expression: An expression filtering the partitions to be returned.
          Please see official AWS documentation for further information.
          https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-GetPartitions
      :param page_size: pagination size
      :param max_items: maximum items to return
      :return: set of partition values where each value is a tuple since
          a partition may be composed of multiple columns. For example:
          ``{('2018-01-01','1'), ('2018-01-01','2')}``


   .. py:method:: check_for_partition(self, database_name, table_name, expression)

      Checks whether a partition exists

      :param database_name: Name of hive database (schema) @table belongs to
      :param table_name: Name of hive table @partition belongs to
      :expression: Expression that matches the partitions to check for
          (eg `a = 'b' AND c = 'd'`)
      :rtype: bool

      >>> hook = GlueCatalogHook()
      >>> t = 'static_babynames_partitioned'
      >>> hook.check_for_partition('airflow', t, "ds='2015-01-01'")
      True


   .. py:method:: get_table(self, database_name, table_name)

      Get the information of the table

      :param database_name: Name of hive database (schema) @table belongs to
      :param table_name: Name of hive table
      :rtype: dict

      >>> hook = GlueCatalogHook()
      >>> r = hook.get_table('db', 'table_foo')
      >>> r['Name'] = 'table_foo'


   .. py:method:: get_table_location(self, database_name, table_name)

      Get the physical location of the table

      :param database_name: Name of hive database (schema) @table belongs to
      :param table_name: Name of hive table
      :return: str



.. py:class:: AwsGlueCatalogHook(*args, **kwargs)

   Bases: :py:obj:`GlueCatalogHook`

   This hook is deprecated.
   Please use :class:`airflow.providers.amazon.aws.hooks.glue_catalog.GlueCatalogHook`.


