You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by al...@apache.org on 2022/11/02 16:43:40 UTC

[asterixdb] 01/08: [NO ISSUE][OTH] Redact field name

This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit d4e4a17bf9ae748d3d80a609db594edfd08b67c6
Author: Ali Alsuliman <al...@gmail.com>
AuthorDate: Wed Oct 12 21:11:52 2022 -0700

    [NO ISSUE][OTH] Redact field name
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    
    Change-Id: I360681ff4e1460561eb5b614ce16f7d6519096b2
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16023
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
    Reviewed-by: Michael Blow <mb...@apache.org>
    (cherry picked from commit a81d38112c3c8c114432c5039c0b752a1954dbdd)
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17243
    Reviewed-by: Murtadha Hubail <mh...@apache.org>
    Tested-by: Ali Alsuliman <al...@gmail.com>
---
 .../optimizer/rules/ConstantFoldingRule.java       |  7 +-
 .../optimizer/rules/RemoveDuplicateFieldsRule.java |  7 +-
 .../SqlppExpressionToPlanTranslator.java           |  4 +-
 .../asterix/translator/util/ValidateUtil.java      | 81 ++++++++++++++--------
 .../asterix/app/translator/QueryTranslator.java    | 33 +++++----
 .../src/test/resources/metadata/testsuite.xml      | 12 ++--
 .../src/test/resources/runtimets/testsuite.xml     |  6 +-
 .../test/resources/runtimets/testsuite_sqlpp.xml   |  2 +-
 .../external/library/java/base/JRecord.java        |  4 +-
 .../asterix/external/parser/ADMDataParser.java     |  5 +-
 .../external/parser/AbstractNestedDataParser.java  |  3 +-
 .../external/parser/DelimitedDataParser.java       |  4 +-
 .../asterix/external/parser/JSONDataParser.java    |  3 +-
 .../asterix/external/parser/TweetParser.java       |  3 +-
 .../utils/RTreeResourceFactoryProvider.java        |  5 +-
 .../apache/asterix/metadata/utils/TypeUtil.java    | 10 +--
 .../impl/ClosedRecordConstructorResultType.java    |  4 +-
 .../impl/OpenRecordConstructorResultType.java      |  4 +-
 .../typecomputer/impl/RecordMergeTypeComputer.java |  6 +-
 .../om/types/runtime/RuntimeRecordTypeInfo.java    |  4 +-
 20 files changed, 131 insertions(+), 76 deletions(-)

diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
index 6f359c5006..e04581bd9a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -31,7 +31,6 @@ import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.NoOpWarningCollector;
 import org.apache.asterix.common.exceptions.WarningCollector;
-import org.apache.asterix.common.exceptions.WarningUtil;
 import org.apache.asterix.dataflow.data.common.ExpressionTypeComputer;
 import org.apache.asterix.dataflow.data.nontagged.MissingWriterFactory;
 import org.apache.asterix.formats.nontagged.ADMPrinterFactoryProvider;
