code: @Override
      public final QueryResult execute(String queryId, LogicalWorkflow workflow) throws ConnectorException {
          QueryResult result = null;
          Long time = null;
          try {
              for (LogicalStep project : workflow.getInitialSteps()) {
                  ClusterName clusterName = ((Project) project).getClusterName();
                  connectionHandler.startJob(clusterName.getName());
              }
              if (logger.isDebugEnabled()) {
                  logger.debug("Executing [" + workflow.toString() + "]");
              }
              time = System.currentTimeMillis();
              result = executeWorkFlow(workflow);
  
              if (logger.isDebugEnabled()) {
                  logger.debug(
                          "The query has finished. The result form the query [" + workflow.toString() + "] has returned "
                                  + "[" +
                                  result
                                          .getResultSet()
                                          .size() + "] rows");
  
              }
          } finally {
              for (LogicalStep project : workflow.getInitialSteps()) {
                  connectionHandler.endJob(((Project) project).getClusterName().getName());
              }
              if (time != null) {
                  logger.info("TIME - The execute time has been [" + (System.currentTimeMillis() - time) + "]");
              }
          }
          return result;
      }
docs: This method execute a query.
  
  @param workflow the workflow to be executed.
  @return the query result.
  @throws ConnectorException if a error happens.