:py:mod:`airflow.providers.google.cloud.hooks.bigtable`
=======================================================

.. py:module:: airflow.providers.google.cloud.hooks.bigtable

.. autoapi-nested-parse::

   This module contains a Google Cloud Bigtable Hook.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.bigtable.BigtableHook




.. py:class:: BigtableHook(gcp_conn_id = 'google_cloud_default', delegate_to = None, impersonation_chain = None)

   Bases: :py:obj:`airflow.providers.google.common.hooks.base_google.GoogleBaseHook`

   Hook for Google Cloud Bigtable APIs.

   All the methods in the hook where project_id is used must be called with
   keyword arguments rather than positional.

   .. py:method:: get_instance(instance_id, project_id)

      Retrieves and returns the specified Cloud Bigtable instance if it exists.
      Otherwise, returns None.

      :param instance_id: The ID of the Cloud Bigtable instance.
      :param project_id: Optional, Google Cloud  project ID where the
          BigTable exists. If set to None or missing,
          the default project_id from the Google Cloud connection is used.


   .. py:method:: delete_instance(instance_id, project_id)

      Deletes the specified Cloud Bigtable instance.
      Raises google.api_core.exceptions.NotFound if the Cloud Bigtable instance does
      not exist.

      :param project_id: Optional, Google Cloud project ID where the
          BigTable exists. If set to None or missing,
          the default project_id from the Google Cloud connection is used.
      :param instance_id: The ID of the Cloud Bigtable instance.


   .. py:method:: create_instance(instance_id, main_cluster_id, main_cluster_zone, project_id, replica_clusters = None, instance_display_name = None, instance_type = enums.Instance.Type.TYPE_UNSPECIFIED, instance_labels = None, cluster_nodes = None, cluster_storage_type = enums.StorageType.STORAGE_TYPE_UNSPECIFIED, timeout = None)

      Creates new instance.

      :param instance_id: The ID for the new instance.
      :param main_cluster_id: The ID for main cluster for the new instance.
      :param main_cluster_zone: The zone for main cluster.
          See https://cloud.google.com/bigtable/docs/locations for more details.
      :param project_id: Optional, Google Cloud project ID where the
          BigTable exists. If set to None or missing,
          the default project_id from the Google Cloud connection is used.
      :param replica_clusters: (optional) A list of replica clusters for the new
          instance. Each cluster dictionary contains an id and a zone.
          Example: [{"id": "replica-1", "zone": "us-west1-a"}]
      :param instance_type: (optional) The type of the instance.
      :param instance_display_name: (optional) Human-readable name of the instance.
              Defaults to ``instance_id``.
      :param instance_labels: (optional) Dictionary of labels to associate with the
          instance.
      :param cluster_nodes: (optional) Number of nodes for cluster.
      :param cluster_storage_type: (optional) The type of storage.
      :param timeout: (optional) timeout (in seconds) for instance creation.
                      If None is not specified, Operator will wait indefinitely.


   .. py:method:: update_instance(instance_id, project_id, instance_display_name = None, instance_type = None, instance_labels = None, timeout = None)

      Update an existing instance.

      :param instance_id: The ID for the existing instance.
      :param project_id: Optional, Google Cloud project ID where the
          BigTable exists. If set to None or missing,
          the default project_id from the Google Cloud connection is used.
      :param instance_display_name: (optional) Human-readable name of the instance.
      :param instance_type: (optional) The type of the instance.
      :param instance_labels: (optional) Dictionary of labels to associate with the
          instance.
      :param timeout: (optional) timeout (in seconds) for instance update.
          If None is not specified, Operator will wait indefinitely.


   .. py:method:: create_table(instance, table_id, initial_split_keys = None, column_families = None)
      :staticmethod:

      Creates the specified Cloud Bigtable table.
      Raises ``google.api_core.exceptions.AlreadyExists`` if the table exists.

      :param instance: The Cloud Bigtable instance that owns the table.
      :param table_id: The ID of the table to create in Cloud Bigtable.
      :param initial_split_keys: (Optional) A list of row keys in bytes to use to
          initially split the table.
      :param column_families: (Optional) A map of columns to create. The key is the
          column_id str, and the value is a
          :class:`google.cloud.bigtable.column_family.GarbageCollectionRule`.


   .. py:method:: delete_table(instance_id, table_id, project_id)

      Deletes the specified table in Cloud Bigtable.
      Raises google.api_core.exceptions.NotFound if the table does not exist.

      :param instance_id: The ID of the Cloud Bigtable instance.
      :param table_id: The ID of the table in Cloud Bigtable.
      :param project_id: Optional, Google Cloud project ID where the
          BigTable exists. If set to None or missing,
          the default project_id from the Google Cloud connection is used.


   .. py:method:: update_cluster(instance, cluster_id, nodes)
      :staticmethod:

      Updates number of nodes in the specified Cloud Bigtable cluster.
      Raises google.api_core.exceptions.NotFound if the cluster does not exist.

      :param instance: The Cloud Bigtable instance that owns the cluster.
      :param cluster_id: The ID of the cluster.
      :param nodes: The desired number of nodes.


   .. py:method:: get_column_families_for_table(instance, table_id)
      :staticmethod:

      Fetches Column Families for the specified table in Cloud Bigtable.

      :param instance: The Cloud Bigtable instance that owns the table.
      :param table_id: The ID of the table in Cloud Bigtable to fetch Column Families
          from.


   .. py:method:: get_cluster_states_for_table(instance, table_id)
      :staticmethod:

      Fetches Cluster States for the specified table in Cloud Bigtable.
      Raises google.api_core.exceptions.NotFound if the table does not exist.

      :param instance: The Cloud Bigtable instance that owns the table.
      :param table_id: The ID of the table in Cloud Bigtable to fetch Cluster States
          from.