@@ -91,9 +90,11 @@ import org.apache.hyracks.algebricks.runtime.evaluators.EvaluatorContext;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
+import org.apache.hyracks.api.exceptions.Warning;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.VoidPointable;
 import org.apache.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -326,8 +327,8 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule {
                     if (isDuplicate) {
                         IWarningCollector warningCollector = optContext.getWarningCollector();
                         if (warningCollector.shouldWarn()) {
-                            warningCollector.warn(WarningUtil.forAsterix(fieldNameExpr.second.getSourceLocation(),
-                                    ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldName));
+                            warningCollector.warn(Warning.of(fieldNameExpr.second.getSourceLocation(),
+                                    ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, LogRedactionUtil.userData(fieldName)));
                         }
                         iterator.remove();
                         iterator.next();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveDuplicateFieldsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveDuplicateFieldsRule.java
index 0a3b9c4271..e924a4cef8 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveDuplicateFieldsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveDuplicateFieldsRule.java
@@ -26,7 +26,6 @@ import java.util.Set;
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
-import org.apache.asterix.common.exceptions.WarningUtil;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.typecomputer.impl.ClosedRecordConstructorResultType;
 import org.apache.asterix.om.typecomputer.impl.OpenRecordConstructorResultType;
@@ -41,6 +40,8 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCa
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
+import org.apache.hyracks.api.exceptions.Warning;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * <pre>
@@ -115,8 +116,8 @@ public class RemoveDuplicateFieldsRule implements IAlgebraicRewriteRule {
                 if (fieldName != null && !fieldNames.add(fieldName)) {
                     IWarningCollector warningCollector = context.getWarningCollector();
                     if (warningCollector.shouldWarn()) {
-                        warningCollector.warn(WarningUtil.forAsterix(fieldNameExpr.getSourceLocation(),
-                                ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldName));
+                        warningCollector.warn(Warning.of(fieldNameExpr.getSourceLocation(),
+                                ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, LogRedactionUtil.userData(fieldName)));
                     }
                     iterator.remove();
                     iterator.next();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 2cd402f0aa..17de313b04 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -132,6 +132,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperat
 import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
 import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
 import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * Each visit returns a pair of an operator and a variable. The variable
@@ -888,7 +889,8 @@ public class SqlppExpressionToPlanTranslator extends LangExpressionToPlanTransla
     private FieldBinding generateFieldBinding(String fieldName, Expression fieldValueExpr, Set<String> outFieldNames,
             SourceLocation sourceLoc) throws CompilationException {
         if (!outFieldNames.add(fieldName)) {
-            throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, sourceLoc, fieldName);
+            throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, sourceLoc,
+                    LogRedactionUtil.userData(fieldName));
         }
         return new FieldBinding(new LiteralExpr(new StringLiteral(fieldName)), fieldValueExpr);
     }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
index ffb1dd5198..62a2b44470 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
@@ -33,6 +33,7 @@ import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.utils.RecordUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * A util that can verify if a filter field, a list of partitioning expressions,
@@ -62,7 +63,7 @@ public class ValidateUtil {
         IAType fieldType = recordType.getSubFieldType(filterField);
         if (fieldType == null) {
             throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc,
-                    RecordUtil.toFullyQualifiedName(filterField));
+                    LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(filterField)));
         }
         switch (fieldType.getTypeTag()) {
             case TINYINT:
@@ -82,7 +83,7 @@ public class ValidateUtil {
                 break;
             case UNION:
                 throw new CompilationException(ErrorCode.COMPILATION_FILTER_CANNOT_BE_NULLABLE,
-                        RecordUtil.toFullyQualifiedName(filterField));
+                        LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(filterField)));
             default:
                 throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_FILTER_TYPE,
                         fieldType.getTypeTag().name());
@@ -124,7 +125,8 @@ public class ValidateUtil {
             IAType fieldType = recType.getSubFieldType(fieldName);
             if (fieldType == null) {
                 String unTypeField = fieldName.get(0) == null ? "" : fieldName.get(0);
-                throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc, unTypeField);
+                throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc,
+                        LogRedactionUtil.userData(unTypeField));
             }
             partitioningExprTypes.add(fieldType);
             ATypeTag pkTypeTag = fieldType.getTypeTag();
@@ -140,14 +142,14 @@ public class ValidateUtil {
                 IAType fieldType = partitioningExprTypes.get(i);
                 if (fieldType == null) {
                     throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc,
-                            RecordUtil.toFullyQualifiedName(partitioningExpr));
+                            LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(partitioningExpr)));
                 }
                 boolean nullable = KeyFieldTypeUtil.chooseSource(keySourceIndicators, i, recType, metaRecType)
                         .isSubFieldNullable(partitioningExpr);
                 if (nullable) {
                     // key field is nullable
                     throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE, sourceLoc,
-                            RecordUtil.toFullyQualifiedName(partitioningExpr));
+                            LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(partitioningExpr)));
                 }
                 switch (fieldType.getTypeTag()) {
                     case TINYINT:
@@ -167,7 +169,7 @@ public class ValidateUtil {
                         break;
                     case UNION:
                         throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE, sourceLoc,
-                                RecordUtil.toFullyQualifiedName(partitioningExpr));
+                                LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(partitioningExpr)));
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE, sourceLoc,
                                 fieldType.getTypeTag());
