[NO ISSUE][EXT]: Centralize CSV properties in one place

Ext-ref: MB-65990
Change-Id: I53f4584487f8706447ef97bf816c7e908bba7d2a
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19556
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Hussain Towaileb <hussainht@gmail.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.03.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.03.update.sqlpp
index b9a6e9a..bd7403e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.03.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.03.update.sqlpp
@@ -39,5 +39,5 @@
     "quote":"'",
     "force-quote":"false",
     "escape":"\\",
-    "empty_field_as_null":"true"
+    "empty-string-as-null":"true"
 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.11.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.11.update.sqlpp
index 7e477be..b7028f5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.11.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/copy-to/csv/simple-csv/simple-csv.11.update.sqlpp
@@ -40,5 +40,5 @@
     "quote":"'",
     "force-quote":"false",
     "escape":"\\",
-    "empty_field_as_null":"true"
+    "empty-string-as-null":"true"
 }
\ No newline at end of file
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/CSVConstants.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/CSVConstants.java
new file mode 100644
index 0000000..74cc20f
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/CSVConstants.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.common.utils;
+
+public class CSVConstants {
+
+    private CSVConstants() {
+    }
+
+    public static final String KEY_HEADER = "header";
+    public static final String KEY_DELIMITER = "delimiter";
+    public static final String KEY_RECORD_DELIMITER = "record-delimiter";
+    public static final String KEY_QUOTE = "quote";
+    public static final String KEY_FORCE_QUOTE = "force-quote";
+    public static final String KEY_EMPTY_STRING_AS_NULL = "empty-string-as-null";
+    public static final String KEY_ESCAPE = "escape";
+
+    // a string representing the NULL value
+    public static final String KEY_NULL_STR = "null";
+}
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/converter/CSVWithRecordConverterFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/converter/CSVWithRecordConverterFactory.java
index 1961500..61b0f4e 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/converter/CSVWithRecordConverterFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/converter/CSVWithRecordConverterFactory.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.external.input.record.converter;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+
 import java.util.Arrays;
 import java.util.Map;
 
@@ -56,10 +58,9 @@
                     "Unspecified " + ExternalDataConstants.KEY_RECORD_INDEX + " for csv to csv with record converter");
         }
         recordIndex = Integer.parseInt(property);
-        property = configuration.get(ExternalDataConstants.KEY_DELIMITER);
+        property = configuration.get(KEY_DELIMITER);
         if (property == null) {
-            throw new AsterixException(
-                    "Unspecified " + ExternalDataConstants.KEY_DELIMITER + " for csv to csv with record converter");
+            throw new AsterixException("Unspecified " + KEY_DELIMITER + " for csv to csv with record converter");
         }
         if (property.trim().length() > 1) {
             throw new AsterixException("Large delimiter. The maximum delimiter size = 1");
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/QuotedLineRecordReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/QuotedLineRecordReader.java
index 2035a8e..5fe0589 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/QuotedLineRecordReader.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/QuotedLineRecordReader.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.external.input.record.reader.stream;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
 import static org.apache.asterix.external.util.ExternalDataConstants.BYTE_ORDER_MARK;
 import static org.apache.asterix.external.util.ExternalDataConstants.REC_ENDED_AT_EOF;
 
@@ -45,15 +46,15 @@
     private IWarningCollector warnings;
     private static final List<String> recordReaderFormats = Collections.unmodifiableList(
             Arrays.asList(ExternalDataConstants.FORMAT_DELIMITED_TEXT, ExternalDataConstants.FORMAT_CSV));
-    private static final String REQUIRED_CONFIGS = ExternalDataConstants.KEY_QUOTE;
+    private static final String REQUIRED_CONFIGS = KEY_QUOTE;
 
     @Override
     public void configure(IHyracksTaskContext ctx, AsterixInputStream inputStream, Map<String, String> config)
             throws HyracksDataException {
         super.configure(ctx, inputStream, config);
         this.warnings = ctx.getWarningCollector();
-        String quoteString = config.get(ExternalDataConstants.KEY_QUOTE);
-        ExternalDataUtils.validateChar(quoteString, ExternalDataConstants.KEY_QUOTE);
+        String quoteString = config.get(KEY_QUOTE);
+        ExternalDataUtils.validateChar(quoteString, KEY_QUOTE);
         this.quote = quoteString.charAt(0);
         this.escape = ExternalDataUtils.validateGetEscape(config, config.get(ExternalDataConstants.KEY_FORMAT));
     }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/DelimitedDataParserFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/DelimitedDataParserFactory.java
index bad742e..65cf552 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/DelimitedDataParserFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/DelimitedDataParserFactory.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.external.parser.factory;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_NULL_STR;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -53,7 +55,7 @@
         char escape =
                 ExternalDataUtils.validateGetEscape(configuration, configuration.get(ExternalDataConstants.KEY_FORMAT));
         boolean hasHeader = ExternalDataUtils.hasHeader(configuration);
-        String nullString = configuration.get(ExternalDataConstants.KEY_NULL_STR);
+        String nullString = configuration.get(KEY_NULL_STR);
         return new DelimitedDataParser(context, valueParserFactories, delimiter, quote, escape, hasHeader, recordType,
                 ExternalDataUtils.getDataSourceType(configuration).equals(DataSourceType.STREAM), nullString);
     }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
