apache-airflow-providers-databricks 7.3.2__tar.gz → 7.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of apache-airflow-providers-databricks might be problematic. Click here for more details.
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/PKG-INFO +26 -20
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/README.rst +17 -15
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/changelog.rst +26 -0
- apache_airflow_providers_databricks-7.4.0/docs/commits.rst +35 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/index.rst +19 -17
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/provider.yaml +6 -2
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/pyproject.toml +13 -5
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/__init__.py +3 -3
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/hooks/databricks_sql.py +89 -1
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/operators/databricks_sql.py +6 -1
- apache_airflow_providers_databricks-7.4.0/src/airflow/providers/databricks/utils/openlineage.py +336 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/version_compat.py +0 -1
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/test_databricks_sql.py +126 -1
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/test_databricks_sql.py +7 -0
- apache_airflow_providers_databricks-7.4.0/tests/unit/databricks/utils/test_openlineage.py +617 -0
- apache_airflow_providers_databricks-7.3.2/docs/commits.rst +0 -992
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/.latest-doc-only-change.txt +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/conf.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/connections/databricks.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/img/databricks_workflow_task_group_airflow_graph_view.png +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/img/workflow_plugin_launch_task.png +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/img/workflow_plugin_single_task.png +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/img/workflow_run_databricks_graph_view.png +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/integration-logos/Databricks.png +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/copy_into.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/index.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/jobs_create.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/notebook.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/repos_create.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/repos_delete.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/repos_update.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/run_now.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/sql.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/sql_statements.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/submit_run.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/task.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/operators/workflow.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/plugins/index.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/plugins/workflow.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/docs/security.rst +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/LICENSE +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/exceptions.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/get_provider_info.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/hooks/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/hooks/databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/hooks/databricks_base.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/operators/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/operators/databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/operators/databricks_repos.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/operators/databricks_workflow.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/plugins/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/plugins/databricks_workflow.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/sensors/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/sensors/databricks_partition.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/sensors/databricks_sql.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/triggers/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/triggers/databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/utils/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/src/airflow/providers/databricks/utils/databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/conftest.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/example_databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/example_databricks_repos.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/example_databricks_sensors.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/example_databricks_sql.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/system/databricks/example_databricks_workflow.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/test_databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/test_databricks_azure_workload_identity.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/test_databricks_azure_workload_identity_async.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/hooks/test_databricks_base.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/test_databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/test_databricks_copy.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/test_databricks_repos.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/operators/test_databricks_workflow.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/plugins/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/plugins/test_databricks_workflow.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/sensors/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/sensors/test_databricks_partition.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/sensors/test_databricks_sql.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/test_exceptions.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/triggers/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/triggers/test_databricks.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/utils/__init__.py +0 -0
- {apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/tests/unit/databricks/utils/test_databricks.py +0 -0
{apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-databricks
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.4.0
|
|
4
4
|
Summary: Provider package apache-airflow-providers-databricks for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,databricks,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -20,27 +20,31 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
|
-
Requires-Dist: apache-airflow>=2.
|
|
24
|
-
Requires-Dist: apache-airflow-providers-common-
|
|
23
|
+
Requires-Dist: apache-airflow>=2.10.0
|
|
24
|
+
Requires-Dist: apache-airflow-providers-common-compat>=1.6.0
|
|
25
|
+
Requires-Dist: apache-airflow-providers-common-sql>=1.27.0
|
|
25
26
|
Requires-Dist: requests>=2.31.0,<3
|
|
26
27
|
Requires-Dist: databricks-sql-connector>=3.0.0
|
|
28
|
+
Requires-Dist: databricks-sqlalchemy>=1.0.2
|
|
27
29
|
Requires-Dist: aiohttp>=3.9.2, <4
|
|
28
30
|
Requires-Dist: mergedeep>=1.3.4
|
|
29
31
|
Requires-Dist: pandas>=2.1.2,<2.2
|
|
30
32
|
Requires-Dist: pyarrow>=14.0.1
|
|
31
33
|
Requires-Dist: azure-identity>=1.3.1 ; extra == "azure-identity"
|
|
32
34
|
Requires-Dist: apache-airflow-providers-fab ; extra == "fab"
|
|
35
|
+
Requires-Dist: apache-airflow-providers-openlineage>=2.3.0 ; extra == "openlineage"
|
|
33
36
|
Requires-Dist: databricks-sdk==0.10.0 ; extra == "sdk"
|
|
34
37
|
Requires-Dist: apache-airflow-providers-standard ; extra == "standard"
|
|
35
38
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
36
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
37
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
39
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/changelog.html
|
|
40
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0
|
|
38
41
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
39
42
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
40
43
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
41
44
|
Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
42
45
|
Provides-Extra: azure-identity
|
|
43
46
|
Provides-Extra: fab
|
|
47
|
+
Provides-Extra: openlineage
|
|
44
48
|
Provides-Extra: sdk
|
|
45
49
|
Provides-Extra: standard
|
|
46
50
|
|
|
@@ -69,7 +73,7 @@ Provides-Extra: standard
|
|
|
69
73
|
|
|
70
74
|
Package ``apache-airflow-providers-databricks``
|
|
71
75
|
|
|
72
|
-
Release: ``7.
|
|
76
|
+
Release: ``7.4.0``
|
|
73
77
|
|
|
74
78
|
|
|
75
79
|
`Databricks <https://databricks.com/>`__
|
|
@@ -82,7 +86,7 @@ This is a provider package for ``databricks`` provider. All classes for this pro
|
|
|
82
86
|
are in ``airflow.providers.databricks`` python package.
|
|
83
87
|
|
|
84
88
|
You can find package information and changelog for the provider
|
|
85
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
89
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/>`_.
|
|
86
90
|
|
|
87
91
|
Installation
|
|
88
92
|
------------
|
|
@@ -96,18 +100,20 @@ The package supports the following python versions: 3.9,3.10,3.11,3.12
|
|
|
96
100
|
Requirements
|
|
97
101
|
------------
|
|
98
102
|
|
|
99
|
-
|
|
100
|
-
PIP package
|
|
101
|
-
|
|
102
|
-
``apache-airflow``
|
|
103
|
-
``apache-airflow-providers-common-
|
|
104
|
-
``
|
|
105
|
-
``
|
|
106
|
-
``
|
|
107
|
-
``
|
|
108
|
-
``
|
|
109
|
-
``
|
|
110
|
-
|
|
103
|
+
========================================== ==================
|
|
104
|
+
PIP package Version required
|
|
105
|
+
========================================== ==================
|
|
106
|
+
``apache-airflow`` ``>=2.10.0``
|
|
107
|
+
``apache-airflow-providers-common-compat`` ``>=1.6.0``
|
|
108
|
+
``apache-airflow-providers-common-sql`` ``>=1.27.0``
|
|
109
|
+
``requests`` ``>=2.31.0,<3``
|
|
110
|
+
``databricks-sql-connector`` ``>=3.0.0``
|
|
111
|
+
``databricks-sqlalchemy`` ``>=1.0.2``
|
|
112
|
+
``aiohttp`` ``>=3.9.2,<4``
|
|
113
|
+
``mergedeep`` ``>=1.3.4``
|
|
114
|
+
``pandas`` ``>=2.1.2,<2.2``
|
|
115
|
+
``pyarrow`` ``>=14.0.1``
|
|
116
|
+
========================================== ==================
|
|
111
117
|
|
|
112
118
|
Cross provider package dependencies
|
|
113
119
|
-----------------------------------
|
|
@@ -130,5 +136,5 @@ Dependent package
|
|
|
130
136
|
============================================================================================================ ==============
|
|
131
137
|
|
|
132
138
|
The changelog for the provider package can be found in the
|
|
133
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
139
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/changelog.html>`_.
|
|
134
140
|
|
{apache_airflow_providers_databricks-7.3.2 → apache_airflow_providers_databricks-7.4.0}/README.rst
RENAMED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
Package ``apache-airflow-providers-databricks``
|
|
25
25
|
|
|
26
|
-
Release: ``7.
|
|
26
|
+
Release: ``7.4.0``
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
`Databricks <https://databricks.com/>`__
|
|
@@ -36,7 +36,7 @@ This is a provider package for ``databricks`` provider. All classes for this pro
|
|
|
36
36
|
are in ``airflow.providers.databricks`` python package.
|
|
37
37
|
|
|
38
38
|
You can find package information and changelog for the provider
|
|
39
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
39
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/>`_.
|
|
40
40
|
|
|
41
41
|
Installation
|
|
42
42
|
------------
|
|
@@ -50,18 +50,20 @@ The package supports the following python versions: 3.9,3.10,3.11,3.12
|
|
|
50
50
|
Requirements
|
|
51
51
|
------------
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
PIP package
|
|
55
|
-
|
|
56
|
-
``apache-airflow``
|
|
57
|
-
``apache-airflow-providers-common-
|
|
58
|
-
``
|
|
59
|
-
``
|
|
60
|
-
``
|
|
61
|
-
``
|
|
62
|
-
``
|
|
63
|
-
``
|
|
64
|
-
|
|
53
|
+
========================================== ==================
|
|
54
|
+
PIP package Version required
|
|
55
|
+
========================================== ==================
|
|
56
|
+
``apache-airflow`` ``>=2.10.0``
|
|
57
|
+
``apache-airflow-providers-common-compat`` ``>=1.6.0``
|
|
58
|
+
``apache-airflow-providers-common-sql`` ``>=1.27.0``
|
|
59
|
+
``requests`` ``>=2.31.0,<3``
|
|
60
|
+
``databricks-sql-connector`` ``>=3.0.0``
|
|
61
|
+
``databricks-sqlalchemy`` ``>=1.0.2``
|
|
62
|
+
``aiohttp`` ``>=3.9.2,<4``
|
|
63
|
+
``mergedeep`` ``>=1.3.4``
|
|
64
|
+
``pandas`` ``>=2.1.2,<2.2``
|
|
65
|
+
``pyarrow`` ``>=14.0.1``
|
|
66
|
+
========================================== ==================
|
|
65
67
|
|
|
66
68
|
Cross provider package dependencies
|
|
67
69
|
-----------------------------------
|
|
@@ -84,4 +86,4 @@ Dependent package
|
|
|
84
86
|
============================================================================================================ ==============
|
|
85
87
|
|
|
86
88
|
The changelog for the provider package can be found in the
|
|
87
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
89
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/changelog.html>`_.
|
|
@@ -26,6 +26,32 @@
|
|
|
26
26
|
Changelog
|
|
27
27
|
---------
|
|
28
28
|
|
|
29
|
+
7.4.0
|
|
30
|
+
.....
|
|
31
|
+
|
|
32
|
+
.. note::
|
|
33
|
+
This release of provider is only available for Airflow 2.10+ as explained in the
|
|
34
|
+
Apache Airflow providers support policy <https://github.com/apache/airflow/blob/main/PROVIDERS.rst#minimum-supported-version-of-airflow-for-community-managed-providers>_.
|
|
35
|
+
|
|
36
|
+
Features
|
|
37
|
+
~~~~~~~~
|
|
38
|
+
|
|
39
|
+
* ``Upgrade 'DatabricksSqlHook' to support polars (#50523)``
|
|
40
|
+
* ``feat: Add OpenLineage support for DatabricksSqlHook (#50392)``
|
|
41
|
+
* ``enhance: logs SQL before execution in 'snowflake' and 'databricks_sql' (#48942)``
|
|
42
|
+
|
|
43
|
+
Misc
|
|
44
|
+
~~~~
|
|
45
|
+
|
|
46
|
+
* ``Remove AIRFLOW_2_10_PLUS conditions (#49877)``
|
|
47
|
+
* ``Bump min Airflow version in providers to 2.10 (#49843)``
|
|
48
|
+
* ``chore: import paths use the stable functions (#49460)``
|
|
49
|
+
|
|
50
|
+
.. Below changes are excluded from the changelog. Move them to
|
|
51
|
+
appropriate section above if needed. Do not delete the lines(!):
|
|
52
|
+
* ``Update description of provider.yaml dependencies (#50231)``
|
|
53
|
+
* ``Avoid committing history for providers (#49907)``
|
|
54
|
+
|
|
29
55
|
7.3.2
|
|
30
56
|
.....
|
|
31
57
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
.. Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
or more contributor license agreements. See the NOTICE file
|
|
4
|
+
distributed with this work for additional information
|
|
5
|
+
regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
to you under the Apache License, Version 2.0 (the
|
|
7
|
+
"License"); you may not use this file except in compliance
|
|
8
|
+
with the License. You may obtain a copy of the License at
|
|
9
|
+
|
|
10
|
+
.. http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
|
|
12
|
+
.. Unless required by applicable law or agreed to in writing,
|
|
13
|
+
software distributed under the License is distributed on an
|
|
14
|
+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
KIND, either express or implied. See the License for the
|
|
16
|
+
specific language governing permissions and limitations
|
|
17
|
+
under the License.
|
|
18
|
+
|
|
19
|
+
.. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE OVERWRITTEN!
|
|
20
|
+
|
|
21
|
+
.. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
|
|
22
|
+
`PROVIDER_COMMITS_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY
|
|
23
|
+
|
|
24
|
+
.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN!
|
|
25
|
+
|
|
26
|
+
Package apache-airflow-providers-databricks
|
|
27
|
+
------------------------------------------------------
|
|
28
|
+
|
|
29
|
+
`Databricks <https://databricks.com/>`__
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
This is detailed commit list of changes for versions provider package: ``databricks``.
|
|
33
|
+
For high-level changelog, see :doc:`package information including changelog <index>`.
|
|
34
|
+
|
|
35
|
+
.. airflow-providers-commits::
|
|
@@ -78,7 +78,7 @@ apache-airflow-providers-databricks package
|
|
|
78
78
|
`Databricks <https://databricks.com/>`__
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
Release: 7.
|
|
81
|
+
Release: 7.4.0
|
|
82
82
|
|
|
83
83
|
Provider package
|
|
84
84
|
----------------
|
|
@@ -96,20 +96,22 @@ For the minimum Airflow version supported, see ``Requirements`` below.
|
|
|
96
96
|
Requirements
|
|
97
97
|
------------
|
|
98
98
|
|
|
99
|
-
The minimum Apache Airflow version supported by this provider distribution is ``2.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
PIP package
|
|
103
|
-
|
|
104
|
-
``apache-airflow``
|
|
105
|
-
``apache-airflow-providers-common-
|
|
106
|
-
``
|
|
107
|
-
``
|
|
108
|
-
``
|
|
109
|
-
``
|
|
110
|
-
``
|
|
111
|
-
``
|
|
112
|
-
|
|
99
|
+
The minimum Apache Airflow version supported by this provider distribution is ``2.10.0``.
|
|
100
|
+
|
|
101
|
+
========================================== ==================
|
|
102
|
+
PIP package Version required
|
|
103
|
+
========================================== ==================
|
|
104
|
+
``apache-airflow`` ``>=2.10.0``
|
|
105
|
+
``apache-airflow-providers-common-compat`` ``>=1.6.0``
|
|
106
|
+
``apache-airflow-providers-common-sql`` ``>=1.27.0``
|
|
107
|
+
``requests`` ``>=2.31.0,<3``
|
|
108
|
+
``databricks-sql-connector`` ``>=3.0.0``
|
|
109
|
+
``databricks-sqlalchemy`` ``>=1.0.2``
|
|
110
|
+
``aiohttp`` ``>=3.9.2,<4``
|
|
111
|
+
``mergedeep`` ``>=1.3.4``
|
|
112
|
+
``pandas`` ``>=2.1.2,<2.2``
|
|
113
|
+
``pyarrow`` ``>=14.0.1``
|
|
114
|
+
========================================== ==================
|
|
113
115
|
|
|
114
116
|
Cross provider package dependencies
|
|
115
117
|
-----------------------------------
|
|
@@ -137,5 +139,5 @@ Downloading official packages
|
|
|
137
139
|
You can download officially released packages and verify their checksums and signatures from the
|
|
138
140
|
`Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
|
|
139
141
|
|
|
140
|
-
* `The apache-airflow-providers-databricks 7.
|
|
141
|
-
* `The apache-airflow-providers-databricks 7.
|
|
142
|
+
* `The apache-airflow-providers-databricks 7.4.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0.tar.gz.sha512>`__)
|
|
143
|
+
* `The apache-airflow-providers-databricks 7.4.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_databricks-7.4.0-py3-none-any.whl.sha512>`__)
|
|
@@ -22,9 +22,13 @@ description: |
|
|
|
22
22
|
`Databricks <https://databricks.com/>`__
|
|
23
23
|
|
|
24
24
|
state: ready
|
|
25
|
-
source-date-epoch:
|
|
26
|
-
#
|
|
25
|
+
source-date-epoch: 1747132432
|
|
26
|
+
# Note that those versions are maintained by release manager - do not update them manually
|
|
27
|
+
# with the exception of case where other provider in sources has >= new provider version.
|
|
28
|
+
# In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
|
|
29
|
+
# to be done in the same PR
|
|
27
30
|
versions:
|
|
31
|
+
- 7.4.0
|
|
28
32
|
- 7.3.2
|
|
29
33
|
- 7.3.1
|
|
30
34
|
- 7.3.0
|
|
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
|
|
|
25
25
|
|
|
26
26
|
[project]
|
|
27
27
|
name = "apache-airflow-providers-databricks"
|
|
28
|
-
version = "7.
|
|
28
|
+
version = "7.4.0"
|
|
29
29
|
description = "Provider package apache-airflow-providers-databricks for Apache Airflow"
|
|
30
30
|
readme = "README.rst"
|
|
31
31
|
authors = [
|
|
@@ -57,10 +57,12 @@ requires-python = "~=3.9"
|
|
|
57
57
|
# Make sure to run ``breeze static-checks --type update-providers-dependencies --all-files``
|
|
58
58
|
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
|
|
59
59
|
dependencies = [
|
|
60
|
-
"apache-airflow>=2.
|
|
61
|
-
"apache-airflow-providers-common-
|
|
60
|
+
"apache-airflow>=2.10.0",
|
|
61
|
+
"apache-airflow-providers-common-compat>=1.6.0",
|
|
62
|
+
"apache-airflow-providers-common-sql>=1.27.0",
|
|
62
63
|
"requests>=2.31.0,<3",
|
|
63
64
|
"databricks-sql-connector>=3.0.0",
|
|
65
|
+
"databricks-sqlalchemy>=1.0.2",
|
|
64
66
|
"aiohttp>=3.9.2, <4",
|
|
65
67
|
"mergedeep>=1.3.4",
|
|
66
68
|
"pandas>=2.1.2,<2.2",
|
|
@@ -83,17 +85,23 @@ dependencies = [
|
|
|
83
85
|
"standard" = [
|
|
84
86
|
"apache-airflow-providers-standard"
|
|
85
87
|
]
|
|
88
|
+
"openlineage" = [
|
|
89
|
+
"apache-airflow-providers-openlineage>=2.3.0"
|
|
90
|
+
]
|
|
86
91
|
|
|
87
92
|
[dependency-groups]
|
|
88
93
|
dev = [
|
|
89
94
|
"apache-airflow",
|
|
90
95
|
"apache-airflow-task-sdk",
|
|
91
96
|
"apache-airflow-devel-common",
|
|
97
|
+
"apache-airflow-providers-common-compat",
|
|
92
98
|
"apache-airflow-providers-common-sql",
|
|
93
99
|
"apache-airflow-providers-fab",
|
|
100
|
+
"apache-airflow-providers-openlineage",
|
|
94
101
|
# Additional devel dependencies (do not remove this line and add extra development dependencies)
|
|
95
102
|
"deltalake>=0.12.0",
|
|
96
103
|
"apache-airflow-providers-microsoft-azure",
|
|
104
|
+
"apache-airflow-providers-common-sql[pandas,polars]",
|
|
97
105
|
]
|
|
98
106
|
|
|
99
107
|
# To build docs:
|
|
@@ -122,8 +130,8 @@ apache-airflow-providers-common-sql = {workspace = true}
|
|
|
122
130
|
apache-airflow-providers-standard = {workspace = true}
|
|
123
131
|
|
|
124
132
|
[project.urls]
|
|
125
|
-
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
126
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.
|
|
133
|
+
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0"
|
|
134
|
+
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-databricks/7.4.0/changelog.html"
|
|
127
135
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
|
128
136
|
"Source Code" = "https://github.com/apache/airflow"
|
|
129
137
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
|
@@ -29,11 +29,11 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "7.
|
|
32
|
+
__version__ = "7.4.0"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
|
-
"2.
|
|
35
|
+
"2.10.0"
|
|
36
36
|
):
|
|
37
37
|
raise RuntimeError(
|
|
38
|
-
f"The package `apache-airflow-providers-databricks:{__version__}` needs Apache Airflow 2.
|
|
38
|
+
f"The package `apache-airflow-providers-databricks:{__version__}` needs Apache Airflow 2.10.0+"
|
|
39
39
|
)
|
|
@@ -35,7 +35,8 @@ from databricks import sql # type: ignore[attr-defined]
|
|
|
35
35
|
from databricks.sql.types import Row
|
|
36
36
|
|
|
37
37
|
from airflow.exceptions import AirflowException
|
|
38
|
-
from airflow.providers.common.sql.hooks.
|
|
38
|
+
from airflow.providers.common.sql.hooks.handlers import return_single_query_results
|
|
39
|
+
from airflow.providers.common.sql.hooks.sql import DbApiHook
|
|
39
40
|
from airflow.providers.databricks.exceptions import DatabricksSqlExecutionError, DatabricksSqlExecutionTimeout
|
|
40
41
|
from airflow.providers.databricks.hooks.databricks_base import BaseDatabricksHook
|
|
41
42
|
|
|
@@ -43,6 +44,8 @@ if TYPE_CHECKING:
|
|
|
43
44
|
from databricks.sql.client import Connection
|
|
44
45
|
|
|
45
46
|
from airflow.models.connection import Connection as AirflowConnection
|
|
47
|
+
from airflow.providers.openlineage.extractors import OperatorLineage
|
|
48
|
+
from airflow.providers.openlineage.sqlparser import DatabaseInfo
|
|
46
49
|
|
|
47
50
|
|
|
48
51
|
LIST_SQL_ENDPOINTS_ENDPOINT = ("GET", "api/2.0/sql/endpoints")
|
|
@@ -107,6 +110,7 @@ class DatabricksSqlHook(BaseDatabricksHook, DbApiHook):
|
|
|
107
110
|
self.catalog = catalog
|
|
108
111
|
self.schema = schema
|
|
109
112
|
self.additional_params = kwargs
|
|
113
|
+
self.query_ids: list[str] = []
|
|
110
114
|
|
|
111
115
|
def _get_extra_config(self) -> dict[str, Any | None]:
|
|
112
116
|
extra_params = copy(self.databricks_conn.extra_dejson)
|
|
@@ -226,6 +230,8 @@ class DatabricksSqlHook(BaseDatabricksHook, DbApiHook):
|
|
|
226
230
|
it will raise and fail.
|
|
227
231
|
"""
|
|
228
232
|
self.descriptions = []
|
|
233
|
+
self.query_ids = []
|
|
234
|
+
|
|
229
235
|
if isinstance(sql, str):
|
|
230
236
|
if split_statements:
|
|
231
237
|
sql_list = [self.strip_sql_string(s) for s in self.split_sql_string(sql)]
|
|
@@ -242,6 +248,7 @@ class DatabricksSqlHook(BaseDatabricksHook, DbApiHook):
|
|
|
242
248
|
conn = None
|
|
243
249
|
results = []
|
|
244
250
|
for sql_statement in sql_list:
|
|
251
|
+
self.log.info("Running statement: %s, parameters: %s", sql_statement, parameters)
|
|
245
252
|
# when using AAD tokens, it could expire if previous query run longer than token lifetime
|
|
246
253
|
conn = self.get_conn()
|
|
247
254
|
with closing(conn.cursor()) as cur:
|
|
@@ -265,6 +272,10 @@ class DatabricksSqlHook(BaseDatabricksHook, DbApiHook):
|
|
|
265
272
|
if t is not None:
|
|
266
273
|
t.cancel()
|
|
267
274
|
|
|
275
|
+
if query_id := cur.query_id:
|
|
276
|
+
self.log.info("Databricks query id: %s", query_id)
|
|
277
|
+
self.query_ids.append(query_id)
|
|
278
|
+
|
|
268
279
|
if handler is not None:
|
|
269
280
|
raw_result = handler(cur)
|
|
270
281
|
result = self._make_common_data_structure(raw_result)
|
|
@@ -307,3 +318,80 @@ class DatabricksSqlHook(BaseDatabricksHook, DbApiHook):
|
|
|
307
318
|
|
|
308
319
|
def bulk_load(self, table, tmp_file):
|
|
309
320
|
raise NotImplementedError()
|
|
321
|
+
|
|
322
|
+
def get_openlineage_database_info(self, connection) -> DatabaseInfo:
|
|
323
|
+
from airflow.providers.openlineage.sqlparser import DatabaseInfo
|
|
324
|
+
|
|
325
|
+
return DatabaseInfo(
|
|
326
|
+
scheme=self.get_openlineage_database_dialect(connection),
|
|
327
|
+
authority=self.host,
|
|
328
|
+
database=self.catalog,
|
|
329
|
+
information_schema_columns=[
|
|
330
|
+
"table_schema",
|
|
331
|
+
"table_name",
|
|
332
|
+
"column_name",
|
|
333
|
+
"ordinal_position",
|
|
334
|
+
"data_type",
|
|
335
|
+
"table_catalog",
|
|
336
|
+
],
|
|
337
|
+
is_information_schema_cross_db=True,
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
def get_openlineage_database_dialect(self, _) -> str:
|
|
341
|
+
return "databricks"
|
|
342
|
+
|
|
343
|
+
def get_openlineage_default_schema(self) -> str | None:
|
|
344
|
+
return self.schema or "default"
|
|
345
|
+
|
|
346
|
+
def get_openlineage_database_specific_lineage(self, task_instance) -> OperatorLineage | None:
|
|
347
|
+
"""
|
|
348
|
+
Generate OpenLineage metadata for a Databricks task instance based on executed query IDs.
|
|
349
|
+
|
|
350
|
+
If a single query ID is present, attach an `ExternalQueryRunFacet` to the lineage metadata.
|
|
351
|
+
If multiple query IDs are present, emits separate OpenLineage events for each query instead.
|
|
352
|
+
|
|
353
|
+
Note that `get_openlineage_database_specific_lineage` is usually called after task's execution,
|
|
354
|
+
so if multiple query IDs are present, both START and COMPLETE event for each query will be emitted
|
|
355
|
+
after task's execution. If we are able to query Databricks for query execution metadata,
|
|
356
|
+
query event times will correspond to actual query's start and finish times.
|
|
357
|
+
|
|
358
|
+
Args:
|
|
359
|
+
task_instance: The Airflow TaskInstance object for which lineage is being collected.
|
|
360
|
+
|
|
361
|
+
Returns:
|
|
362
|
+
An `OperatorLineage` object if a single query ID is found; otherwise `None`.
|
|
363
|
+
"""
|
|
364
|
+
from airflow.providers.common.compat.openlineage.facet import ExternalQueryRunFacet
|
|
365
|
+
from airflow.providers.databricks.utils.openlineage import (
|
|
366
|
+
emit_openlineage_events_for_databricks_queries,
|
|
367
|
+
)
|
|
368
|
+
from airflow.providers.openlineage.extractors import OperatorLineage
|
|
369
|
+
from airflow.providers.openlineage.sqlparser import SQLParser
|
|
370
|
+
|
|
371
|
+
if not self.query_ids:
|
|
372
|
+
self.log.debug("openlineage: no databricks query ids found.")
|
|
373
|
+
return None
|
|
374
|
+
|
|
375
|
+
self.log.debug("openlineage: getting connection to get database info")
|
|
376
|
+
connection = self.get_connection(self.get_conn_id())
|
|
377
|
+
namespace = SQLParser.create_namespace(self.get_openlineage_database_info(connection))
|
|
378
|
+
|
|
379
|
+
if len(self.query_ids) == 1:
|
|
380
|
+
self.log.debug("Attaching ExternalQueryRunFacet with single query_id to OpenLineage event.")
|
|
381
|
+
return OperatorLineage(
|
|
382
|
+
run_facets={
|
|
383
|
+
"externalQuery": ExternalQueryRunFacet(
|
|
384
|
+
externalQueryId=self.query_ids[0], source=namespace
|
|
385
|
+
)
|
|
386
|
+
}
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
self.log.info("Multiple query_ids found. Separate OpenLineage event will be emitted for each query.")
|
|
390
|
+
emit_openlineage_events_for_databricks_queries(
|
|
391
|
+
query_ids=self.query_ids,
|
|
392
|
+
query_source_namespace=namespace,
|
|
393
|
+
task_instance=task_instance,
|
|
394
|
+
hook=self,
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
return None
|
|
@@ -22,6 +22,7 @@ from __future__ import annotations
|
|
|
22
22
|
import csv
|
|
23
23
|
import json
|
|
24
24
|
from collections.abc import Sequence
|
|
25
|
+
from functools import cached_property
|
|
25
26
|
from typing import TYPE_CHECKING, Any, ClassVar
|
|
26
27
|
|
|
27
28
|
from databricks.sql.utils import ParamEscaper
|
|
@@ -106,7 +107,8 @@ class DatabricksSqlOperator(SQLExecuteQueryOperator):
|
|
|
106
107
|
self.catalog = catalog
|
|
107
108
|
self.schema = schema
|
|
108
109
|
|
|
109
|
-
|
|
110
|
+
@cached_property
|
|
111
|
+
def _hook(self) -> DatabricksSqlHook:
|
|
110
112
|
hook_params = {
|
|
111
113
|
"http_path": self.http_path,
|
|
112
114
|
"session_configuration": self.session_configuration,
|
|
@@ -120,6 +122,9 @@ class DatabricksSqlOperator(SQLExecuteQueryOperator):
|
|
|
120
122
|
}
|
|
121
123
|
return DatabricksSqlHook(self.databricks_conn_id, **hook_params)
|
|
122
124
|
|
|
125
|
+
def get_db_hook(self) -> DatabricksSqlHook:
|
|
126
|
+
return self._hook
|
|
127
|
+
|
|
123
128
|
def _should_run_output_processing(self) -> bool:
|
|
124
129
|
return self.do_xcom_push or bool(self._output_path)
|
|
125
130
|
|