@@ -181,18 +183,18 @@ public class ValidateUtil {
      * Validates the key fields that will be used as keys of an index.
      *
      * @param recType
-     *            the record type
+     *         the record type
      * @param keyFieldNames
-     *            a map of key fields that will be validated
+     *         a map of key fields that will be validated
      * @param keyFieldTypes
-     *            a map of key types (if provided) that will be validated
+     *         a map of key types (if provided) that will be validated
      * @param indexType
-     *            the type of the index that its key fields is being validated
+     *         the type of the index that its key fields is being validated
      * @throws AlgebricksException
      */
     public static void validateKeyFields(ARecordType recType, ARecordType metaRecType, List<List<String>> keyFieldNames,
-            List<Integer> keySourceIndicators, List<IAType> keyFieldTypes, IndexType indexType)
-            throws AlgebricksException {
+            List<Integer> keySourceIndicators, List<IAType> keyFieldTypes, IndexType indexType,
+            SourceLocation sourceLoc) throws AlgebricksException {
         List<IAType> fieldTypes =
                 KeyFieldTypeUtil.getKeyTypes(recType, metaRecType, keyFieldNames, keySourceIndicators);
         int pos = 0;
@@ -202,16 +204,21 @@ public class ValidateUtil {
             if (fieldType == null) {
                 fieldType = keyFieldTypes.get(pos);
                 if (keyFieldTypes.get(pos) == BuiltinType.AMISSING) {
-                    throw new AsterixException("A field with this name  \"" + fieldName + "\" could not be found.");
+                    throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                            "A field with this name  \""
+                                    + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                    + "\" could not be found.");
                 }
             } else if (openFieldCompositeIdx) {
-                throw new AsterixException("A closed field \"" + fieldName
-                        + "\" could be only in a prefix part of the composite index, containing opened field.");
+                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                        "A closed field \"" + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                + "\" could be only in a prefix part of the composite index, containing opened field.");
             }
             if (keyFieldTypes.get(pos) != BuiltinType.AMISSING
                     && fieldType.getTypeTag() != keyFieldTypes.get(pos).getTypeTag()) {
-                throw new AsterixException(
-                        "A field \"" + fieldName + "\" is already defined with the type \"" + fieldType + "\"");
+                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                        "A field \"" + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName)) + "\" is "
+                                + "already defined with the type \"" + fieldType + "\"");
             }
             switch (indexType) {
                 case BTREE:
@@ -233,8 +240,11 @@ public class ValidateUtil {
                         case DAYTIMEDURATION:
                             break;
                         default:
-                            throw new AsterixException("The field \"" + fieldName + "\" which is of type "
-                                    + fieldType.getTypeTag() + " cannot be indexed using the BTree index.");
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
+                                            + " cannot be indexed using the BTree index.");
                     }
                     break;
                 case RTREE:
@@ -247,8 +257,11 @@ public class ValidateUtil {
                         case UNION:
                             break;
                         default:
-                            throw new AsterixException("The field \"" + fieldName + "\" which is of type "
-                                    + fieldType.getTypeTag() + " cannot be indexed using the RTree index.");
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
+                                            + " cannot be indexed using the RTree index.");
                     }
                     break;
                 case LENGTH_PARTITIONED_NGRAM_INVIX:
@@ -257,8 +270,10 @@ public class ValidateUtil {
                         case UNION:
                             break;
                         default:
-                            throw new AsterixException(
-                                    "The field \"" + fieldName + "\" which is of type " + fieldType.getTypeTag()
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
                                             + " cannot be indexed using the Length Partitioned N-Gram index.");
                     }
                     break;
@@ -270,8 +285,10 @@ public class ValidateUtil {
                         case UNION:
                             break;
                         default:
-                            throw new AsterixException(
-                                    "The field \"" + fieldName + "\" which is of type " + fieldType.getTypeTag()
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
                                             + " cannot be indexed using the Length Partitioned Keyword index.");
                     }
                     break;