index f477b07..d399b07 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
@@ -73,10 +73,8 @@
     //Base64 encoded function call information
     public static final String KEY_HADOOP_ASTERIX_FUNCTION_CALL_INFORMATION = "org.apache.asterix.function.info";
     public static final String KEY_SOURCE_DATATYPE = "type-name";
-    public static final String KEY_DELIMITER = "delimiter";
     public static final String KEY_PARSER_FACTORY = "parser-factory";
     public static final String KEY_DATA_PARSER = "parser";
-    public static final String KEY_HEADER = "header";
     public static final String KEY_READER = "reader";
     public static final String KEY_READER_STREAM = "stream";
     public static final String KEY_TYPE_NAME = "type-name";
@@ -92,11 +90,6 @@
     public static final String PARQUET_DEFAULT_PAGE_SIZE = "8KB";
     public static final String KEY_INCLUDE = "include";
     public static final String KEY_EXCLUDE = "exclude";
-    public static final String KEY_QUOTE = "quote";
-    public static final String KEY_FORCE_QUOTE = "force-quote";
-    public static final String KEY_EMPTY_FIELD_AS_NULL = "empty_field_as_null";
-    public static final String KEY_RECORD_DELIMITER = "record-delimiter";
-    public static final String KEY_ESCAPE = "escape";
     public static final String KEY_PARSER = "parser";
     public static final String KEY_DATASET_RECORD = "dataset-record";
     public static final String KEY_RSS_URL = "url";
@@ -140,8 +133,6 @@
     public static final String KEY_HTTP_PROXY_PORT = "http-proxy-port";
     public static final String KEY_HTTP_PROXY_USER = "http-proxy-user";
     public static final String KEY_HTTP_PROXY_PASSWORD = "http-proxy-password";
-    // a string representing the NULL value
-    public static final String KEY_NULL_STR = "null";
     public static final String KEY_REDACT_WARNINGS = "redact-warnings";
     public static final String KEY_REQUESTED_FIELDS = "requested-fields";
     public static final String KEY_EXTERNAL_SCAN_BUFFER_SIZE = "external-scan-buffer-size";
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
index fac1199..0fed43f 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
@@ -19,14 +19,17 @@
 package org.apache.asterix.external.util;
 
 import static org.apache.asterix.common.metadata.MetadataConstants.DEFAULT_DATABASE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_EMPTY_STRING_AS_NULL;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_FORCE_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_HEADER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
 import static org.apache.asterix.external.util.ExternalDataConstants.DEFINITION_FIELD_NAME;
-import static org.apache.asterix.external.util.ExternalDataConstants.KEY_DELIMITER;
-import static org.apache.asterix.external.util.ExternalDataConstants.KEY_ESCAPE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_EXCLUDE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_EXTERNAL_SCAN_BUFFER_SIZE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_INCLUDE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_PATH;
-import static org.apache.asterix.external.util.ExternalDataConstants.KEY_QUOTE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_RECORD_END;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_RECORD_START;
 import static org.apache.asterix.external.util.aws.s3.S3AuthUtils.configureAwsS3HdfsJobConf;
