 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

=================
Amazon QuickSight
=================

`Amazon QuickSight <https://aws.amazon.com/quicksight/>`__ is a fast business analytics service to build visualizations,
perform ad hoc analysis, and quickly get business insights from your data.
Amazon QuickSight seamlessly discovers AWS data sources, enables organizations to scale to hundreds of thousands of
users, and delivers fast and responsive query performance by using the Amazon QuickSight Super-fast,
Parallel, In-Memory, Calculation Engine (SPICE).

Prerequisite Tasks
------------------

.. include:: _partials/prerequisite_tasks.rst

Operators
---------

.. _howto/operator:QuickSightCreateIngestionOperator:

Amazon QuickSight create ingestion
==================================

The ``QuickSightCreateIngestionOperator`` creates and starts a new SPICE ingestion for a dataset.
The operator also refreshes existing SPICE datasets.

.. exampleinclude:: /../../airflow/providers/amazon/aws/example_dags/example_quicksight.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_quicksight_create_ingestion]
    :end-before: [END howto_operator_quicksight_create_ingestion]

Sensors
-------

.. _howto/sensor:QuickSightSensor:

Amazon QuickSight ingestion sensor
==================================

The ``QuickSightSensor`` waits for an Amazon QuickSight create ingestion until it reaches a terminal state.

.. exampleinclude:: /../../airflow/providers/amazon/aws/example_dags/example_quicksight.py
    :language: python
    :dedent: 4
    :start-after: [START howto_sensor_quicksight]
    :end-before: [END howto_sensor_quicksight]

Reference
---------

* `Boto3 Library Documentation for QuickSight <https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/quicksight.html>`__
