Skip to content
Merged
14 changes: 14 additions & 0 deletions providers/exasol/docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@
Changelog <changelog>
Security <security>

.. toctree::
:hidden:
:maxdepth: 1
:caption: Guides

Operators <operators>

.. toctree::
:hidden:
:maxdepth: 1
Expand All @@ -44,6 +51,13 @@
PyPI Repository <https://pypi.org/project/apache-airflow-providers-exasol/>
Installing from sources <installing-providers-from-sources>

.. toctree::
:hidden:
:maxdepth: 1
:caption: System tests

System Tests <_api/tests/system/exasol/index>

.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME!


Expand Down
79 changes: 79 additions & 0 deletions providers/exasol/docs/operators.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
.. 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.



.. _howto/operator:ExasolOperator:

SQLExecuteQueryOperator to connect to Exasol
====================================================

Use the :class:`SQLExecuteQueryOperator<airflow.providers.common.sql.operators.sql>` to execute
SQL commands in an `Exasol <https://www.exasol.com/>`__ database.

.. note::
Previously, an ``ExasolOperator`` was used to perform this kind of operation.
After deprecation this has been removed. Please use ``SQLExecuteQueryOperator`` instead.

.. note::
Make sure you have installed the ``apache-airflow-providers-exasol`` package
and its dependency ``pyexasol`` to enable Exasol support.

Using the Operator
^^^^^^^^^^^^^^^^^^

Use the ``conn_id`` argument to connect to your Exasol instance where
the connection metadata is structured as follows:

.. list-table:: Exasol Airflow Connection Metadata
:widths: 25 25
:header-rows: 1

* - Parameter
- Input
* - Host: string
- Exasol hostname, container alias or IP address
* - Schema: string
- Default schema name (e.g. ``TEST``) (optional)
* - Login: string
- Exasol username (e.g. ``TEST`` or ``sys``)
* - Password: string
- Exasol password
* - Port: int
- Exasol port (default: 8563)
* - Extra: JSON
- Additional connection configuration passed to *pyexasol*, such as:
``{"encryption": false}`` or
``{"encryption": true, "websocket_sslopt": {"cert_reqs": 0}}``

An example usage of the SQLExecuteQueryOperator to connect to Exasol is as follows:

.. exampleinclude:: /../../exasol/tests/system/exasol/example_exasol.py
:language: python
:start-after: [START howto_operator_exasol]
:end-before: [END howto_operator_exasol]

Reference
^^^^^^^^^
For further information, look at:

* `Exasol Documentation <https://docs.exasol.com/>`__

.. note::

Parameters provided directly via SQLExecuteQueryOperator() take precedence
over those specified in the Airflow connection metadata (such as ``schema``, ``login``, ``password``, etc).
16 changes: 16 additions & 0 deletions providers/exasol/tests/system/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 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.
16 changes: 16 additions & 0 deletions providers/exasol/tests/system/exasol/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 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.
91 changes: 91 additions & 0 deletions providers/exasol/tests/system/exasol/example_exasol.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# 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.
"""
This is an example DAG for the use of the SQLExecuteQueryOperator with Exasol.
"""

from __future__ import annotations

import datetime

from airflow import DAG
from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
from airflow.providers.exasol.hooks.exasol import exasol_fetch_all_handler

DAG_ID = "example_exasol"

with DAG(
dag_id=DAG_ID,
start_date=datetime.datetime(2025, 1, 1),
default_args={"conn_id": "my_exasol_conn", "handler": exasol_fetch_all_handler},
schedule="@once",
catchup=False,
) as dag:
# [START howto_operator_exasol]
create_table_exasol = SQLExecuteQueryOperator(
task_id="create_table_exasol",
sql="""
CREATE OR REPLACE TABLE exasol_example (
a VARCHAR(100),
b DECIMAL(18,0)
);
""",
)

alter_table_exasol = SQLExecuteQueryOperator(
task_id="alter_table_exasol",
sql="ALTER TABLE exasol_example ADD COLUMN c DECIMAL(18,0);",
)

insert_data_exasol = SQLExecuteQueryOperator(
task_id="insert_data_exasol",
sql="""
INSERT INTO exasol_example (a, b, c)
VALUES
('a', 1, 1),
('a', 2, 1),
('b', 3, 1);
""",
)

select_data_exasol = SQLExecuteQueryOperator(
task_id="select_data_exasol",
sql="SELECT * FROM exasol_example;",
)

drop_table_exasol = SQLExecuteQueryOperator(
task_id="drop_table_exasol",
sql="DROP TABLE exasol_example;",
)
# [END howto_operator_exasol]

(
create_table_exasol
>> alter_table_exasol
>> insert_data_exasol
>> select_data_exasol
>> drop_table_exasol
)

from tests_common.test_utils.watcher import watcher

list(dag.tasks) >> watcher()

from tests_common.test_utils.system_tests import get_test_run # noqa: E402

# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
test_run = get_test_run(dag)
4 changes: 2 additions & 2 deletions providers/trino/docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
:maxdepth: 1
:caption: Guides

TrinoTransferOperator types <operators/transfer/gcs_to_trino>
TrinoOperator <operators/index>
TrinoTransferOperator types <gcs_to_trino>
Operators <operators>
Connection types <connections>

.. toctree::
Expand Down
25 changes: 0 additions & 25 deletions providers/trino/docs/operators/index.rst

This file was deleted.