@@ -281,7 +284,7 @@
     }
 
     public static boolean hasHeader(Map<String, String> configuration) {
-        return isTrue(configuration, ExternalDataConstants.KEY_HEADER);
+        return isTrue(configuration, KEY_HEADER);
     }
 
     public static boolean isTrue(Map<String, String> configuration, String key) {
@@ -628,7 +631,7 @@
             }
         }
         // normalize "header" parameter
-        putToLowerIfExists(configuration, ExternalDataConstants.KEY_HEADER);
+        putToLowerIfExists(configuration, KEY_HEADER);
         // normalize "redact-warnings" parameter
         putToLowerIfExists(configuration, ExternalDataConstants.KEY_REDACT_WARNINGS);
     }
@@ -641,22 +644,20 @@
      */
     public static void validate(Map<String, String> configuration) throws HyracksDataException {
         String format = configuration.get(ExternalDataConstants.KEY_FORMAT);
-        String header = configuration.get(ExternalDataConstants.KEY_HEADER);
-        String forceQuote = configuration.get(ExternalDataConstants.KEY_FORCE_QUOTE);
-        String emptyFieldAsNull = configuration.get(ExternalDataConstants.KEY_EMPTY_FIELD_AS_NULL);
+        String header = configuration.get(KEY_HEADER);
+        String forceQuote = configuration.get(KEY_FORCE_QUOTE);
+        String emptyFieldAsNull = configuration.get(KEY_EMPTY_STRING_AS_NULL);
         if (format != null && isHeaderRequiredFor(format) && header == null) {
-            throw new RuntimeDataException(ErrorCode.PARAMETERS_REQUIRED, ExternalDataConstants.KEY_HEADER);
+            throw new RuntimeDataException(ErrorCode.PARAMETERS_REQUIRED, KEY_HEADER);
         }
         if (header != null && !isBoolean(header)) {
-            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL, ExternalDataConstants.KEY_HEADER, header);
+            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL, KEY_HEADER, header);
         }
         if (forceQuote != null && !isBoolean(forceQuote)) {
-            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL, ExternalDataConstants.KEY_FORCE_QUOTE,
-                    forceQuote);
+            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL, KEY_FORCE_QUOTE, forceQuote);
         }
         if (emptyFieldAsNull != null && !isBoolean(emptyFieldAsNull)) {
-            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL,
-                    ExternalDataConstants.KEY_EMPTY_FIELD_AS_NULL, emptyFieldAsNull);
+            throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL, KEY_EMPTY_STRING_AS_NULL, emptyFieldAsNull);
         }
         char delimiter = validateGetDelimiter(configuration);
         validateGetQuote(configuration, delimiter);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/WriterValidationUtil.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/WriterValidationUtil.java
index f43a2a7..92afd40 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/WriterValidationUtil.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/WriterValidationUtil.java
@@ -22,6 +22,10 @@
 import static org.apache.asterix.common.exceptions.ErrorCode.MAXIMUM_VALUE_ALLOWED_FOR_PARAM;
 import static org.apache.asterix.common.exceptions.ErrorCode.MINIMUM_VALUE_ALLOWED_FOR_PARAM;
 import static org.apache.asterix.common.exceptions.ErrorCode.PARAMETERS_REQUIRED;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_RECORD_DELIMITER;
 import static org.apache.asterix.external.util.ExternalDataConstants.FORMAT_CSV;
 import static org.apache.asterix.external.util.ExternalDataConstants.FORMAT_JSON_LOWER_CASE;
 import static org.apache.asterix.external.util.ExternalDataConstants.FORMAT_PARQUET;