@@ -281,8 +298,11 @@ public class ValidateUtil {
                         case UNION:
                             break;
                         default:
-                            throw new AsterixException("The field \"" + fieldName + "\" which is of type "
-                                    + fieldType.getTypeTag() + " cannot be indexed using the N-Gram index.");
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
+                                            + " cannot be indexed using the N-Gram index.");
                     }
                     break;
                 case SINGLE_PARTITION_WORD_INVIX:
@@ -293,8 +313,11 @@ public class ValidateUtil {
                         case UNION:
                             break;
                         default:
-                            throw new AsterixException("The field \"" + fieldName + "\" which is of type "
-                                    + fieldType.getTypeTag() + " cannot be indexed using the Keyword index.");
+                            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                    "The field '"
+                                            + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldName))
+                                            + "' which is of type " + fieldType.getTypeTag()
+                                            + " cannot be indexed using the Keyword index.");
                     }
                     break;
                 default:
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 1befe299e8..dbd75f7793 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
@@ -37,6 +37,7 @@ import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
+import java.util.stream.Collectors;
 
 import org.apache.asterix.active.ActivityState;
 import org.apache.asterix.active.EntityId;
@@ -163,6 +164,7 @@ import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.TypeSignature;
+import org.apache.asterix.om.utils.RecordUtil;
 import org.apache.asterix.transaction.management.service.transaction.DatasetIdFactory;
 import org.apache.asterix.translator.AbstractLangTranslator;
 import org.apache.asterix.translator.ClientRequest;
@@ -212,6 +214,7 @@ import org.apache.hyracks.api.result.ResultSetId;
 import org.apache.hyracks.control.cc.ClusterControllerService;
 import org.apache.hyracks.control.common.controllers.CCConfig;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicyFactory;
+import org.apache.hyracks.util.LogRedactionUtil;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -1005,7 +1008,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                     }
                     if (stmtCreateIndex.isEnforced() && !fieldExpr.second.isUnknownable()) {
                         throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL, sourceLoc,
-                                String.valueOf(fieldExpr.first));
+                                LogRedactionUtil.userData(String.valueOf(fieldExpr.first)));
                     }
                     // don't allow creating an enforced index on a closed-type field, fields that
                     // are part of schema.
@@ -1013,11 +1016,13 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                     if (stmtCreateIndex.isEnforced()
                             && subType.getSubFieldType(fieldExpr.first.subList(i, fieldExpr.first.size())) != null) {
                         throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD, sourceLoc,
-                                String.valueOf(fieldExpr.first));
+                                LogRedactionUtil.userData(String.valueOf(fieldExpr.first)));
                     }
                     if (!isOpen) {
-                        throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Typed index on \""
-                                + fieldExpr.first + "\" field could be created only for open datatype");
+                        throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                "Typed index on '"
+                                        + LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(fieldExpr.first))
+                                        + "' " + "field could be created only for open datatype");
                     }
                     if (stmtCreateIndex.hasMetaField()) {
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
@@ -1030,8 +1035,9 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                     overridesFieldTypes = true;
                 }
                 if (fieldType == null) {
-                    throw new CompilationException(ErrorCode.UNKNOWN_TYPE, sourceLoc, fieldExpr.second == null
-                            ? String.valueOf(fieldExpr.first) : String.valueOf(fieldExpr.second));
+                    throw new CompilationException(ErrorCode.UNKNOWN_TYPE, sourceLoc,
+                            fieldExpr.second == null ? LogRedactionUtil.userData(String.valueOf(fieldExpr.first))
+                                    : String.valueOf(fieldExpr.second));
                 }
 
                 // try to add the key & its source to the set of keys, if key couldn't be added,
@@ -1039,7 +1045,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                 if (!indexKeysSet
                         .add(new Pair<>(fieldExpr.first, stmtCreateIndex.getFieldSourceIndicators().get(keyIndex)))) {
                     throw new AsterixException(ErrorCode.INDEX_ILLEGAL_REPETITIVE_FIELD, sourceLoc,
-                            String.valueOf(fieldExpr.first));
+                            LogRedactionUtil.userData(String.valueOf(fieldExpr.first)));
                 }
 
                 indexFields.add(fieldExpr.first);
