diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java
index da5c8f6..cb437f0 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java
@@ -24,4 +24,8 @@
     public ComparisonException(String message) {
         super(message);
     }
+
+    public ComparisonException(String message, Throwable cause) {
+        super(message, cause);
+    }
 }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index b8524c0..e1d81a4 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -163,6 +163,7 @@
     private static final Pattern HANDLE_VARIABLE_PATTERN = Pattern.compile("handlevariable=(\\w+)");
     private static final Pattern RESULT_VARIABLE_PATTERN = Pattern.compile("resultvariable=(\\w+)");
     private static final Pattern COMPARE_UNORDERED_ARRAY_PATTERN = Pattern.compile("compareunorderedarray=(\\w+)");
+    private static final Pattern IGNORE_EXTRA_FIELDS_PATTERN = Pattern.compile("ignoreextrafields=(\\w+)");
     private static final Pattern BODY_REF_PATTERN = Pattern.compile("bodyref=(.*)", Pattern.MULTILINE);
     private static final Pattern MACRO_PARAM_PATTERN =
             Pattern.compile("macro (?<name>[\\w-$]+)=(?<value>.*)", Pattern.MULTILINE);
@@ -291,8 +292,7 @@
                 runScriptAndCompareWithResultRegexAdm(scriptFile, readerExpected, readerActual);
                 return;
             } else if (actualFile.toString().endsWith(".regexjson")) {
-                boolean compareUnorderedArray = statement != null && getCompareUnorderedArray(statement);
-                runScriptAndCompareWithResultRegexJson(scriptFile, readerExpected, readerActual, compareUnorderedArray);
+                runScriptAndCompareWithResultRegexJson(scriptFile, readerExpected, readerActual, statement);
                 return;
             } else if (actualFile.toString().endsWith(".unorderedtxt")) {
                 runScriptAndCompareWithResultUnorderedLinesText(scriptFile, readerExpected, readerActual);
@@ -546,24 +546,28 @@
     }
 
     private static void runScriptAndCompareWithResultRegexJson(File scriptFile, BufferedReader readerExpected,
-            BufferedReader readerActual, boolean compareUnorderedArray) throws ComparisonException, IOException {
+            BufferedReader readerActual, String statement) throws ComparisonException, IOException {
+
+        boolean compareUnorderedArray = statement != null && getCompareUnorderedArray(statement);
+        boolean ignoreExtraFields = statement != null && getIgnoreExtraFields(statement);
+
         JsonNode expectedJson, actualJson;
         try {
             expectedJson = SINGLE_JSON_NODE_READER.readTree(readerExpected);
         } catch (JsonProcessingException e) {
-            throw new ComparisonException("Invalid expected JSON for: " + scriptFile);
+            throw new ComparisonException("Invalid expected JSON for: " + scriptFile, e);
         }
         try {
             actualJson = SINGLE_JSON_NODE_READER.readTree(readerActual);
         } catch (JsonProcessingException e) {
-            throw new ComparisonException("Invalid actual JSON for: " + scriptFile);
+            throw new ComparisonException("Invalid actual JSON for: " + scriptFile, e);
         }
         if (expectedJson == null) {
             throw new ComparisonException("No expected result for: " + scriptFile);
         } else if (actualJson == null) {
             throw new ComparisonException("No actual result for: " + scriptFile);
         }
-        if (!TestHelper.equalJson(expectedJson, actualJson, compareUnorderedArray)) {
+        if (!TestHelper.equalJson(expectedJson, actualJson, compareUnorderedArray, ignoreExtraFields)) {
             throw new ComparisonException("Result for " + scriptFile + " didn't match the expected JSON"
                     + "\nexpected result:\n" + expectedJson + "\nactual result:\n" + actualJson);
         }
@@ -1756,6 +1760,11 @@
         return matcher.find() && Boolean.parseBoolean(matcher.group(1));
     }
 
+    protected static boolean getIgnoreExtraFields(String statement) {
+        final Matcher matcher = IGNORE_EXTRA_FIELDS_PATTERN.matcher(statement);
+        return matcher.find() && Boolean.parseBoolean(matcher.group(1));
+    }
+
     protected static String replaceVarRef(String statement, Map<String, Object> variableCtx) {
         String tmpStmt = statement;
         Matcher variableReferenceMatcher = VARIABLE_REF_PATTERN.matcher(tmpStmt);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java
index 137efdb..939acd3 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java
@@ -141,7 +141,8 @@
         return RequestParameters.deserializeParameterValues(RequestParameters.serializeParameterValues(stmtParams));
     }
 
-    public static boolean equalJson(JsonNode expectedJson, JsonNode actualJson, boolean compareUnorderedArray) {
+    public static boolean equalJson(JsonNode expectedJson, JsonNode actualJson, boolean compareUnorderedArray,
+            boolean ignoreExtraFields) {
         if (expectedJson == actualJson) {
             return true;
         }
@@ -167,13 +168,14 @@
             if (expectedArray.size() != actualArray.size()) {
                 return false;
             }
-            return compareUnorderedArray ? compareUnordered(expectedArray, actualArray)
-                    : compareOrdered(expectedArray, actualArray);
+            return compareUnorderedArray ? compareUnordered(expectedArray, actualArray, ignoreExtraFields)
+                    : compareOrdered(expectedArray, actualArray, ignoreExtraFields);
         } else if (expectedJson.isObject() && actualJson.isObject()) {
             // assumes no duplicates in field names
             ObjectNode expectedObject = (ObjectNode) expectedJson;
             ObjectNode actualObject = (ObjectNode) actualJson;
-            if (expectedObject.size() != actualObject.size()) {
+            if (!ignoreExtraFields && expectedObject.size() != actualObject.size()
+                    || (ignoreExtraFields && expectedObject.size() > actualObject.size())) {
                 return false;
             }
             Iterator<Map.Entry<String, JsonNode>> expectedFields = expectedObject.fields();
@@ -182,8 +184,8 @@
             while (expectedFields.hasNext()) {
                 expectedField = expectedFields.next();
                 actualFieldValue = actualObject.get(expectedField.getKey());
-                if (actualFieldValue == null
-                        || !equalJson(expectedField.getValue(), actualFieldValue, compareUnorderedArray)) {
+                if (actualFieldValue == null || !equalJson(expectedField.getValue(), actualFieldValue,
+                        compareUnorderedArray, ignoreExtraFields)) {
                     return false;
                 }
             }
@@ -195,13 +197,13 @@
         return expectedAsString.equals(actualAsString);
     }
 
-    private static boolean compareUnordered(ArrayNode expectedArray, ArrayNode actualArray) {
+    private static boolean compareUnordered(ArrayNode expectedArray, ArrayNode actualArray, boolean ignoreExtraFields) {
         BitSet alreadyMatched = new BitSet(actualArray.size());
         for (int i = 0; i < expectedArray.size(); i++) {
             boolean found = false;
             JsonNode expectedElement = expectedArray.get(i);
             for (int k = 0; k < actualArray.size(); k++) {
-                if (!alreadyMatched.get(k) && equalJson(expectedElement, actualArray.get(k), true)) {
+                if (!alreadyMatched.get(k) && equalJson(expectedElement, actualArray.get(k), true, ignoreExtraFields)) {
                     alreadyMatched.set(k);
                     found = true;
                     break;
@@ -214,9 +216,9 @@
         return true;
     }
 
-    private static boolean compareOrdered(ArrayNode expectedArray, ArrayNode actualArray) {
+    private static boolean compareOrdered(ArrayNode expectedArray, ArrayNode actualArray, boolean ignoreExtraFields) {
         for (int i = 0, size = expectedArray.size(); i < size; i++) {
-            if (!equalJson(expectedArray.get(i), actualArray.get(i), false)) {
+            if (!equalJson(expectedArray.get(i), actualArray.get(i), false, ignoreExtraFields)) {
                 return false;
             }
         }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java
index 0c13cdf..c03d23b 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java
@@ -164,7 +164,7 @@
                     ResultExtractor.extract(resultStream, StandardCharsets.UTF_8, TestCaseContext.OutputFormat.ADM));
         }
 
-        boolean eq = TestHelper.equalJson(sqlResult, sqlppResult, false);
+        boolean eq = TestHelper.equalJson(sqlResult, sqlppResult, false, false);
 
         File sqlResultFile = writeResult(sqlResult, testcaseId, "sql", testcaseDescription);
         File sqlppResultFile = writeResult(sqlppResult, testcaseId, "sqlpp", testcaseDescription);
