:mod:`airflow.contrib.operators.gcp_bigtable_operator`
======================================================

.. py:module:: airflow.contrib.operators.gcp_bigtable_operator


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

.. py:class:: BigtableValidationMixin

   Bases: :class:`object`

   Common class for Cloud Bigtable operators for validating required fields.

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: :Iterable[str] = []

      

   
   .. method:: _validate_inputs(self)




.. py:class:: BigtableInstanceCreateOperator(instance_id, main_cluster_id, main_cluster_zone, project_id=None, replica_cluster_id=None, replica_cluster_zone=None, instance_display_name=None, instance_type=None, instance_labels=None, cluster_nodes=None, cluster_storage_type=None, timeout=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Creates a new Cloud Bigtable instance.
   If the Cloud Bigtable instance with the given ID exists, the operator does not
   compare its configuration
   and immediately succeeds. No changes are made to the existing instance.

   For more details about instance creation have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/instance.html#google.cloud.bigtable.instance.Instance.create

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableInstanceCreateOperator`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance to create.
   :type main_cluster_id: str
   :param main_cluster_id: The ID for main cluster for the new instance.
   :type main_cluster_zone: str
   :param main_cluster_zone: The zone for main cluster
       See https://cloud.google.com/bigtable/docs/locations for more details.
   :type project_id: str
   :param project_id: Optional, the ID of the GCP project.  If set to None or missing,
           the default project_id from the GCP connection is used.
   :type replica_cluster_id: str
   :param replica_cluster_id: (optional) The ID for replica cluster for the new instance.
   :type replica_cluster_zone: str
   :param replica_cluster_zone: (optional)  The zone for replica cluster.
   :type instance_type: enums.IntEnum
   :param instance_type: (optional) The type of the instance.
   :type instance_display_name: str
   :param instance_display_name: (optional) Human-readable name of the instance. Defaults
       to ``instance_id``.
   :type instance_labels: dict
   :param instance_labels: (optional) Dictionary of labels to associate
       with the instance.
   :type cluster_nodes: int
   :param cluster_nodes: (optional) Number of nodes for cluster.
   :type cluster_storage_type: enums.IntEnum
   :param cluster_storage_type: (optional) The type of storage.
   :type timeout: int
   :param timeout: (optional) timeout (in seconds) for instance creation.
                   If None is not specified, Operator will wait indefinitely.

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id', 'main_cluster_id', 'main_cluster_zone']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id', 'main_cluster_id', 'main_cluster_zone']

      

   
   .. method:: execute(self, context)




.. py:class:: BigtableInstanceDeleteOperator(instance_id, project_id=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Deletes the Cloud Bigtable instance, including its clusters and all related tables.

   For more details about deleting instance have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/instance.html#google.cloud.bigtable.instance.Instance.delete

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableInstanceDeleteOperator`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance to delete.
   :param project_id: Optional, the ID of the GCP project.  If set to None or missing,
           the default project_id from the GCP connection is used.
   :type project_id: str

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id']

      

   
   .. method:: execute(self, context)




.. py:class:: BigtableTableCreateOperator(instance_id, table_id, project_id=None, initial_split_keys=None, column_families=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Creates the table in the Cloud Bigtable instance.

   For more details about creating table have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/table.html#google.cloud.bigtable.table.Table.create

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableTableCreateOperator`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance that will
       hold the new table.
   :type table_id: str
   :param table_id: The ID of the table to be created.
   :type project_id: str
   :param project_id: Optional, the ID of the GCP project. If set to None or missing,
           the default project_id from the GCP connection is used.
   :type initial_split_keys: list
   :param initial_split_keys: (Optional) list of row keys in bytes that will be used to
       initially split the table into several tablets.
   :type column_families: dict
   :param column_families: (Optional) A map columns to create.
                           The key is the column_id str and the value is a
                           :class:`google.cloud.bigtable.column_family.GarbageCollectionRule`

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id', 'table_id']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id', 'table_id']

      

   
   .. method:: _compare_column_families(self)



   
   .. method:: execute(self, context)




.. py:class:: BigtableTableDeleteOperator(instance_id, table_id, project_id=None, app_profile_id=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Deletes the Cloud Bigtable table.

   For more details about deleting table have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/table.html#google.cloud.bigtable.table.Table.delete

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableTableDeleteOperator`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance.
   :type table_id: str
   :param table_id: The ID of the table to be deleted.
   :type project_id: str
   :param project_id: Optional, the ID of the GCP project. If set to None or missing,
           the default project_id from the GCP connection is used.
   :type app_profile_id: str
   :parm app_profile_id: Application profile.

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id', 'table_id']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id', 'table_id']

      

   
   .. method:: execute(self, context)




.. py:class:: BigtableClusterUpdateOperator(instance_id, cluster_id, nodes, project_id=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.models.BaseOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Updates a Cloud Bigtable cluster.

   For more details about updating a Cloud Bigtable cluster,
   have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/cluster.html#google.cloud.bigtable.cluster.Cluster.update

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableClusterUpdateOperator`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance.
   :type cluster_id: str
   :param cluster_id: The ID of the Cloud Bigtable cluster to update.
   :type nodes: int
   :param nodes: The desired number of nodes for the Cloud Bigtable cluster.
   :type project_id: str
   :param project_id: Optional, the ID of the GCP project.

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id', 'cluster_id', 'nodes']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id', 'cluster_id', 'nodes']

      

   
   .. method:: execute(self, context)




.. py:class:: BigtableTableWaitForReplicationSensor(instance_id, table_id, project_id=None, gcp_conn_id='google_cloud_default', *args, **kwargs)

   Bases: :class:`airflow.sensors.base_sensor_operator.BaseSensorOperator`, :class:`airflow.contrib.operators.gcp_bigtable_operator.BigtableValidationMixin`

   Sensor that waits for Cloud Bigtable table to be fully replicated to its clusters.
   No exception will be raised if the instance or the table does not exist.

   For more details about cluster states for a table, have a look at the reference:
   https://googleapis.github.io/google-cloud-python/latest/bigtable/table.html#google.cloud.bigtable.table.Table.get_cluster_states

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:BigtableTableWaitForReplicationSensor`

   :type instance_id: str
   :param instance_id: The ID of the Cloud Bigtable instance.
   :type table_id: str
   :param table_id: The ID of the table to check replication status.
   :type project_id: str
   :param project_id: Optional, the ID of the GCP project.

   .. attribute:: REQUIRED_ATTRIBUTES
      :annotation: = ['instance_id', 'table_id']

      

   .. attribute:: template_fields
      :annotation: = ['project_id', 'instance_id', 'table_id']

      

   
   .. method:: poke(self, context)




