diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 2f8b391..20da442 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -468,7 +468,7 @@
                         if (stats.getProfileType() == Stats.ProfileType.FULL) {
                             this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
                         }
-                        handleCopyFromStatement(metadataProvider, stmt, hcc);
+                        handleCopyFromStatement(metadataProvider, stmt, hcc, requestParameters);
                         break;
                     case COPY_TO:
                         metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter.getAndInc()));
@@ -495,7 +495,7 @@
                                 stats, requestParameters, stmtParams, stmtRewriter);
                         break;
                     case DELETE:
-                        handleDeleteStatement(metadataProvider, stmt, hcc, stmtParams, stmtRewriter);
+                        handleDeleteStatement(metadataProvider, stmt, hcc, stmtParams, stmtRewriter, requestParameters);
                         break;
                     case CREATE_FEED:
                         handleCreateFeedStatement(metadataProvider, stmt);
@@ -3926,7 +3926,7 @@
     }
 
     protected void handleCopyFromStatement(MetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
+            IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
         CopyFromStatement copyStmt = (CopyFromStatement) stmt;
         String datasetName = copyStmt.getDatasetName();
         metadataProvider.validateDatabaseObjectName(copyStmt.getNamespace(), datasetName, copyStmt.getSourceLocation());
@@ -3993,7 +3993,10 @@
                             numParticipatingNodes, numParticipatingPartitions));
                 }
                 jobId = JobUtils.runJob(hcc, spec, jobFlags, false);
-
+                final IRequestTracker requestTracker = appCtx.getRequestTracker();
+                final ClientRequest clientRequest =
+                        (ClientRequest) requestTracker.get(requestParameters.getRequestReference().getUuid());
+                clientRequest.setJobId(jobId);
                 String nameBefore = Thread.currentThread().getName();
                 try {
                     Thread.currentThread().setName(nameBefore + " : WaitForCompletionForJobId: " + jobId);
@@ -4158,6 +4161,10 @@
                             participatingDatasetIds, numParticipatingNodes, numParticipatingPartitions));
                 }
                 jobId = JobUtils.runJob(hcc, jobSpec, jobFlags, false);
+                final IRequestTracker requestTracker = appCtx.getRequestTracker();
+                final ClientRequest clientRequest =
+                        (ClientRequest) requestTracker.get(requestParameters.getRequestReference().getUuid());
+                clientRequest.setJobId(jobId);
                 String nameBefore = Thread.currentThread().getName();
                 try {
                     Thread.currentThread().setName(nameBefore + " : WaitForCompletionForJobId: " + jobId);
@@ -4181,8 +4188,8 @@
     }
 
     public JobSpecification handleDeleteStatement(MetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc, Map<String, IAObject> stmtParams, IStatementRewriter stmtRewriter)
-            throws Exception {
+            IHyracksClientConnection hcc, Map<String, IAObject> stmtParams, IStatementRewriter stmtRewriter,
+            IRequestParameters requestParameters) throws Exception {
         DeleteStatement stmtDelete = (DeleteStatement) stmt;
         String datasetName = stmtDelete.getDatasetName();
         metadataProvider.validateDatabaseObjectName(stmtDelete.getNamespace(), datasetName, stmt.getSourceLocation());
@@ -4223,6 +4230,10 @@
                             participatingDatasetIds, numParticipatingNodes, numParticipatingPartitions));
                 }
                 jobId = JobUtils.runJob(hcc, jobSpec, jobFlags, false);
+                final IRequestTracker requestTracker = appCtx.getRequestTracker();
+                final ClientRequest clientRequest =
+                        (ClientRequest) requestTracker.get(requestParameters.getRequestReference().getUuid());
+                clientRequest.setJobId(jobId);
                 String nameBefore = Thread.currentThread().getName();
                 try {
                     Thread.currentThread().setName(nameBefore + " : WaitForCompletionForJobId: " + jobId);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp
index 523e8ed..11b2909 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp
@@ -24,4 +24,4 @@
 FROM Employee e
 GROUP BY e.deptno AS deptno GROUP AS g
 SELECT deptno AS deptno, STRICT_AVG(g[0].e.salary) AS avgpay,
-       (SELECT i.e.name AS name, i.e.salary AS salary FROM g AS i) AS workers;
+       (SELECT i.e.name AS name, i.e.salary AS salary FROM g AS i order by i.e.name) AS workers;
