:py:mod:`airflow.operators.sql`
===============================

.. py:module:: airflow.operators.sql


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.operators.sql.BaseSQLOperator
   airflow.operators.sql.SQLCheckOperator
   airflow.operators.sql.SQLValueCheckOperator
   airflow.operators.sql.SQLIntervalCheckOperator
   airflow.operators.sql.SQLThresholdCheckOperator
   airflow.operators.sql.BranchSQLOperator



Functions
~~~~~~~~~

.. autoapisummary::

   airflow.operators.sql.parse_boolean



.. py:function:: parse_boolean(val)

   Try to parse a string into boolean.

   Raises ValueError if the input is not a valid true- or false-like string value.


.. py:class:: BaseSQLOperator(*, conn_id = None, database = None, hook_params = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   This is a base class for generic SQL Operator to get a DB Hook

   The provided method is .get_db_hook(). The default behavior will try to
   retrieve the DB hook based on connection type.
   You can custom the behavior by overriding the .get_db_hook() method.

   .. py:method:: get_db_hook()

      Get the database hook for the connection.

      :return: the database hook object.
      :rtype: DbApiHook



.. py:class:: SQLCheckOperator(*, sql, conn_id = None, database = None, **kwargs)

   Bases: :py:obj:`BaseSQLOperator`

   Performs checks against a db. The ``SQLCheckOperator`` expects
   a sql query that will return a single row. Each value on that
   first row is evaluated using python ``bool`` casting. If any of the
   values return ``False`` the check is failed and errors out.

   Note that Python bool casting evals the following as ``False``:

   * ``False``
   * ``0``
   * Empty string (``""``)
   * Empty list (``[]``)
   * Empty dictionary or set (``{}``)

   Given a query like ``SELECT COUNT(*) FROM foo``, it will fail only if
   the count ``== 0``. You can craft much more complex query that could,
   for instance, check that the table has the same number of rows as
   the source table upstream, or that the count of today's partition is
   greater than yesterday's partition, or that a set of metrics are less
   than 3 standard deviation for the 7 day average.

   This operator can be used as a data quality check in your pipeline, and
   depending on where you put it in your DAG, you have the choice to
   stop the critical path, preventing from
   publishing dubious data, or on the side and receive email alerts
   without stopping the progress of the DAG.

   :param sql: the sql to be executed. (templated)
   :param conn_id: the connection ID used to connect to the database.
   :param database: name of database which overwrite the defined one in connection

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['sql']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = ['.hql', '.sql']

      

   .. py:attribute:: template_fields_renderers
      

      

   .. py:attribute:: ui_color
      :annotation: = #fff7e6

      

   .. py:method:: execute(context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: SQLValueCheckOperator(*, sql, pass_value, tolerance = None, conn_id = None, database = None, **kwargs)

   Bases: :py:obj:`BaseSQLOperator`

   Performs a simple value check using sql code.

   :param sql: the sql to be executed. (templated)
   :param conn_id: the connection ID used to connect to the database.
   :param database: name of database which overwrite the defined one in connection

   .. py:attribute:: __mapper_args__
      

      

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['sql', 'pass_value']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = ['.hql', '.sql']

      

   .. py:attribute:: template_fields_renderers
      

      

   .. py:attribute:: ui_color
      :annotation: = #fff7e6

      

   .. py:method:: execute(context=None)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: SQLIntervalCheckOperator(*, table, metrics_thresholds, date_filter_column = 'ds', days_back = -7, ratio_formula = 'max_over_min', ignore_zero = True, conn_id = None, database = None, **kwargs)

   Bases: :py:obj:`BaseSQLOperator`

   Checks that the values of metrics given as SQL expressions are within
   a certain tolerance of the ones from days_back before.

   :param table: the table name
   :param conn_id: the connection ID used to connect to the database.
   :param database: name of database which will overwrite the defined one in connection
   :param days_back: number of days between ds and the ds we want to check
       against. Defaults to 7 days
   :param date_filter_column: The column name for the dates to filter on. Defaults to 'ds'
   :param ratio_formula: which formula to use to compute the ratio between
       the two metrics. Assuming cur is the metric of today and ref is
       the metric to today - days_back.

       max_over_min: computes max(cur, ref) / min(cur, ref)
       relative_diff: computes abs(cur-ref) / ref

       Default: 'max_over_min'
   :param ignore_zero: whether we should ignore zero metrics
   :param metrics_thresholds: a dictionary of ratios indexed by metrics

   .. py:attribute:: __mapper_args__
      

      

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['sql1', 'sql2']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = ['.hql', '.sql']

      

   .. py:attribute:: template_fields_renderers
      

      

   .. py:attribute:: ui_color
      :annotation: = #fff7e6

      

   .. py:attribute:: ratio_formulas
      

      

   .. py:method:: execute(context=None)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: SQLThresholdCheckOperator(*, sql, min_threshold, max_threshold, conn_id = None, database = None, **kwargs)

   Bases: :py:obj:`BaseSQLOperator`

   Performs a value check using sql code against a minimum threshold
   and a maximum threshold. Thresholds can be in the form of a numeric
   value OR a sql statement that results a numeric.

   :param sql: the sql to be executed. (templated)
   :param conn_id: the connection ID used to connect to the database.
   :param database: name of database which overwrite the defined one in connection
   :param min_threshold: numerical value or min threshold sql to be executed (templated)
   :param max_threshold: numerical value or max threshold sql to be executed (templated)

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['sql', 'min_threshold', 'max_threshold']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = ['.hql', '.sql']

      

   .. py:attribute:: template_fields_renderers
      

      

   .. py:method:: execute(context=None)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.


   .. py:method:: push(meta_data)

      Optional: Send data check info and metadata to an external database.
      Default functionality will log metadata.



.. py:class:: BranchSQLOperator(*, sql, follow_task_ids_if_true, follow_task_ids_if_false, conn_id = 'default_conn_id', database = None, parameters = None, **kwargs)

   Bases: :py:obj:`BaseSQLOperator`, :py:obj:`airflow.models.SkipMixin`

   Allows a DAG to "branch" or follow a specified path based on the results of a SQL query.

   :param sql: The SQL code to be executed, should return true or false (templated)
      Template reference are recognized by str ending in '.sql'.
      Expected SQL query to return Boolean (True/False), integer (0 = False, Otherwise = 1)
      or string (true/y/yes/1/on/false/n/no/0/off).
   :param follow_task_ids_if_true: task id or task ids to follow if query returns true
   :param follow_task_ids_if_false: task id or task ids to follow if query returns false
   :param conn_id: the connection ID used to connect to the database.
   :param database: name of database which overwrite the defined one in connection
   :param parameters: (optional) the parameters to render the SQL query with.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['sql']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = ['.sql']

      

   .. py:attribute:: template_fields_renderers
      

      

   .. py:attribute:: ui_color
      :annotation: = #a22034

      

   .. py:attribute:: ui_fgcolor
      :annotation: = #F7F7F7

      

   .. py:method:: execute(context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