@@ -57,7 +61,7 @@
 
     private static void validateQuote(Map<String, String> configuration, SourceLocation sourceLocation)
             throws CompilationException {
-        String quote = configuration.get(ExternalDataConstants.KEY_QUOTE);
+        String quote = configuration.get(KEY_QUOTE);
         if (quote != null && !ExternalDataConstants.WRITER_SUPPORTED_QUOTES.contains(quote.toLowerCase())) {
             throw CompilationException.create(ErrorCode.CSV_INVALID_QUOTE, sourceLocation, quote,
                     ExternalDataConstants.WRITER_SUPPORTED_QUOTES.toString());
@@ -251,19 +255,19 @@
 
     private static void validateDelimiter(Map<String, String> configuration, SourceLocation sourceLocation)
             throws CompilationException {
-        String delimiter = configuration.get(ExternalDataConstants.KEY_DELIMITER);
+        String delimiter = configuration.get(KEY_DELIMITER);
         unitByteCondition(delimiter, sourceLocation, ErrorCode.INVALID_DELIMITER);
     }
 
     private static void validateEscape(Map<String, String> configuration, SourceLocation sourceLocation)
             throws CompilationException {
-        String escape = configuration.get(ExternalDataConstants.KEY_ESCAPE);
+        String escape = configuration.get(KEY_ESCAPE);
         unitByteCondition(escape, sourceLocation, ErrorCode.CSV_INVALID_ESCAPE);
     }
 
     private static void validateRecordDelimiter(Map<String, String> configuration, SourceLocation sourceLocation)
             throws CompilationException {
-        String recordDel = configuration.get(ExternalDataConstants.KEY_RECORD_DELIMITER);
+        String recordDel = configuration.get(KEY_RECORD_DELIMITER);
         unitByteCondition(recordDel, sourceLocation, ErrorCode.CSV_INVALID_FORCE_QUOTE);
     }
 
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
index 3eb1bd4..4f69873 100644
--- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.asterix.external.parser.test;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_HEADER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
+
 import java.io.File;
 import java.io.PrintStream;
 import java.nio.file.Files;
@@ -91,8 +94,8 @@
             LocalFSInputStream inputStream = new LocalFSInputStream(watcher);
             // create reader record reader
             Map<String, String> config = new HashMap<>();
-            config.put(ExternalDataConstants.KEY_HEADER, "true");
-            config.put(ExternalDataConstants.KEY_QUOTE, ExternalDataConstants.DEFAULT_QUOTE);
+            config.put(KEY_HEADER, "true");
+            config.put(KEY_QUOTE, ExternalDataConstants.DEFAULT_QUOTE);
             LineRecordReader lineReader = new LineRecordReader();
             lineReader.configure(ctx, inputStream, config);
             // create csv with json record reader
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/StreamRecordReaderProviderTest.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/StreamRecordReaderProviderTest.java
index 7267357..b51cdbe 100644
--- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/StreamRecordReaderProviderTest.java
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/StreamRecordReaderProviderTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.external.parser.test;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -46,7 +48,7 @@
         }
         config.clear();
         config.put(ExternalDataConstants.KEY_FORMAT, ExternalDataConstants.FORMAT_CSV);
-        config.put(ExternalDataConstants.KEY_QUOTE, "\u0000");
+        config.put(KEY_QUOTE, "\u0000");
         Assert.assertTrue(StreamRecordReaderProvider.getRecordReaderClazz(config) != null);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
index 05babc5..2f4d180 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinterFactory.java
@@ -18,13 +18,13 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.printers.csv;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_EMPTY_STRING_AS_NULL;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_FORCE_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_NULL_STR;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
 import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.DEFAULT_VALUES;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_DELIMITER;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_EMPTY_FIELD_AS_NULL;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_ESCAPE;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_FORCE_QUOTE;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_NULL;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_QUOTE;
 import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.getCharOrDefault;
 
 import java.io.PrintStream;
@@ -58,8 +58,9 @@
     private AObjectPrinterFactory(ARecordType itemType, Map<String, String> configuration) {
         this.itemType = itemType;
         this.configuration = configuration;
-        this.emptyFieldAsNull = Boolean.parseBoolean(configuration.get(KEY_EMPTY_FIELD_AS_NULL));
-        this.nullString = configuration.get(KEY_NULL) != null ? configuration.get(KEY_NULL) : DEFAULT_NULL_STRING;
+        this.emptyFieldAsNull = Boolean.parseBoolean(configuration.get(KEY_EMPTY_STRING_AS_NULL));
+        this.nullString =
+                configuration.get(KEY_NULL_STR) != null ? configuration.get(KEY_NULL_STR) : DEFAULT_NULL_STRING;
         this.forceQuote = Boolean.parseBoolean(configuration.get(KEY_FORCE_QUOTE));
         this.quote = getCharOrDefault(configuration.get(KEY_QUOTE), DEFAULT_VALUES.get(KEY_QUOTE));
         this.escape = getCharOrDefault(configuration.get(KEY_ESCAPE), DEFAULT_VALUES.get(KEY_ESCAPE));
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AStringPrinterFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AStringPrinterFactory.java
index 99b4c08..e18d450 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AStringPrinterFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AStringPrinterFactory.java
@@ -18,10 +18,10 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.printers.csv;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
 import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.DEFAULT_VALUES;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_DELIMITER;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_ESCAPE;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_QUOTE;
 import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.getCharOrDefault;
 
 import java.io.PrintStream;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/CSVUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/CSVUtils.java
index e06309e..37d4dbd 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/CSVUtils.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/CSVUtils.java
@@ -18,6 +18,15 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.printers.csv;
 
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_EMPTY_STRING_AS_NULL;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_FORCE_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_HEADER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_NULL_STR;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_RECORD_DELIMITER;
+
 import java.io.IOException;
 import java.io.PrintStream;
 import java.util.EnumSet;
@@ -37,14 +46,6 @@
 
     // Constants for the supported CSV parameters
     public static final String NONE = "none";
-    public static final String KEY_NULL = "null";
-    public static final String KEY_ESCAPE = "escape";
-    public static final String KEY_HEADER = "header";
-    public static final String KEY_DELIMITER = "delimiter";
-    public static final String KEY_RECORD_DELIMITER = "recordDelimiter";
-    public static final String KEY_FORCE_QUOTE = "forceQuote";
-    public static final String KEY_QUOTE = "quote";
-    public static final String KEY_EMPTY_FIELD_AS_NULL = "empty_field_as_null";
     public static final char DEFAULT_QUOTE = '"';
     private static final String DEFAULT_DELIMITER_VALUE = ",";
     private static final String DEFAULT_NULL_VALUE = "";
@@ -58,14 +59,14 @@
 
     static {
         DEFAULT_VALUES = new HashMap<>();
-        DEFAULT_VALUES.put(KEY_NULL, DEFAULT_NULL_VALUE);
+        DEFAULT_VALUES.put(KEY_NULL_STR, DEFAULT_NULL_VALUE);
         DEFAULT_VALUES.put(KEY_ESCAPE, DOUBLE_QUOTES);
         DEFAULT_VALUES.put(KEY_HEADER, FALSE);
         DEFAULT_VALUES.put(KEY_DELIMITER, DEFAULT_DELIMITER_VALUE);
         DEFAULT_VALUES.put(KEY_RECORD_DELIMITER, DEFAULT_RECORD_DELIMITER);
         DEFAULT_VALUES.put(KEY_FORCE_QUOTE, FALSE);
         DEFAULT_VALUES.put(KEY_QUOTE, DOUBLE_QUOTES);
-        DEFAULT_VALUES.put(KEY_EMPTY_FIELD_AS_NULL, FALSE);
+        DEFAULT_VALUES.put(KEY_EMPTY_STRING_AS_NULL, FALSE);
     }
 
     public static boolean isEmptyString(byte[] b, int s, int l) {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
index 054f9c7..4d28ce4 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/CSVPrinterFactoryProvider.java
@@ -18,11 +18,11 @@
  */
 package org.apache.asterix.formats.nontagged;
 
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_DELIMITER;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_ESCAPE;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_FORCE_QUOTE;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_NULL;
-import static org.apache.asterix.dataflow.data.nontagged.printers.csv.CSVUtils.KEY_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_DELIMITER;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_ESCAPE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_FORCE_QUOTE;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_NULL_STR;
+import static org.apache.asterix.common.utils.CSVConstants.KEY_QUOTE;
 
 import java.util.Collections;
 import java.util.Map;
@@ -99,7 +99,7 @@
                     return AInt64PrinterFactory.INSTANCE;
                 case MISSING:
                 case NULL:
-                    return ANullPrinterFactory.createInstance(configuration.get(KEY_NULL));
+                    return ANullPrinterFactory.createInstance(configuration.get(KEY_NULL_STR));
                 case BOOLEAN:
                     return ABooleanPrinterFactory.INSTANCE;
                 case FLOAT: