diff --git a/providers/apache/impala/pyproject.toml b/providers/apache/impala/pyproject.toml index 602b1b494b7ba..27ccc391aca33 100644 --- a/providers/apache/impala/pyproject.toml +++ b/providers/apache/impala/pyproject.toml @@ -69,6 +69,9 @@ dependencies = [ "kerberos" = [ "kerberos>=1.3.0", ] +"sqlalchemy" = [ + "sqlalchemy>=1.4.49", +] [dependency-groups] dev = [ @@ -77,8 +80,9 @@ dev = [ "apache-airflow-devel-common", "apache-airflow-providers-common-sql", # Additional devel dependencies (do not remove this line and add extra development dependencies) - "kerberos>=1.3.0", - "apache-airflow-providers-common-sql[pandas,polars]" + "apache-airflow-providers-apache-impala[kerberos]", + "apache-airflow-providers-common-sql[pandas,polars]", + "apache-airflow-providers-apache-impala[sqlalchemy]", ] # To build docs: diff --git a/providers/apache/impala/src/airflow/providers/apache/impala/hooks/impala.py b/providers/apache/impala/src/airflow/providers/apache/impala/hooks/impala.py index fc63a9b97cf5c..39b902ccbc8e0 100644 --- a/providers/apache/impala/src/airflow/providers/apache/impala/hooks/impala.py +++ b/providers/apache/impala/src/airflow/providers/apache/impala/hooks/impala.py @@ -19,12 +19,13 @@ from typing import TYPE_CHECKING from impala.dbapi import connect -from sqlalchemy.engine import URL +from airflow.exceptions import AirflowOptionalProviderFeatureException from airflow.providers.common.sql.hooks.sql import DbApiHook if TYPE_CHECKING: from impala.interface import Connection + from sqlalchemy.engine import URL class ImpalaHook(DbApiHook): @@ -50,6 +51,14 @@ def get_conn(self) -> Connection: @property def sqlalchemy_url(self) -> URL: """Return a `sqlalchemy.engine.URL` object constructed from the connection.""" + try: + from sqlalchemy.engine import URL + except (ImportError, ModuleNotFoundError) as err: + raise AirflowOptionalProviderFeatureException( + "The 'sqlalchemy' library is required to use this feature. " + "Please install it with: pip install 'apache-airflow-providers-apache-impala[sqlalchemy]'" + ) from err + conn = self.get_connection(self.get_conn_id()) extra = conn.extra_dejson or {}