You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2020/06/17 01:42:02 UTC

[incubator-doris] branch master updated: [Enhancement] Replace N/A with NULL in ShowStmt result (#3851)

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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new ae7028b  [Enhancement] Replace N/A with NULL in ShowStmt result (#3851)
ae7028b is described below

commit ae7028bee4a9e6ca434d2493af9ebd386b6142ab
Author: lichaoyong <li...@gmail.com>
AuthorDate: Wed Jun 17 09:41:51 2020 +0800

    [Enhancement] Replace N/A with NULL in ShowStmt result (#3851)
---
 fe/src/main/java/org/apache/doris/alter/RollupJob.java  |  3 ++-
 .../main/java/org/apache/doris/alter/RollupJobV2.java   |  2 +-
 .../java/org/apache/doris/alter/SchemaChangeJob.java    | 17 +++++++++--------
 .../java/org/apache/doris/alter/SchemaChangeJobV2.java  |  2 +-
 .../java/org/apache/doris/analysis/DescribeStmt.java    |  3 ++-
 .../main/java/org/apache/doris/backup/Repository.java   | 13 +++++++------
 .../apache/doris/catalog/DynamicPartitionProperty.java  |  3 ++-
 .../java/org/apache/doris/catalog/MetadataViewer.java   |  5 +++--
 .../apache/doris/clone/DynamicPartitionScheduler.java   |  3 ++-
 .../java/org/apache/doris/clone/TabletSchedCtx.java     |  7 ++++---
 .../main/java/org/apache/doris/common/FeConstants.java  |  3 +++
 .../apache/doris/common/proc/IndexSchemaProcNode.java   |  3 ++-
 .../org/apache/doris/common/proc/TablesProcDir.java     |  7 ++++---
 .../org/apache/doris/common/proc/TabletsProcDir.java    |  9 +++++----
 .../apache/doris/common/util/DynamicPartitionUtil.java  |  3 ++-
 .../java/org/apache/doris/common/util/TimeUtils.java    |  3 ++-
 fe/src/main/java/org/apache/doris/load/EtlStatus.java   |  3 ++-
 fe/src/main/java/org/apache/doris/load/ExportMgr.java   |  3 ++-
 fe/src/main/java/org/apache/doris/load/Load.java        |  7 ++++---
 fe/src/main/java/org/apache/doris/load/LoadJob.java     |  3 ++-
 .../main/java/org/apache/doris/load/loadv2/LoadJob.java |  5 +++--
 .../java/org/apache/doris/mysql/privilege/PaloAuth.java | 13 +++++++------
 .../org/apache/doris/mysql/privilege/RoleManager.java   |  9 +++++----
 fe/src/main/java/org/apache/doris/qe/ShowExecutor.java  |  3 ++-
 fe/src/main/java/org/apache/doris/qe/StmtExecutor.java  |  3 ++-
 .../java/org/apache/doris/service/FrontendOptions.java  |  3 ++-
 fe/src/main/java/org/apache/doris/system/Backend.java   |  3 ++-
 .../org/apache/doris/common/proc/DbsProcDirTest.java    |  7 ++++---
 .../org/apache/doris/common/util/TimeUtilsTest.java     |  3 ++-
 .../test/java/org/apache/doris/qe/StmtExecutorTest.java |  4 ++--
 30 files changed, 92 insertions(+), 63 deletions(-)

diff --git a/fe/src/main/java/org/apache/doris/alter/RollupJob.java b/fe/src/main/java/org/apache/doris/alter/RollupJob.java
index 63f5a16..dde8a7b 100644
--- a/fe/src/main/java/org/apache/doris/alter/RollupJob.java
+++ b/fe/src/main/java/org/apache/doris/alter/RollupJob.java
@@ -33,6 +33,7 @@ import org.apache.doris.catalog.Tablet;
 import org.apache.doris.catalog.TabletInvertedIndex;
 import org.apache.doris.catalog.TabletMeta;
 import org.apache.doris.common.Config;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.io.Text;
@@ -1003,7 +1004,7 @@ public class RollupJob extends AlterJob {
             Preconditions.checkState(unfinishedReplicaNum <= totalReplicaNum);
             jobInfo.add(((totalReplicaNum - unfinishedReplicaNum) * 100 / totalReplicaNum) + "%");
         } else {
-            jobInfo.add("N/A");
+            jobInfo.add(FeConstants.null_string);
         }
         jobInfo.add(Config.alter_table_timeout_second);
 
diff --git a/fe/src/main/java/org/apache/doris/alter/RollupJobV2.java b/fe/src/main/java/org/apache/doris/alter/RollupJobV2.java
index e856a76..07e79bf 100644
--- a/fe/src/main/java/org/apache/doris/alter/RollupJobV2.java
+++ b/fe/src/main/java/org/apache/doris/alter/RollupJobV2.java
@@ -687,7 +687,7 @@ public class RollupJobV2 extends AlterJobV2 implements GsonPostProcessable {
         if (jobState == JobState.RUNNING && rollupBatchTask.getTaskNum() > 0) {
             info.add(rollupBatchTask.getFinishedTaskNum() + "/" + rollupBatchTask.getTaskNum());
         } else {
-            info.add("N/A");
+            info.add(FeConstants.null_string);
         }
         info.add(timeoutMs / 1000);
         infos.add(info);
diff --git a/fe/src/main/java/org/apache/doris/alter/SchemaChangeJob.java b/fe/src/main/java/org/apache/doris/alter/SchemaChangeJob.java
index da246b1..acdec62 100644
--- a/fe/src/main/java/org/apache/doris/alter/SchemaChangeJob.java
+++ b/fe/src/main/java/org/apache/doris/alter/SchemaChangeJob.java
@@ -33,6 +33,7 @@ import org.apache.doris.catalog.Replica.ReplicaState;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.Tablet;
 import org.apache.doris.common.Config;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.io.Text;
@@ -1102,14 +1103,14 @@ public class SchemaChangeJob extends AlterJob {
                 jobInfo.add(tbl.getName()); // table name
                 jobInfo.add(TimeUtils.longToTimeString(createTime));
                 jobInfo.add(TimeUtils.longToTimeString(finishedTime));
-                jobInfo.add("N/A"); // index name
-                jobInfo.add("N/A"); // index id
-                jobInfo.add("N/A"); // origin id
-                jobInfo.add("N/A"); // schema version
+                jobInfo.add(FeConstants.null_string); // index name
+                jobInfo.add(FeConstants.null_string); // index id
+                jobInfo.add(FeConstants.null_string); // origin id
+                jobInfo.add(FeConstants.null_string); // schema version
                 jobInfo.add(-1); // transaction id
                 jobInfo.add(state.name()); // job state
                 jobInfo.add(cancelMsg);
-                jobInfo.add("N/A"); // progress
+                jobInfo.add(FeConstants.null_string); // progress
                 jobInfo.add(Config.alter_table_timeout_second); // timeout
                 jobInfos.add(jobInfo);
                 return;
@@ -1168,7 +1169,7 @@ public class SchemaChangeJob extends AlterJob {
             jobInfo.add(tbl.getName());
             jobInfo.add(TimeUtils.longToTimeString(createTime));
             jobInfo.add(TimeUtils.longToTimeString(finishedTime));
-            jobInfo.add(tbl.getIndexNameById(indexId) == null ? "N/A" : tbl.getIndexNameById(indexId)); // index name
+            jobInfo.add(tbl.getIndexNameById(indexId) == null ? FeConstants.null_string : tbl.getIndexNameById(indexId)); // index name
             jobInfo.add(indexId);
             jobInfo.add(indexId); // origin index id
             // index schema version and schema hash
@@ -1177,9 +1178,9 @@ public class SchemaChangeJob extends AlterJob {
             jobInfo.add(state.name()); // job state
             jobInfo.add(cancelMsg);
             if (state == JobState.RUNNING) {
-                jobInfo.add(indexProgress.get(indexId) == null ? "N/A" : indexProgress.get(indexId)); // progress
+                jobInfo.add(indexProgress.get(indexId) == null ? FeConstants.null_string : indexProgress.get(indexId)); // progress
             } else {
-                jobInfo.add("N/A");
+                jobInfo.add(FeConstants.null_string);
             }
             jobInfo.add(Config.alter_table_timeout_second);
 
diff --git a/fe/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java b/fe/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
index bdede94..db49eee 100644
--- a/fe/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
+++ b/fe/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
@@ -787,7 +787,7 @@ public class SchemaChangeJobV2 extends AlterJobV2 {
     @Override
     protected void getInfo(List<List<Comparable>> infos) {
         // calc progress first. all index share the same process
-        String progress = "N/A";
+        String progress = FeConstants.null_string;
         if (jobState == JobState.RUNNING && schemaChangeBatchTask.getTaskNum() > 0) {
             progress = schemaChangeBatchTask.getFinishedTaskNum() + "/" + schemaChangeBatchTask.getTaskNum();
         }
diff --git a/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java b/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java
index 368a7c7..bf7cfac 100644
--- a/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java
+++ b/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java
@@ -29,6 +29,7 @@ import org.apache.doris.catalog.Table.TableType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.proc.ProcNodeInterface;
 import org.apache.doris.common.proc.ProcResult;
@@ -175,7 +176,7 @@ public class DescribeStmt extends ShowStmt {
                                                              column.isAllowNull() ? "Yes" : "No",
                                                              ((Boolean) column.isKey()).toString(),
                                                              column.getDefaultValue() == null
-                                                                     ? "N/A" : column.getDefaultValue(),
+                                                                     ? FeConstants.null_string : column.getDefaultValue(),
                                                              extraStr);
 
                             if (j == 0) {
diff --git a/fe/src/main/java/org/apache/doris/backup/Repository.java b/fe/src/main/java/org/apache/doris/backup/Repository.java
index d6ff2ae..a624f5d 100644
--- a/fe/src/main/java/org/apache/doris/backup/Repository.java
+++ b/fe/src/main/java/org/apache/doris/backup/Repository.java
@@ -21,6 +21,7 @@ import org.apache.doris.backup.Status.ErrCode;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.FsBroker;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
@@ -535,7 +536,7 @@ public class Repository implements Writable {
         info.add(String.valueOf(isReadOnly));
         info.add(location);
         info.add(storage.getBrokerName());
-        info.add(errMsg == null ? "N/A" : errMsg);
+        info.add(errMsg == null ? FeConstants.null_string : errMsg);
         return info;
     }
 
@@ -575,7 +576,7 @@ public class Repository implements Writable {
             Status st = storage.list(infoFilePath + "*", results);
             if (!st.ok()) {
                 info.add(snapshotName);
-                info.add("N/A");
+                info.add(FeConstants.null_string);
                 info.add("ERROR: Failed to get info: " + st.getErrMsg());
             } else {
                 info.add(snapshotName);
@@ -604,8 +605,8 @@ public class Repository implements Writable {
                 if (!st.ok()) {
                     info.add(snapshotName);
                     info.add(timestamp);
-                    info.add("N/A");
-                    info.add("N/A");
+                    info.add(FeConstants.null_string);
+                    info.add(FeConstants.null_string);
                     info.add("Failed to get info: " + st.getErrMsg());
                 } else {
                     try {
@@ -618,8 +619,8 @@ public class Repository implements Writable {
                     } catch (IOException e) {
                         info.add(snapshotName);
                         info.add(timestamp);
-                        info.add("N/A");
-                        info.add("N/A");
+                        info.add(FeConstants.null_string);
+                        info.add(FeConstants.null_string);
                         info.add("Failed to read info from local file: " + e.getMessage());
                     }
                 }
diff --git a/fe/src/main/java/org/apache/doris/catalog/DynamicPartitionProperty.java b/fe/src/main/java/org/apache/doris/catalog/DynamicPartitionProperty.java
index 0eca48c..3c898ed 100644
--- a/fe/src/main/java/org/apache/doris/catalog/DynamicPartitionProperty.java
+++ b/fe/src/main/java/org/apache/doris/catalog/DynamicPartitionProperty.java
@@ -18,6 +18,7 @@
 package org.apache.doris.catalog;
 
 import org.apache.doris.analysis.TimestampArithmeticExpr.TimeUnit;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.util.DynamicPartitionUtil.StartOfDate;
 import org.apache.doris.common.util.TimeUtils;
 
@@ -124,7 +125,7 @@ public class DynamicPartitionProperty {
         } else if (getTimeUnit().equalsIgnoreCase(TimeUnit.MONTH.toString())) {
             return startOfMonth.toDisplayInfo();
         } else {
-            return "N/A";
+            return FeConstants.null_string;
         }
     }
 
diff --git a/fe/src/main/java/org/apache/doris/catalog/MetadataViewer.java b/fe/src/main/java/org/apache/doris/catalog/MetadataViewer.java
index 0e5ada8..de9eddf 100644
--- a/fe/src/main/java/org/apache/doris/catalog/MetadataViewer.java
+++ b/fe/src/main/java/org/apache/doris/catalog/MetadataViewer.java
@@ -25,6 +25,7 @@ import org.apache.doris.catalog.MaterializedIndex.IndexExtState;
 import org.apache.doris.catalog.Replica.ReplicaStatus;
 import org.apache.doris.catalog.Table.TableType;
 import org.apache.doris.common.DdlException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.system.Backend;
 import org.apache.doris.system.SystemInfoService;
 
@@ -136,8 +137,8 @@ public class MetadataViewer {
                             row.add("-1");
                             row.add("-1");
                             row.add("-1");
-                            row.add("N/A");
-                            row.add("N/A");
+                            row.add(FeConstants.null_string);
+                            row.add(FeConstants.null_string);
                             row.add(ReplicaStatus.MISSING.name());
                             result.add(row);
                         }
diff --git a/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java b/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
index d10f543..a40d936 100644
--- a/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
+++ b/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
@@ -36,6 +36,7 @@ import org.apache.doris.catalog.Table;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.util.DynamicPartitionUtil;
 import org.apache.doris.common.util.MasterDaemon;
@@ -72,7 +73,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
     public static final String CREATE_PARTITION_MSG = "createPartitionMsg";
     public static final String DROP_PARTITION_MSG = "dropPartitionMsg";
 
-    private final String DEFAULT_RUNTIME_VALUE = "N/A";
+    private final String DEFAULT_RUNTIME_VALUE = FeConstants.null_string;
 
     private Map<String, Map<String, String>> runtimeInfos = Maps.newConcurrentMap();
     private Set<Pair<Long, Long>> dynamicPartitionTableInfo = Sets.newConcurrentHashSet();
diff --git a/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java b/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java
index 75ddbbc..059306f 100644
--- a/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java
+++ b/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java
@@ -28,6 +28,7 @@ import org.apache.doris.catalog.Tablet;
 import org.apache.doris.catalog.Tablet.TabletStatus;
 import org.apache.doris.clone.SchedException.Status;
 import org.apache.doris.clone.TabletScheduler.PathSlot;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.persist.ReplicaPersistInfo;
@@ -969,8 +970,8 @@ public class TabletSchedCtx implements Comparable<TabletSchedCtx> {
         List<String> result = Lists.newArrayList();
         result.add(String.valueOf(tabletId));
         result.add(type.name());
-        result.add(storageMedium == null ? "N/A" : storageMedium.name());
-        result.add(tabletStatus == null ? "N/A" : tabletStatus.name());
+        result.add(storageMedium == null ? FeConstants.null_string : storageMedium.name());
+        result.add(tabletStatus == null ? FeConstants.null_string : tabletStatus.name());
         result.add(state.name());
         result.add(origPriority.name());
         result.add(dynamicPriority.name());
@@ -983,7 +984,7 @@ public class TabletSchedCtx implements Comparable<TabletSchedCtx> {
         result.add(TimeUtils.longToTimeString(lastSchedTime));
         result.add(TimeUtils.longToTimeString(lastVisitedTime));
         result.add(TimeUtils.longToTimeString(finishedTime));
-        result.add(copyTimeMs > 0 ? String.valueOf(copySize / copyTimeMs / 1000.0) : "N/A");
+        result.add(copyTimeMs > 0 ? String.valueOf(copySize / copyTimeMs / 1000.0) : FeConstants.null_string);
         result.add(String.valueOf(failedSchedCounter));
         result.add(String.valueOf(failedRunningCounter));
         result.add(TimeUtils.longToTimeString(lastAdjustPrioTime));
diff --git a/fe/src/main/java/org/apache/doris/common/FeConstants.java b/fe/src/main/java/org/apache/doris/common/FeConstants.java
index 86ae36b..7542ad6 100644
--- a/fe/src/main/java/org/apache/doris/common/FeConstants.java
+++ b/fe/src/main/java/org/apache/doris/common/FeConstants.java
@@ -51,4 +51,7 @@ public class FeConstants {
     // general model
     // Current meta data version. Use this version to write journals and image
     public static int meta_version = FeMetaVersion.VERSION_CURRENT;
+
+    // use \N to indicate NULL
+    public static String null_string = "\\N";
 }
diff --git a/fe/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java b/fe/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
index 570ccc4..73b1f79 100644
--- a/fe/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
+++ b/fe/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
@@ -19,6 +19,7 @@ package org.apache.doris.common.proc;
 
 import org.apache.doris.catalog.Column;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -71,7 +72,7 @@ public class IndexSchemaProcNode implements ProcNodeInterface {
                                                  column.isAllowNull() ? "Yes" : "No",
                                                  ((Boolean) column.isKey()).toString(),
                                                  column.getDefaultValue() == null
-                                                         ? "N/A" : column.getDefaultValue(),
+                                                         ? FeConstants.null_string : column.getDefaultValue(),
                                                  extraStr);
             result.addRow(rowList);
         }
diff --git a/fe/src/main/java/org/apache/doris/common/proc/TablesProcDir.java b/fe/src/main/java/org/apache/doris/common/proc/TablesProcDir.java
index 68f0c53..415d102 100644
--- a/fe/src/main/java/org/apache/doris/common/proc/TablesProcDir.java
+++ b/fe/src/main/java/org/apache/doris/common/proc/TablesProcDir.java
@@ -25,6 +25,7 @@ import org.apache.doris.catalog.RangePartitionInfo;
 import org.apache.doris.catalog.Table.TableType;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.TimeUtils;
 
@@ -98,7 +99,7 @@ public class TablesProcDir implements ProcDirInterface {
 
                 int partitionNum = 1;
                 long replicaCount = 0;
-                String partitionKey = "N/A";
+                String partitionKey = FeConstants.null_string;
                 if (table.getType() == TableType.OLAP) {
                     OlapTable olapTable = (OlapTable) table;
                     if (olapTable.getPartitionInfo().getType() == PartitionType.RANGE) {
@@ -125,10 +126,10 @@ public class TablesProcDir implements ProcDirInterface {
                 } else {
                     tableInfo.add(table.getId());
                     tableInfo.add(table.getName());
-                    tableInfo.add("N/A");
+                    tableInfo.add(FeConstants.null_string);
                     tableInfo.add(partitionKey);
                     tableInfo.add(partitionNum);
-                    tableInfo.add("N/A");
+                    tableInfo.add(FeConstants.null_string);
                     tableInfo.add(table.getType());
                 }
 
diff --git a/fe/src/main/java/org/apache/doris/common/proc/TabletsProcDir.java b/fe/src/main/java/org/apache/doris/common/proc/TabletsProcDir.java
index 3c4bd74..eb7731a 100644
--- a/fe/src/main/java/org/apache/doris/common/proc/TabletsProcDir.java
+++ b/fe/src/main/java/org/apache/doris/common/proc/TabletsProcDir.java
@@ -24,6 +24,7 @@ import org.apache.doris.catalog.Replica;
 import org.apache.doris.catalog.Tablet;
 import org.apache.doris.catalog.TabletInvertedIndex;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.system.Backend;
@@ -75,7 +76,7 @@ public class TabletsProcDir implements ProcDirInterface {
                     tabletInfo.add(-1); // replica id
                     tabletInfo.add(-1); // backend id
                     tabletInfo.add(-1); // schema hash
-                    tabletInfo.add("N/A"); // host name
+                    tabletInfo.add(FeConstants.null_string); // host name
                     tabletInfo.add(-1); // version
                     tabletInfo.add(-1); // version hash
                     tabletInfo.add(-1); // lst success version
@@ -85,14 +86,14 @@ public class TabletsProcDir implements ProcDirInterface {
                     tabletInfo.add(-1); // lst failed time
                     tabletInfo.add(-1); // data size
                     tabletInfo.add(-1); // row count
-                    tabletInfo.add("N/A"); // state
+                    tabletInfo.add(FeConstants.null_string); // state
                     tabletInfo.add(-1); // lst consistency check time
                     tabletInfo.add(-1); // check version
                     tabletInfo.add(-1); // check version hash
                     tabletInfo.add(-1); // version count
                     tabletInfo.add(-1); // path hash
-                    tabletInfo.add("N/A"); // meta url
-                    tabletInfo.add("N/A"); // compaction status
+                    tabletInfo.add(FeConstants.null_string); // meta url
+                    tabletInfo.add(FeConstants.null_string); // compaction status
 
                     tabletInfos.add(tabletInfo);
                 } else {
diff --git a/fe/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java b/fe/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
index 0ba6544..9b7ab36 100644
--- a/fe/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
+++ b/fe/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
@@ -34,6 +34,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeNameFormat;
 
 import com.google.common.base.Preconditions;
@@ -489,7 +490,7 @@ public class DynamicPartitionUtil {
             } else if (isStartOfYear()) {
                 return Month.of(month) + " " + Util.ordinal(day);
             } else {
-                return "N/A";
+                return FeConstants.null_string;
             }
         }
 
diff --git a/fe/src/main/java/org/apache/doris/common/util/TimeUtils.java b/fe/src/main/java/org/apache/doris/common/util/TimeUtils.java
index 8678458..267355c 100644
--- a/fe/src/main/java/org/apache/doris/common/util/TimeUtils.java
+++ b/fe/src/main/java/org/apache/doris/common/util/TimeUtils.java
@@ -23,6 +23,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.VariableMgr;
 
@@ -138,7 +139,7 @@ public class TimeUtils {
 
     public static String longToTimeString(long timeStamp, SimpleDateFormat dateFormat) {
         if (timeStamp <= 0L) {
-            return "N/A";
+            return FeConstants.null_string;
         }
         return dateFormat.format(new Date(timeStamp));
     }
diff --git a/fe/src/main/java/org/apache/doris/load/EtlStatus.java b/fe/src/main/java/org/apache/doris/load/EtlStatus.java
index c7ffd39..cdb3552 100644
--- a/fe/src/main/java/org/apache/doris/load/EtlStatus.java
+++ b/fe/src/main/java/org/apache/doris/load/EtlStatus.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.load;
 
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.thrift.TEtlState;
@@ -31,7 +32,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 public class EtlStatus implements Writable {
-    public static final String DEFAULT_TRACKING_URL = "N/A";
+    public static final String DEFAULT_TRACKING_URL = FeConstants.null_string;
     
     private TEtlState state;
     private String trackingUrl;
diff --git a/fe/src/main/java/org/apache/doris/load/ExportMgr.java b/fe/src/main/java/org/apache/doris/load/ExportMgr.java
index b90a4a8..533e22f 100644
--- a/fe/src/main/java/org/apache/doris/load/ExportMgr.java
+++ b/fe/src/main/java/org/apache/doris/load/ExportMgr.java
@@ -22,6 +22,7 @@ import org.apache.doris.analysis.TableName;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.common.Config;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.OrderByPair;
 import org.apache.doris.common.util.TimeUtils;
@@ -204,7 +205,7 @@ public class ExportMgr {
                     ExportFailMsg failMsg = job.getFailMsg();
                     jobInfo.add("type:" + failMsg.getCancelType() + "; msg:" + failMsg.getMsg());
                 } else {
-                    jobInfo.add("N/A");
+                    jobInfo.add(FeConstants.null_string);
                 }
 
                 exportJobInfos.add(jobInfo);
diff --git a/fe/src/main/java/org/apache/doris/load/Load.java b/fe/src/main/java/org/apache/doris/load/Load.java
index ccbc23a..197b809 100644
--- a/fe/src/main/java/org/apache/doris/load/Load.java
+++ b/fe/src/main/java/org/apache/doris/load/Load.java
@@ -70,6 +70,7 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.FeNameFormat;
 import org.apache.doris.common.LabelAlreadyUsedException;
@@ -1887,7 +1888,7 @@ public class Load {
                 // etl info
                 EtlStatus status = loadJob.getEtlJobStatus();
                 if (status == null || status.getState() == TEtlState.CANCELLED) {
-                    jobInfo.add("N/A");
+                    jobInfo.add(FeConstants.null_string);
                 } else {
                     Map<String, String> counters = status.getCounters();
                     List<String> info = Lists.newArrayList();
@@ -1901,7 +1902,7 @@ public class Load {
                         }
                     } // end for counters
                     if (info.isEmpty()) {
-                        jobInfo.add("N/A");
+                        jobInfo.add(FeConstants.null_string);
                     } else {
                         jobInfo.add(StringUtils.join(info, "; "));
                     }
@@ -1917,7 +1918,7 @@ public class Load {
                     FailMsg failMsg = loadJob.getFailMsg();
                     jobInfo.add("type:" + failMsg.getCancelType() + "; msg:" + failMsg.getMsg());
                 } else {
-                    jobInfo.add("N/A");
+                    jobInfo.add(FeConstants.null_string);
                 }
 
                 // create time
diff --git a/fe/src/main/java/org/apache/doris/load/LoadJob.java b/fe/src/main/java/org/apache/doris/load/LoadJob.java
index ef0e26c..d56b9cc 100644
--- a/fe/src/main/java/org/apache/doris/load/LoadJob.java
+++ b/fe/src/main/java/org/apache/doris/load/LoadJob.java
@@ -28,6 +28,7 @@ import org.apache.doris.analysis.StringLiteral;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Replica;
 import org.apache.doris.common.Config;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
@@ -435,7 +436,7 @@ public class LoadJob implements Writable {
         if (etlJobType == EtlJobType.HADOOP) {
             return ((HadoopEtlJobInfo) etlJobInfo).getCluster();
         }
-        return "N/A";
+        return FeConstants.null_string;
     }
 
     public DppConfig getHadoopDppConfig() {
diff --git a/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java b/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
index 3afadb7..3b0bb52 100644
--- a/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
+++ b/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
@@ -28,6 +28,7 @@ import org.apache.doris.common.DuplicatedRequestException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.FeMetaVersion;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.UserException;
@@ -715,7 +716,7 @@ public abstract class LoadJob extends AbstractTxnStateChangeCallback implements
 
             // etl info
             if (loadingStatus.getCounters().size() == 0) {
-                jobInfo.add("N/A");
+                jobInfo.add(FeConstants.null_string);
             } else {
                 jobInfo.add(Joiner.on("; ").withKeyValueSeparator("=").join(loadingStatus.getCounters()));
             }
@@ -726,7 +727,7 @@ public abstract class LoadJob extends AbstractTxnStateChangeCallback implements
 
             // error msg
             if (failMsg == null) {
-                jobInfo.add("N/A");
+                jobInfo.add(FeConstants.null_string);
             } else {
                 jobInfo.add("type:" + failMsg.getCancelType() + "; msg:" + failMsg.getMsg());
             }
diff --git a/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java b/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
index 2565b66..19610c7 100644
--- a/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
+++ b/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
@@ -35,6 +35,7 @@ import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.load.DppConfig;
@@ -1117,14 +1118,14 @@ public class PaloAuth implements Writable {
                 // This may happen when we grant non global privs to a non exist user via GRANT stmt.
                 LOG.warn("user identity does not have global priv entry: {}", userIdent);
                 userAuthInfo.add(userIdent.toString());
-                userAuthInfo.add("N/A");
-                userAuthInfo.add("N/A");
+                userAuthInfo.add(FeConstants.null_string);
+                userAuthInfo.add(FeConstants.null_string);
             } else {
                 // this is a domain user identity and fall in here, which means this user identity does not
                 // have global priv, we need to check user property to see if it has password.
                 userAuthInfo.add(userIdent.toString());
                 userAuthInfo.add(propertyMgr.doesUserHasPassword(userIdent) ? "No" : "Yes");
-                userAuthInfo.add("N/A");
+                userAuthInfo.add(FeConstants.null_string);
             }
         }
 
@@ -1139,7 +1140,7 @@ public class PaloAuth implements Writable {
                     + " (" + entry.isSetByDomainResolver() + ")");
         }
         if (dbPrivs.isEmpty()) {
-            userAuthInfo.add("N/A");
+            userAuthInfo.add(FeConstants.null_string);
         } else {
             userAuthInfo.add(Joiner.on("; ").join(dbPrivs));
         }
@@ -1156,7 +1157,7 @@ public class PaloAuth implements Writable {
                     + " (" + entry.isSetByDomainResolver() + ")");
         }
         if (tblPrivs.isEmpty()) {
-            userAuthInfo.add("N/A");
+            userAuthInfo.add(FeConstants.null_string);
         } else {
             userAuthInfo.add(Joiner.on("; ").join(tblPrivs));
         }
@@ -1172,7 +1173,7 @@ public class PaloAuth implements Writable {
                                       + " (" + entry.isSetByDomainResolver() + ")");
         }
         if (resourcePrivs.isEmpty()) {
-            userAuthInfo.add("N/A");
+            userAuthInfo.add(FeConstants.null_string);
         } else {
             userAuthInfo.add(Joiner.on("; ").join(resourcePrivs));
         }
diff --git a/fe/src/main/java/org/apache/doris/mysql/privilege/RoleManager.java b/fe/src/main/java/org/apache/doris/mysql/privilege/RoleManager.java
index 54f8767..ab486b4 100644
--- a/fe/src/main/java/org/apache/doris/mysql/privilege/RoleManager.java
+++ b/fe/src/main/java/org/apache/doris/mysql/privilege/RoleManager.java
@@ -21,6 +21,7 @@ import org.apache.doris.analysis.ResourcePattern;
 import org.apache.doris.analysis.TablePattern;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.common.DdlException;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.mysql.privilege.PaloAuth.PrivLevel;
 
@@ -142,7 +143,7 @@ public class RoleManager implements Writable {
                 }
             }
             if (!hasGlobal) {
-                info.add("N/A");
+                info.add(FeConstants.null_string);
             }
 
             // db
@@ -153,7 +154,7 @@ public class RoleManager implements Writable {
                 }
             }
             if (tmp.isEmpty()) {
-                info.add("N/A");
+                info.add(FeConstants.null_string);
             } else {
                 info.add(Joiner.on("; ").join(tmp));
             }
@@ -167,7 +168,7 @@ public class RoleManager implements Writable {
                 }
             }
             if (tmp.isEmpty()) {
-                info.add("N/A");
+                info.add(FeConstants.null_string);
             } else {
                 info.add(Joiner.on("; ").join(tmp));
             }
@@ -180,7 +181,7 @@ public class RoleManager implements Writable {
                 }
             }
             if (tmp.isEmpty()) {
-                info.add("N/A");
+                info.add(FeConstants.null_string);
             } else {
                 info.add(Joiner.on("; ").join(tmp));
             }
diff --git a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 81bf5c9..f7bf43b 100644
--- a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -97,6 +97,7 @@ import org.apache.doris.common.ConfigBase;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.proc.BackendsProcDir;
@@ -930,7 +931,7 @@ public class ShowExecutor {
                 int limit = 100;
                 while (reader.ready() && limit > 0) {
                     String line = reader.readLine();
-                    rows.add(Lists.newArrayList("-1", "N/A", line));
+                    rows.add(Lists.newArrayList("-1", FeConstants.null_string, line));
                     limit--;
                 }
             }
diff --git a/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 876f2f6..1df96e0 100644
--- a/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -47,6 +47,7 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.NotImplementedException;
 import org.apache.doris.common.UserException;
@@ -854,7 +855,7 @@ public class StmtExecutor {
         for (List<String> row : resultSet.getResultRows()) {
             serializer.reset();
             for (String item : row) {
-                if (item == null) {
+                if (item == null || item.equals(FeConstants.null_string)) {
                     serializer.writeNull();
                 } else {
                     serializer.writeLenEncodedString(item);
diff --git a/fe/src/main/java/org/apache/doris/service/FrontendOptions.java b/fe/src/main/java/org/apache/doris/service/FrontendOptions.java
index b2f5a59..ef08299 100644
--- a/fe/src/main/java/org/apache/doris/service/FrontendOptions.java
+++ b/fe/src/main/java/org/apache/doris/service/FrontendOptions.java
@@ -19,6 +19,7 @@ package org.apache.doris.service;
 
 import org.apache.doris.common.CIDR;
 import org.apache.doris.common.Config;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.util.NetUtils;
 
 import com.google.common.base.Strings;
@@ -101,7 +102,7 @@ public class FrontendOptions {
     }
 
     public static String getHostnameByIp(String ip) {
-        String hostName = "N/A";
+        String hostName = FeConstants.null_string;
         try {
             InetAddress address = InetAddress.getByName(ip);
             hostName = address.getHostName();
diff --git a/fe/src/main/java/org/apache/doris/system/Backend.java b/fe/src/main/java/org/apache/doris/system/Backend.java
index a95f7bb..83d4514 100644
--- a/fe/src/main/java/org/apache/doris/system/Backend.java
+++ b/fe/src/main/java/org/apache/doris/system/Backend.java
@@ -21,6 +21,7 @@ import org.apache.doris.alter.DecommissionBackendJob.DecommissionType;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.DiskInfo;
 import org.apache.doris.catalog.DiskInfo.DiskState;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
@@ -647,7 +648,7 @@ public class Backend implements Writable {
      *     status.newItem = xxx;
      */
     public class BackendStatus {
-        public String lastSuccessReportTabletsTime = "N/A";
+        public String lastSuccessReportTabletsTime = FeConstants.null_string;
     }
 }
 
diff --git a/fe/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java b/fe/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java
index fa63789..aa9930a 100644
--- a/fe/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java
+++ b/fe/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java
@@ -22,6 +22,7 @@ import mockit.Mocked;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 
 import com.google.common.collect.Lists;
 
@@ -186,8 +187,8 @@ public class DbsProcDirTest {
         Assert.assertEquals(Lists.newArrayList("DbId", "DbName", "TableNum", "Quota", "LastConsistencyCheckTime", "ReplicaQuota"),
                             result.getColumnNames());
         List<List<String>> rows = Lists.newArrayList();
-        rows.add(Arrays.asList(String.valueOf(db1.getId()), db1.getFullName(), "0", "1024.000 GB", "N/A", "1073741824"));
-        rows.add(Arrays.asList(String.valueOf(db2.getId()), db2.getFullName(), "0", "1024.000 GB", "N/A", "1073741824"));
+        rows.add(Arrays.asList(String.valueOf(db1.getId()), db1.getFullName(), "0", "1024.000 GB", FeConstants.null_string, "1073741824"));
+        rows.add(Arrays.asList(String.valueOf(db2.getId()), db2.getFullName(), "0", "1024.000 GB", FeConstants.null_string, "1073741824"));
         Assert.assertEquals(rows, result.getRows());
     }
 
@@ -218,4 +219,4 @@ public class DbsProcDirTest {
         List<List<String>> rows = Lists.newArrayList();
         Assert.assertEquals(rows, result.getRows());
     }
-}
\ No newline at end of file
+}
diff --git a/fe/src/test/java/org/apache/doris/common/util/TimeUtilsTest.java b/fe/src/test/java/org/apache/doris/common/util/TimeUtilsTest.java
index 218c0ba..4290f81 100644
--- a/fe/src/test/java/org/apache/doris/common/util/TimeUtilsTest.java
+++ b/fe/src/test/java/org/apache/doris/common/util/TimeUtilsTest.java
@@ -23,6 +23,7 @@ import org.apache.doris.analysis.DateLiteral;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.FeConstants;
 
 import org.apache.doris.common.DdlException;
 import org.junit.Assert;
@@ -145,7 +146,7 @@ public class TimeUtilsTest {
 
     @Test
     public void testDateTrans() throws AnalysisException {
-        Assert.assertEquals("N/A", TimeUtils.longToTimeString(-2));
+        Assert.assertEquals(FeConstants.null_string, TimeUtils.longToTimeString(-2));
 
         long timestamp = 1426125600000L;
         Assert.assertEquals("2015-03-12 10:00:00", TimeUtils.longToTimeString(timestamp));
diff --git a/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java b/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
index 4a2f1f1..c87bbf6 100644
--- a/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
@@ -154,7 +154,7 @@ public class StmtExecutorTest {
 
                 ctx.getDatabase();
                 minTimes = 0;
-                result = "testDb";
+                result = "testCluster:testDb";
 
                 ctx.getSessionVariable();
                 minTimes = 0;
@@ -665,7 +665,7 @@ public class StmtExecutorTest {
 
                 useStmt.getDatabase();
                 minTimes = 0;
-                result = "testDb";
+                result = "testCluster:testDb";
 
                 useStmt.getRedirectStatus();
                 minTimes = 0;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org