@@ -1166,10 +1172,13 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                     if (existingIndex.getKeyFieldNames().equals(index.getKeyFieldNames())
                             && !existingIndex.getKeyFieldTypes().equals(index.getKeyFieldTypes())
                             && existingIndex.isEnforced()) {
-                        throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Cannot create index "
-                                + index.getIndexName() + " , enforced index " + existingIndex.getIndexName()
-                                + " on field \"" + StringUtils.join(index.getKeyFieldNames(), ',')
-                                + "\" is already defined with type \"" + existingIndex.getKeyFieldTypes() + "\"");
+                        String fieldNames = index.getKeyFieldNames().stream().map(RecordUtil::toFullyQualifiedName)
+                                .collect(Collectors.joining(","));
+                        throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                                "Cannot create index " + index.getIndexName() + " , enforced index "
+                                        + existingIndex.getIndexName() + " on field(s) '"
+                                        + LogRedactionUtil.userData(fieldNames) + "' is already defined with type(s) '"
+                                        + StringUtils.join(existingIndex.getKeyFieldTypes(), ',') + "'");
                     }
                 }
             }
@@ -1340,7 +1349,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
             ARecordType aRecordType, ARecordType metaRecordType, List<List<String>> indexFields,
             List<IAType> indexFieldTypes) throws AlgebricksException {
         ValidateUtil.validateKeyFields(aRecordType, metaRecordType, indexFields, keySourceIndicators, indexFieldTypes,
-                stmtCreateIndex.getIndexType());
+                stmtCreateIndex.getIndexType(), stmtCreateIndex.getSourceLocation());
     }
 
     protected void handleCreateTypeStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
index db10dcb7c8..77e8afa677 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
@@ -434,37 +434,37 @@
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_1">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[loc]" which is of type point cannot be indexed using the BTree index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'loc' which is of type point cannot be indexed using the BTree index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_2">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[age]" which is of type integer cannot be indexed using the RTree index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'age' which is of type integer cannot be indexed using the RTree index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_3">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'loc' which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_4">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'loc' which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_5">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'loc' which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_6">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error>
+        <expected-error>ASX1079: Compilation error: The field 'loc' which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error>
       </compilation-unit>
     </test-case>
   </test-group>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
index cfb2e5dcc4..964d807e73 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -827,19 +827,19 @@
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-on-closed-type">
           <output-dir compare="Text">index-on-closed-type</output-dir>
-          <expected-error>Typed index on "[value]" field could be created only for open datatype</expected-error>
+          <expected-error>Compilation error: Typed index on 'value' field could be created only for open datatype</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-collision">
           <output-dir compare="Text">index-type-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[integer]"</expected-error>
+          <expected-error>Compilation error: Cannot create index testIdx2 , enforced index testIdx1 on field(s) 'value' is already defined with type(s) 'integer'</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-promotion-collision">
           <output-dir compare="Text">index-type-promotion-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[bigint]"</expected-error>
+          <expected-error>Compilation error: Cannot create index testIdx2 , enforced index testIdx1 on field(s) 'value' is already defined with type(s) 'bigint'</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 600dde8875..44f64ba5fd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -6541,7 +6541,7 @@
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-on-closed-type">
           <output-dir compare="Text">index-on-closed-type</output-dir>
