Retrieve error message from scenario execute sql statement
Is it possible to retrieve the error message returned from a database when performing an execute_sql statement in a scenario python script?
I'm running the below in a scenario using custom python script.
scenario.execute_sql("Conn_Name", "select top 1 col_key from db_name.tbl_name")
It fails because I purposefully used a non existing database. The log shows the following information:
[2020/04/22-10:32:41.850] [FT-RunStepFutureThread-nFNhtqKi-241093] [INFO] [dip.scenario.step.sql] - [ct: 236] Exited the exec sql step {
"endedOn": 0,
"success": false,
"updatedRows": 0,
"errorMessage": "[Teradata Database] [TeraJDBC x.x.x.x] [Error 3807] [SQLState 42S02] Object \u0027db_name.tbl_name\u0027 does not exist.",
"totalRowsClipped": false,
"totalRows": 0,
"log": "",
"columns": [],
"rows": [],
"hasResultset": false
}
Is there a way I can pull out the errorMessage that was returned from the database when trying the scenario.execute_sql?
Best Answer
-
Hi,
You could use the get_details() method in the Dataiku Python API which will retrieve the full details on the scenario run.
I've attached a Python code snippet that would retrieve the results of the details of the last run of a scenario:
import dataiku from dataikuapi.dss.scenario import DSSScenario client = dataiku.api_client() dss_scenario = DSSScenario(client, dataiku.default_project_key(), "your_scenario_id") dss_scenario.get_last_runs()[0].get_details()
This returns the JSON of the output of the last run of the scenario. You would need to play around with the JSON output to narrow down that specific message. I was able to retrieve the error message by narrowing down with the following code:
dss_scenario.get_last_runs()[0].get_details()['stepRuns'][1]['result']['thrown']
Hope this is helpful!
Answers
-
Thanks, this helped quite a bit.
There might be a better approach but what I wanted to accomplish with the scenario was have some simple queries to check if any of the tables and databases in my flow were currently locked and if so wait N minutes, check again, once all queries showed tables were not locked then proceed with running the flow.
