You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "dabla (via GitHub)" <gi...@apache.org> on 2024/07/17 12:52:44 UTC
[PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
dabla opened a new pull request, #40836:
URL: https://github.com/apache/airflow/pull/40836
<!--
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.
-->
<!--
Thank you for contributing! Please make sure that your code changes
are covered with tests. And in case of new features or big changes
remember to adjust the documentation.
Feel free to ping committers for the review!
In case of an existing issue, reference it using one of the following:
closes: #ISSUE
related: #ISSUE
How to write a good git commit message:
http://chris.beams.io/posts/git-commit/
-->
This PR adds support for the replace option when using insert_rows with the MsSqlHook. Unfortunately MSSQL doesn't have a REPLACE or an UPSERT SQL syntax. In order to achieve the same functionality, you have to use the MERGE INTO statement. In order to be able to use that statement in a dynamic way, you have to get the primary keys of the table you want to replace into. This means the current implementation of the _generate_insert_sql with the _replace_statement_format field won't work, as some assumptions have been made there which makes it impossible to achieve the same with the current _generate_insert_sql implementation of the DbApiHook.
So to make it work for MsSqlHook, I've override the _generate_insert_sql method in the MsSqlHook and also added a method named get_primary_keys which dynamically retrieves the PK associated to the given table as this will be needed for the MERGE INTO SQL statement. If the _generate_insert_sql method is called for insert statement, then the original implementation is being called, otherwise the MSSQL specific implementation is being executed.
<!-- Please keep an empty line above the dashes. -->
---
**^ Add meaningful description above**
Read the **[Pull Request Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)** for more information.
In case of fundamental code changes, an Airflow Improvement Proposal ([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals)) is needed.
In case of a new dependency, check compliance with the [ASF 3rd Party License Policy](https://www.apache.org/legal/resolved.html#category-x).
In case of backwards incompatible changes please leave a note in a newsfragment file, named `{pr_number}.significant.rst` or `{issue_number}.significant.rst`, in [newsfragments](https://github.com/apache/airflow/tree/main/newsfragments).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2235827478
Never mind the hive.sql also has the header, problem is I use the content of the sql for my assertion in the test, as I could have it as a python string as it would be sensitive to formatting and thus make false assertion failures
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2238715341
Integration test for mssql is failing, but don't know why cause I didn't change anything related to connection here for MsSqlHook.
```
FAILED tests/integration/providers/microsoft/mssql/hooks/test_mssql.py::TestMsSqlHook::test_get_conn - pymssql.exceptions.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (mssql)\n')
FAILED tests/integration/providers/microsoft/mssql/hooks/test_mssql.py::TestMsSqlHook::test_autocommit - pymssql.exceptions.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (mssql)\n')
ERROR tests/integration/providers/apache/hive/transfers/test_mssql_to_hive.py::TestMsSqlToHiveTransfer::test_execute - pymssql.exceptions.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (mssql)\n')
ERROR tests/integration/providers/google/cloud/transfers/test_bigquery_to_mssql.py::TestBigQueryToMsSqlOperator::test_execute - pymssql.exceptions.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (mssql)\n')
ERROR tests/integration/providers/google/cloud/transfers/test_mssql_to_gcs.py::TestMsSqlToGoogleCloudStorageOperator::test_execute - pymssql.exceptions.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (mssql)\n')
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "potiuk (via GitHub)" <gi...@apache.org>.
potiuk commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2238968090
Not the most stable server via docker compose - it happens. Rerun it.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2235841226
I've added the license header in the sql file and written a function which filters out the license header so the assertion still works
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "potiuk (via GitHub)" <gi...@apache.org>.
potiuk commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2236391589
> It's a pitty that I can't use the functools.lru_cache decorator? I could use the [cachetools cache decorator](https://cachetools.readthedocs.io/en/latest/), but then that would add an extra dependency. Dunno why unctools.lru_cache is banned, as per default it has a maxsize of 128 entries per cached method? This method needs to be cache as it will be called multiple times per chunked insert rows, otherwise we could end up having the same issue as in [#40609](https://github.com/apache/airflow/issues/40609). A decorator also looks nicer instead of manually implementing it with a class member as it is a cross cutting concern.
Functools.lru_cache should not be use on object methods only on functions. https://stackoverflow.com/questions/33672412/python-functools-lru-cache-with-instance-methods-release-object
And we are using methodtools.lru_cache instead (already our dependency).
See https://github.com/apache/airflow/pull/37757. Maybe a good idea (feel free to add PR) is to update the description of error and suggest to use methodtools insteadl
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2235821170
@potiuk Is there a way to ignore the required license header in sql files within tests? Searched through the project but didn't find any example, saw other sql file and seemed that one wasn't impacted so wonder why
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2236366630
It's a pitty that I can't use the functools.lru_cache decorator? I could use the [cachetools cache decorator](https://cachetools.readthedocs.io/en/latest/), but then that would add an extra dependency. Dunno why unctools.lru_cache is banned, as per default it has a maxsize of 128 entries per cached method? This method needs to be cache as it will be called multiple times per chunked insert rows, otherwise we could end up having the same issue as in [#40609](https://github.com/apache/airflow/issues/40609). A decorator also looks nicer instead of manually implementing it with a class member as it is a cross cutting concern.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "dabla (via GitHub)" <gi...@apache.org>.
dabla commented on PR #40836:
URL: https://github.com/apache/airflow/pull/40836#issuecomment-2236516883
> > It's a pitty that I can't use the functools.lru_cache decorator? I could use the [cachetools cache decorator](https://cachetools.readthedocs.io/en/latest/), but then that would add an extra dependency. Dunno why unctools.lru_cache is banned, as per default it has a maxsize of 128 entries per cached method? This method needs to be cache as it will be called multiple times per chunked insert rows, otherwise we could end up having the same issue as in [#40609](https://github.com/apache/airflow/issues/40609). A decorator also looks nicer instead of manually implementing it with a class member as it is a cross cutting concern.
>
> Functools.lru_cache should not be used on object methods only on functions. https://stackoverflow.com/questions/33672412/python-functools-lru-cache-with-instance-methods-release-object
>
> And we are using methodtools.lru_cache instead (already our dependency).
>
> See #37757. Maybe a good idea (feel free to add PR) is to update the description of error and suggest to use methodtools insteadl
Thank you Jarek good to know didn't catch that one but should have ;)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Added support for replace option when using insert_rows with MsSqlHook [airflow]
Posted by "potiuk (via GitHub)" <gi...@apache.org>.
potiuk merged PR #40836:
URL: https://github.com/apache/airflow/pull/40836
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org