-          <expected-error>Typed index on "[value]" field could be created only for open datatype</expected-error>
+          <expected-error>Typed index on 'value' field could be created only for open datatype</expected-error>
         </compilation-unit>
       </test-case>
     </test-group>
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/base/JRecord.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/base/JRecord.java
index 205e228fbc..ed41f7c8c0 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/base/JRecord.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/base/JRecord.java
@@ -37,6 +37,7 @@ import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public final class JRecord implements IJObject {
 
@@ -80,7 +81,8 @@ public final class JRecord implements IJObject {
             // check open part
             IJObject fieldValue = openFields.get(fieldName);
             if (fieldValue == null) {
-                throw new RuntimeDataException(ErrorCode.LIBRARY_JAVA_JOBJECTS_UNKNOWN_FIELD, fieldName);
+                throw new RuntimeDataException(ErrorCode.LIBRARY_JAVA_JOBJECTS_UNKNOWN_FIELD,
+                        LogRedactionUtil.userData(fieldName));
             }
             return fieldValue;
         }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
index 4a46717588..d75b84df5d 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
@@ -55,6 +55,7 @@ import org.apache.asterix.runtime.operators.file.adm.AdmLexer.TokenImage;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * Parser for ADM formatted data.
@@ -472,7 +473,7 @@ public class ADMDataParser extends AbstractDataParser implements IStreamDataPars
                         fieldId = recBuilder.getFieldId(fldName);
                         if ((fieldId < 0) && !recType.isOpen()) {
                             throw new ParseException(ErrorCode.PARSER_ADM_DATA_PARSER_EXTRA_FIELD_IN_CLOSED_RECORD,
-                                    fldName);
+                                    LogRedactionUtil.userData(fldName));
                         } else if ((fieldId < 0) && recType.isOpen()) {
                             parseString(tmpTokenImage.getBuffer(), tmpTokenImage.getBegin() + 1,
                                     tmpTokenImage.getLength() - 2, fieldNameBuffer.getDataOutput());
@@ -527,7 +528,7 @@ public class ADMDataParser extends AbstractDataParser implements IStreamDataPars
             final int nullableFieldId = checkOptionalConstraints(recType, nulls);
             if (nullableFieldId != -1) {
                 throw new ParseException(ErrorCode.PARSER_ADM_DATA_PARSER_FIELD_NOT_NULL,
-                        recType.getFieldNames()[nullableFieldId]);
+                        LogRedactionUtil.userData(recType.getFieldNames()[nullableFieldId]));
             }
         }
         recBuilder.write(out, true);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractNestedDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractNestedDataParser.java
index c6f605dcdc..67996a5631 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractNestedDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractNestedDataParser.java
@@ -35,6 +35,7 @@ import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
 import org.apache.asterix.om.utils.RecordUtil;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * Abstract class for nested formats (ADM, JSON, XML ... etc)
@@ -117,7 +118,7 @@ public abstract class AbstractNestedDataParser<T> extends AbstractDataParser {
         for (int i = 0; i < recordType.getFieldTypes().length; i++) {
             if (!nullBitmap.get(i) && !isMissableType(recordType.getFieldTypes()[i])) {
                 throw new RuntimeDataException(ErrorCode.PARSER_TWEET_PARSER_CLOSED_FIELD_NULL,
-                        recordType.getFieldNames()[i]);
+                        LogRedactionUtil.userData(recordType.getFieldNames()[i]));
             }
         }
     }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/DelimitedDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/DelimitedDataParser.java
