diff --git a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py index 9834912720447..558e3bf564aaa 100644 --- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py +++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake_sql_api.py @@ -288,7 +288,21 @@ def _process_response(self, status_code, resp): if status_code == 202: return {"status": "running", "message": "Query statements are still running"} if status_code == 422: - return {"status": "error", "message": resp["message"]} + error_message = resp.get("message", "Unknown error occurred") + error_details = [] + if code := resp.get("code"): + error_details.append(f"Code: {code}") + if sql_state := resp.get("sqlState"): + error_details.append(f"SQL State: {sql_state}") + if statement_handle := resp.get("statementHandle"): + error_details.append(f"Statement Handle: {statement_handle}") + + if error_details: + enhanced_message = f"{error_message} ({', '.join(error_details)})" + else: + enhanced_message = error_message + + return {"status": "error", "message": enhanced_message} if status_code == 200: if resp_statement_handles := resp.get("statementHandles"): statement_handles = resp_statement_handles diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py index 7170eac36f413..56c30afa374b1 100644 --- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py +++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake_sql_api.py @@ -618,7 +618,20 @@ def test_get_private_key_should_support_private_auth_with_unencrypted_key( }, ), (202, {}, {"status": "running", "message": "Query statements are still running"}), - (422, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}), + (422, {"message": "test"}, {"status": "error", "message": "test"}), + ( + 422, + { + "message": "SQL compilation error", + "code": "000904", + "sqlState": "42000", + "statementHandle": "handle123", + }, + { + "status": "error", + "message": "SQL compilation error (Code: 000904, SQL State: 42000, Statement Handle: handle123)", + }, + ), (404, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}), ], ) @@ -678,7 +691,7 @@ def raise_for_status(self): }, ), (202, {}, {"status": "running", "message": "Query statements are still running"}), - (422, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}), + (422, {"message": "test"}, {"status": "error", "message": "test"}), (404, {"status": "error", "message": "test"}, {"status": "error", "message": "test"}), ], )