alexandermalyga opened a new issue, #26774:
URL: https://github.com/apache/airflow/issues/26774

   ### Apache Airflow Provider(s)
   
   presto, trino
   
   ### Versions of Apache Airflow Providers
   
   apache-airflow-providers-trino==4.0.1
   apache-airflow-providers-presto==4.0.1
   
   ### Apache Airflow version
   
   2.4.0
   
   ### Operating System
   
   macOS 12.6
   
   ### Deployment
   
   Docker-Compose
   
   ### Deployment details
   
   _No response_
   
   ### What happened
   
   When using the TrinoHook (PrestoHook also applies), only the `get_records()` 
and `get_first()` methods work as expected, the  `run()` and `insert_rows()` do 
not.
   The SQL statements sent by the problematic methods reach the database 
(visible in logs and UI), but they don't get executed.
   
   The issue is caused by the hook not making the required subsequent requests 
to the Trino HTTP endpoints after the first request. More info 
[here](https://trino.io/docs/current/develop/client-protocol.html#overview-of-query-processing):
   
   > If the JSON document returned by the POST to /v1/statement does not 
contain a nextUri link, the query has completed, either successfully or 
unsuccessfully, and no additional requests need to be made. If the nextUri link 
is present in the document, there are more query results to be fetched. The 
client should loop executing a GET request to the nextUri returned in the 
QueryResults response object until nextUri is absent from the response.
   
   SQL statements made by methods like `get_records()` do get executed because 
internally they call `fetchone()` or `fetchmany()` on the cursor, which do make 
the subsequent requests.
   
   ### What you think should happen instead
   
   The Hook is able to execute SQL statements other than SELECT.
   
   ### How to reproduce
   
   Connect to a Trino or Presto instance and execute any SQL statement (INSERT 
or CREATE TABLE) using `TrinoHook.run()`, the statements will reach the API but 
they won't get executed.
   
   Then, provide a dummy handler function like this:
   `TrinoHook.run(..., handler=lambda cur: cur.description)`
   
   The description property internally iterates over the cursor requests and 
the initial statement will get executed.
   
   ### Anything else
   
   _No response_
   
   ### Are you willing to submit PR?
   
   - [X] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [X] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to