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

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

.. autoapi-nested-parse::

   This module contains a Google AutoML hook.

   .. spelling::

       PredictResponse



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.automl.CloudAutoMLHook




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

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

   Google Cloud AutoML hook.

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

   .. py:method:: extract_object_id(obj)
      :staticmethod:

      Returns unique id of the object.


   .. py:method:: get_conn()

      Retrieves connection to AutoML.

      :return: Google Cloud AutoML client object.
      :rtype: google.cloud.automl_v1beta1.AutoMlClient


   .. py:method:: prediction_client()

      Creates PredictionServiceClient.

      :return: Google Cloud AutoML PredictionServiceClient client object.
      :rtype: google.cloud.automl_v1beta1.PredictionServiceClient


   .. py:method:: create_model(model, location, project_id = PROVIDE_PROJECT_ID, timeout = None, metadata = (), retry = DEFAULT)

      Creates a model_id. Returns a Model in the `response` field when it
      completes. When you create a model, several model evaluations are
      created for it: a global evaluation, and one evaluation for each
      annotation spec.

      :param model: The model_id to create. If a dict is provided, it must be of the same form
          as the protobuf message `google.cloud.automl_v1beta1.types.Model`
      :param project_id: ID of the Google Cloud project where model will be created if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used  to retry requests. If `None` is specified, requests
          will not be retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete.
          Note that if `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance


   .. py:method:: batch_predict(model_id, input_config, output_config, location, project_id = PROVIDE_PROJECT_ID, params = None, retry = DEFAULT, timeout = None, metadata = ())

      Perform a batch prediction. Unlike the online `Predict`, batch
      prediction result won't be immediately available in the response.
      Instead, a long running operation object is returned.

      :param model_id: Name of the model_id requested to serve the batch prediction.
      :param input_config: Required. The input configuration for batch prediction.
          If a dict is provided, it must be of the same form as the protobuf message
          `google.cloud.automl_v1beta1.types.BatchPredictInputConfig`
      :param output_config: Required. The Configuration specifying where output predictions should be
          written. If a dict is provided, it must be of the same form as the protobuf message
          `google.cloud.automl_v1beta1.types.BatchPredictOutputConfig`
      :param params: Additional domain-specific parameters for the predictions, any string must be up to
          25000 characters long.
      :param project_id: ID of the Google Cloud project where model is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance


   .. py:method:: predict(model_id, payload, location, project_id = PROVIDE_PROJECT_ID, params = None, retry = DEFAULT, timeout = None, metadata = ())

      Perform an online prediction. The prediction result will be directly
      returned in the response.

      :param model_id: Name of the model_id requested to serve the prediction.
      :param payload: Required. Payload to perform a prediction on. The payload must match the problem type
          that the model_id was trained to solve. If a dict is provided, it must be of
          the same form as the protobuf message `google.cloud.automl_v1beta1.types.ExamplePayload`
      :param params: Additional domain-specific parameters, any string must be up to 25000 characters long.
      :param project_id: ID of the Google Cloud project where model is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types.PredictResponse` instance


   .. py:method:: create_dataset(dataset, location, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Creates a dataset.

      :param dataset: The dataset to create. If a dict is provided, it must be of the
          same form as the protobuf message Dataset.
      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types.Dataset` instance.


   .. py:method:: import_data(dataset_id, location, input_config, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Imports data into a dataset. For Tables this method can only be called on an empty Dataset.

      :param dataset_id: Name of the AutoML dataset.
      :param input_config: The desired input location and its domain specific semantics, if any.
          If a dict is provided, it must be of the same form as the protobuf message InputConfig.
      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance


   .. py:method:: list_column_specs(dataset_id, table_spec_id, location, project_id = PROVIDE_PROJECT_ID, field_mask = None, filter_ = None, page_size = None, retry = DEFAULT, timeout = None, metadata = ())

      Lists column specs in a table spec.

      :param dataset_id: Name of the AutoML dataset.
      :param table_spec_id: table_spec_id for path builder.
      :param field_mask: Mask specifying which fields to read. If a dict is provided, it must be of the same
          form as the protobuf message `google.cloud.automl_v1beta1.types.FieldMask`
      :param filter_: Filter expression, see go/filtering.
      :param page_size: The maximum number of resources contained in the
          underlying API response. If page streaming is performed per
          resource, this parameter does not affect the return value. If page
          streaming is performed per-page, this determines the maximum number
          of resources in a page.
      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types.ColumnSpec` instance.


   .. py:method:: get_model(model_id, location, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Gets a AutoML model.

      :param model_id: Name of the model.
      :param project_id: ID of the Google Cloud project where model is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types.Model` instance.


   .. py:method:: delete_model(model_id, location, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a AutoML model.

      :param model_id: Name of the model.
      :param project_id: ID of the Google Cloud project where model is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance.


   .. py:method:: update_dataset(dataset, update_mask = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates a dataset.

      :param dataset: The dataset which replaces the resource on the server.
          If a dict is provided, it must be of the same form as the protobuf message Dataset.
      :param update_mask: The update mask applies to the resource.  If a dict is provided, it must
          be of the same form as the protobuf message FieldMask.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types.Dataset` instance..


   .. py:method:: deploy_model(model_id, location, project_id = PROVIDE_PROJECT_ID, image_detection_metadata = None, retry = DEFAULT, timeout = None, metadata = ())

      Deploys a model. If a model is already deployed, deploying it with the same parameters
      has no effect. Deploying with different parameters (as e.g. changing node_number) will
      reset the deployment state without pausing the model_id's availability.

      Only applicable for Text Classification, Image Object Detection and Tables; all other
      domains manage deployment automatically.

      :param model_id: Name of the model requested to serve the prediction.
      :param image_detection_metadata: Model deployment metadata specific to Image Object Detection.
          If a dict is provided, it must be of the same form as the protobuf message
          ImageObjectDetectionModelDeploymentMetadata
      :param project_id: ID of the Google Cloud project where model will be created if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance.


   .. py:method:: list_table_specs(dataset_id, location, project_id = None, filter_ = None, page_size = None, retry = DEFAULT, timeout = None, metadata = ())

      Lists table specs in a dataset_id.

      :param dataset_id: Name of the dataset.
      :param filter_: Filter expression, see go/filtering.
      :param page_size: The maximum number of resources contained in the
          underlying API response. If page streaming is performed per
          resource, this parameter does not affect the return value. If page
          streaming is performed per-page, this determines the maximum number
          of resources in a page.
      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: A `google.gax.PageIterator` instance. By default, this
          is an iterable of `google.cloud.automl_v1beta1.types.TableSpec` instances.
          This object can also be configured to iterate over the pages
          of the response through the `options` parameter.


   .. py:method:: list_datasets(location, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Lists datasets in a project.

      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: A `google.gax.PageIterator` instance. By default, this
          is an iterable of `google.cloud.automl_v1beta1.types.Dataset` instances.
          This object can also be configured to iterate over the pages
          of the response through the `options` parameter.


   .. py:method:: delete_dataset(dataset_id, location, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a dataset and all of its contents.

      :param dataset_id: ID of dataset to be deleted.
      :param project_id: ID of the Google Cloud project where dataset is located if None then
          default project_id is used.
      :param location: The location of the project.
      :param retry: A retry object used to retry requests. If `None` is specified, requests will not be
          retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.

      :return: `google.cloud.automl_v1beta1.types._OperationFuture` instance