index 60e6e775a6..94d640b711 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/DelimitedDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/DelimitedDataParser.java
@@ -52,6 +52,7 @@ import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.hyracks.dataflow.common.data.parsers.IValueParser;
 import org.apache.hyracks.dataflow.common.data.parsers.IValueParserFactory;
 import org.apache.hyracks.dataflow.std.file.FieldCursorForDelimitedDataParser;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public class DelimitedDataParser extends AbstractDataParser implements IStreamDataParser, IRecordDataParser<char[]> {
 
@@ -108,7 +109,8 @@ public class DelimitedDataParser extends AbstractDataParser implements IStreamDa
             fldIds[i] = recBuilder.getFieldId(name);
             if (fldIds[i] < 0) {
                 if (!recordType.isOpen()) {
-                    throw new RuntimeDataException(ErrorCode.PARSER_DELIMITED_ILLEGAL_FIELD, name, recordType);
+                    throw new RuntimeDataException(ErrorCode.PARSER_DELIMITED_ILLEGAL_FIELD,
+                            LogRedactionUtil.userData(name), recordType);
                 } else {
                     nameBuffers[i] = new ArrayBackedValueStorage();
                     str.setValue(name);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
index b2036c09c3..3fd3b1fa75 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
@@ -50,6 +50,7 @@ import org.apache.asterix.runtime.exceptions.UnsupportedTypeException;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.util.ExceptionUtils;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonParseException;
@@ -259,7 +260,7 @@ public class JSONDataParser extends AbstractNestedDataParser<ADMToken>
 
             if (!recordType.isOpen() && fieldIndex < 0) {
                 throw new RuntimeDataException(ErrorCode.PARSER_ADM_DATA_PARSER_EXTRA_FIELD_IN_CLOSED_RECORD,
-                        fieldName);
+                        LogRedactionUtil.userData(fieldName));
             }
             valueBuffer.reset();
             nextToken();
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
index 4726a503ce..1ac25bb18a 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/TweetParser.java
@@ -43,6 +43,7 @@ import org.apache.asterix.om.util.container.ListObjectPool;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.util.LogRedactionUtil;
 import org.apache.hyracks.util.string.UTF8StringWriter;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -200,7 +201,7 @@ public class TweetParser extends AbstractDataParser implements IRecordDataParser
                 if (obj.get(curFNames[iter1]).isNull() && !(curTypes[iter1] instanceof AUnionType)) {
                     if (curRecType.isClosedField(curFNames[iter1])) {
                         throw new RuntimeDataException(ErrorCode.PARSER_TWEET_PARSER_CLOSED_FIELD_NULL,
-                                curFNames[iter1]);
+                                LogRedactionUtil.userData(curFNames[iter1]));
                     } else {
                         continue;
                     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
index 2108a4cffe..9cebdc254f 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
@@ -37,7 +37,7 @@ import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.utils.NonTaggedFormatUtil;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.asterix.om.utils.RecordUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
@@ -57,6 +57,7 @@ import org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeWithAntiMatterLo
 import org.apache.hyracks.storage.am.rtree.frames.RTreePolicyType;
 import org.apache.hyracks.storage.common.IResourceFactory;
 import org.apache.hyracks.storage.common.IStorageManager;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public class RTreeResourceFactoryProvider implements IResourceFactoryProvider {
 
@@ -79,7 +80,7 @@ public class RTreeResourceFactoryProvider implements IResourceFactoryProvider {
                 index.getKeyFieldNames().get(0), recordType).first;
         if (spatialType == null) {
             throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND,
-                    StringUtils.join(index.getKeyFieldNames().get(0), '.'));
+                    LogRedactionUtil.userData(RecordUtil.toFullyQualifiedName(index.getKeyFieldNames().get(0))));
         }
         List<List<String>> primaryKeyFields = dataset.getPrimaryKeys();
         int numPrimaryKeys = primaryKeyFields.size();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
index 4c3ad73546..9e9b11c83e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
@@ -36,6 +36,7 @@ import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 /**
  * Provider utility methods for data types
@@ -124,8 +125,9 @@ public class TypeUtil {
                     if (enforcedFieldType != null && !ATypeHierarchy.canPromote(enforcedFieldType.getTypeTag(),
                             index.getKeyFieldTypes().get(i).getTypeTag())) {
                         throw new AsterixException(ErrorCode.COMPILATION_ERROR,
-                                "Cannot enforce field \"" + String.join(".", index.getKeyFieldNames().get(i))
-                                        + "\" to have type " + index.getKeyFieldTypes().get(i));
+                                "Cannot enforce field '"
+                                        + LogRedactionUtil.userData(String.join(".", index.getKeyFieldNames().get(i)))
+                                        + "' to have type " + index.getKeyFieldTypes().get(i));
                     }
                     if (enforcedFieldType == null) {
                         recordNameTypesMap.put(splits.get(splits.size() - 1),
@@ -208,8 +210,8 @@ public class TypeUtil {
         IAType actualType = TypeComputeUtils.getActualType(nestedRecordType);
         if (actualType.getTypeTag() != ATypeTag.OBJECT) {
             String fName = String.join(".", fieldName);
-            throw new AsterixException(ErrorCode.COMPILATION_ERROR,
-                    "Field accessor is not defined for \"" + fName + "\" of type " + actualType.getTypeTag());
+            throw new AsterixException(ErrorCode.COMPILATION_ERROR, "Field accessor is not defined for '"
+                    + LogRedactionUtil.userData(fName) + "' of type " + actualType.getTypeTag());
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
index 077e9b34dd..d3cb2d7151 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
@@ -38,6 +38,7 @@ import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
 import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public class ClosedRecordConstructorResultType implements IResultTypeComputer {
 
@@ -76,7 +77,8 @@ public class ClosedRecordConstructorResultType implements IResultTypeComputer {
             }
             for (int j = 0; j < i; j++) {
                 if (fieldName.equals(fieldNames[j])) {
-                    throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, f.getSourceLocation(), fieldName);
+                    throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, f.getSourceLocation(),
+                            LogRedactionUtil.userData(fieldName));
                 }
             }
             fieldTypes[i] = e2Type;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
index 6deb17c608..fb01764472 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
@@ -41,6 +41,7 @@ import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
 import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public class OpenRecordConstructorResultType implements IResultTypeComputer {
 
@@ -75,7 +76,8 @@ public class OpenRecordConstructorResultType implements IResultTypeComputer {
             String fieldName = ConstantExpressionUtil.getStringConstant(e1);
             if (fieldName != null && t2 != null && TypeHelper.isClosed(t2)) {
                 if (namesList.contains(fieldName)) {
-                    throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, f.getSourceLocation(), fieldName);
+                    throw new CompilationException(ErrorCode.DUPLICATE_FIELD_NAME, f.getSourceLocation(),
+                            LogRedactionUtil.userData(fieldName));
                 }
                 namesList.add(fieldName);
                 if (t2.getTypeTag() == ATypeTag.UNION) {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
index b1e4021ca3..9985a4cd90 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
@@ -40,6 +40,7 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvir
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
 import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.util.LogRedactionUtil;
 
 public class RecordMergeTypeComputer implements IResultTypeComputer {
 
@@ -111,7 +112,7 @@ public class RecordMergeTypeComputer implements IResultTypeComputer {
                     // If the ignore duplicates flag is not set, we throw a duplicate field exception
                     else {
                         throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME,
-                                f.getSourceLocation(), fieldNames[i]);
+                                f.getSourceLocation(), LogRedactionUtil.userData(fieldNames[i]));
                     }
                 }
 
@@ -144,7 +145,8 @@ public class RecordMergeTypeComputer implements IResultTypeComputer {
     private IAType mergedNestedType(String fieldName, IAType fieldType1, IAType fieldType0, SourceLocation sourceLoc)
             throws AlgebricksException {
         if (fieldType1.getTypeTag() != ATypeTag.OBJECT || fieldType0.getTypeTag() != ATypeTag.OBJECT) {
-            throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, sourceLoc, fieldName);
+            throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, sourceLoc,
+                    LogRedactionUtil.userData(fieldName));
         }
 
         ARecordType resultType = (ARecordType) fieldType0;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
index ccdfa0ed38..9d53ab3b96 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
@@ -32,6 +32,7 @@ import org.apache.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
 import org.apache.hyracks.data.std.accessors.UTF8StringBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
+import org.apache.hyracks.util.LogRedactionUtil;
 import org.apache.hyracks.util.string.UTF8StringUtil;
 import org.apache.hyracks.util.string.UTF8StringWriter;
 
@@ -100,7 +101,8 @@ public class RuntimeRecordTypeInfo {
                     int j = getFieldIndex(baaos.getByteArray(), serializedFieldNameOffsets[i],
                             UTF8StringUtil.getStringLength(baaos.getByteArray(), serializedFieldNameOffsets[i]));
                     if (j != i) {
-                        throw new RuntimeDataException(ErrorCode.DUPLICATE_FIELD_NAME, fieldNames[i]);
+                        throw new RuntimeDataException(ErrorCode.DUPLICATE_FIELD_NAME,
+                                LogRedactionUtil.userData(fieldNames[i]));
                     }
                 }
             } catch (IOException e) {