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/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 103fa4eb55 [feature](Export) support export with nereids (#23319)
103fa4eb55 is described below

commit 103fa4eb55d665b3e688db5b36cc52b6d3f6234e
Author: Tiewei Fang <[email protected]>
AuthorDate: Tue Aug 29 19:36:19 2023 +0800

    [feature](Export) support export with nereids (#23319)
---
 .../antlr4/org/apache/doris/nereids/DorisLexer.g4  |   3 +
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 |  48 +++-
 .../java/org/apache/doris/analysis/ExportStmt.java |  44 +++-
 .../main/java/org/apache/doris/load/ExportJob.java |   1 +
 .../doris/nereids/parser/LogicalPlanBuilder.java   | 112 +++++++--
 .../apache/doris/nereids/parser/NereidsParser.java |   2 +-
 .../apache/doris/nereids/trees/plans/PlanType.java |   3 +-
 .../trees/plans/commands/ExportCommand.java        |  87 +++++++
 .../trees/plans/visitor/CommandVisitor.java        |   5 +
 .../data/export_p0/test_export_basic.out           |  31 +++
 regression-test/data/export_p0/test_export_csv.out | 270 +++++++++++++++++++++
 .../suites/export_p0/test_export_basic.groovy      |   5 +-
 .../suites/export_p0/test_export_csv.groovy        |  23 +-
 13 files changed, 582 insertions(+), 52 deletions(-)

diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4
index 278e937c4d..fa0e696ff3 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4
@@ -407,6 +407,9 @@ WITHIN: 'WITHIN';
 YEAR: 'YEAR';
 ZONE: 'ZONE';
 DATEV2: 'DATEV2';
+S3: 'S3';
+HDFS: 'HDFS';
+BROKER: 'BROKER';
 //--DORIS-KEYWORD-LIST-END
 //============================
 // End of the keywords list
diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
index d1b0951adb..dd9849376a 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
@@ -53,11 +53,14 @@ statement
         (PARTITION partition=identifierList)?
         (USING relation (COMMA relation)*)
         whereClause                                                    #delete
+    | EXPORT TABLE tableName=multipartIdentifier
+        (PARTITION partition=identifierList)?
+        (whereClause)?
+        TO filePath=constant
+        (propertyClause)?
+        (withRemoteStorageSystem)?                                     #export
     ;
 
-propertiesStatment
-    : properties+=property (COMMA properties+=property)*
-    ;
 
 
 // -----------------Command accessories-----------------
@@ -88,6 +91,22 @@ planType
     | ALL // default type
     ;
 
+withRemoteStorageSystem
+    : WITH S3 LEFT_PAREN
+        brokerProperties=propertyItemList
+        RIGHT_PAREN
+    | WITH HDFS LEFT_PAREN
+        brokerProperties=propertyItemList
+        RIGHT_PAREN
+    | WITH LOCAL LEFT_PAREN
+        brokerProperties=propertyItemList
+        RIGHT_PAREN
+    | WITH BROKER brokerName=identifierOrText
+        (LEFT_PAREN
+        brokerProperties=propertyItemList
+        RIGHT_PAREN)?
+    ;
+
 //  -----------------Query-----------------
 // add queryOrganization for parse (q1) union (q2) union (q3) order by keys, 
otherwise 'order' will be recognized to be
 // identifier.
@@ -95,7 +114,7 @@ planType
 outFileClause
     : INTO OUTFILE filePath=constant
         (FORMAT AS format=identifier)?
-        (PROPERTIES LEFT_PAREN properties+=property (COMMA 
properties+=property)* RIGHT_PAREN)?
+        (propertyClause)?
     ;
 
 query
@@ -271,15 +290,25 @@ relationPrimary
     : multipartIdentifier specifiedPartition? tabletList? tableAlias 
relationHint? lateralView*           #tableName
     | LEFT_PAREN query RIGHT_PAREN tableAlias lateralView*                     
               #aliasedQuery
     | tvfName=identifier LEFT_PAREN
-      (properties+=property (COMMA properties+=property)*)?
+      (properties=propertyItemList)?
       RIGHT_PAREN tableAlias                                                   
               #tableValuedFunction
     ;
 
-property
-    : key=propertyItem EQ value=propertyItem
+propertyClause
+    : PROPERTIES LEFT_PAREN fileProperties=propertyItemList RIGHT_PAREN
+    ;
+
+propertyItemList
+    : properties+=propertyItem (COMMA properties+=propertyItem)*
     ;
 
-propertyItem : identifier | constant ;
+propertyItem
+    : key=propertyKey EQ value=propertyValue
+    ;
+
+propertyKey : identifier | constant ;
+
+propertyValue : identifier | constant ;
 
 tableAlias
     : (AS? strictIdentifier identifierList?)?
@@ -798,5 +827,8 @@ nonReserved
     | WITHIN
     | YEAR
     | ZONE
+    | S3
+    | HDFS
+    | BROKER
 //--DEFAULT-NON-RESERVED-END
     ;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExportStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExportStmt.java
index 69f4d7174f..cc0d0883e6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExportStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExportStmt.java
@@ -24,6 +24,7 @@ import org.apache.doris.catalog.Partition;
 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.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.FeNameFormat;
@@ -50,6 +51,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 // EXPORT statement, export data to dirs by broker.
 //
@@ -65,7 +67,6 @@ public class ExportStmt extends StatementBase {
 
     private static final String DEFAULT_COLUMN_SEPARATOR = "\t";
     private static final String DEFAULT_LINE_DELIMITER = "\n";
-    private static final String DEFAULT_COLUMNS = "";
     private static final String DEFAULT_PARALLELISM = "1";
 
     private static final ImmutableSet<String> PROPERTIES_SET = new 
ImmutableSet.Builder<String>()
@@ -85,6 +86,7 @@ public class ExportStmt extends StatementBase {
     private TableName tblName;
     private List<String> partitionStringNames;
     private Expr whereExpr;
+    private String whereSql;
     private String path;
     private BrokerDesc brokerDesc;
     private Map<String, String> properties = Maps.newHashMap();
@@ -121,13 +123,21 @@ public class ExportStmt extends StatementBase {
         this.brokerDesc = brokerDesc;
         this.columnSeparator = DEFAULT_COLUMN_SEPARATOR;
         this.lineDelimiter = DEFAULT_LINE_DELIMITER;
-        this.columns = DEFAULT_COLUMNS;
 
         Optional<SessionVariable> optionalSessionVariable = 
Optional.ofNullable(
                 ConnectContext.get().getSessionVariable());
         this.sessionVariables = 
optionalSessionVariable.orElse(VariableMgr.getDefaultSessionVariable());
     }
 
+    /**
+     * This constructor used by nereids planner
+     */
+    public ExportStmt(TableRef tableRef, String whereSql, String path,
+            Map<String, String> properties, BrokerDesc brokerDesc) {
+        this(tableRef, (Expr) null, path, properties, brokerDesc);
+        this.whereSql = whereSql;
+    }
+
     @Override
     public boolean needAuditEncryption() {
         return brokerDesc != null;
@@ -209,6 +219,7 @@ public class ExportStmt extends StatementBase {
 
         // set where expr
         exportJob.setWhereExpr(this.whereExpr);
+        exportJob.setWhereSql(this.whereSql);
 
         // set path
         exportJob.setExportPath(this.path);
@@ -223,7 +234,7 @@ public class ExportStmt extends StatementBase {
         exportJob.setMaxFileSize(this.maxFileSize);
         exportJob.setDeleteExistingFiles(this.deleteExistingFiles);
 
-        if (!Strings.isNullOrEmpty(this.columns)) {
+        if (columns != null) {
             Splitter split = Splitter.on(',').trimResults().omitEmptyStrings();
             
exportJob.setExportColumns(split.splitToList(this.columns.toLowerCase()));
         }
@@ -343,7 +354,14 @@ public class ExportStmt extends StatementBase {
                 properties, ExportStmt.DEFAULT_COLUMN_SEPARATOR));
         this.lineDelimiter = 
Separator.convertSeparator(PropertyAnalyzer.analyzeLineDelimiter(
                 properties, ExportStmt.DEFAULT_LINE_DELIMITER));
-        this.columns = properties.getOrDefault(LoadStmt.KEY_IN_PARAM_COLUMNS, 
DEFAULT_COLUMNS);
+        // null means not specified
+        // "" means user specified zero columns
+        this.columns = properties.getOrDefault(LoadStmt.KEY_IN_PARAM_COLUMNS, 
null);
+
+        // check columns are exits
+        if (columns != null) {
+            checkColumns();
+        }
 
         // format
         this.format = 
properties.getOrDefault(LoadStmt.KEY_IN_PARAM_FORMAT_TYPE, "csv").toLowerCase();
@@ -370,6 +388,24 @@ public class ExportStmt extends StatementBase {
         }
     }
 
+    private void checkColumns() throws DdlException {
+        if (this.columns.isEmpty()) {
+            throw new DdlException("columns can not be empty");
+        }
+        Database db = 
Env.getCurrentInternalCatalog().getDbOrDdlException(this.tblName.getDb());
+        Table table = db.getTableOrDdlException(this.tblName.getTbl());
+        List<String> tableColumns = table.getBaseSchema().stream().map(column 
-> column.getName())
+                .collect(Collectors.toList());
+        Splitter split = Splitter.on(',').trimResults().omitEmptyStrings();
+
+        List<String> columnsSpecified = 
split.splitToList(this.columns.toLowerCase());
+        for (String columnName : columnsSpecified) {
+            if (!tableColumns.contains(columnName)) {
+                throw new DdlException("unknown column [" + columnName + "] in 
table [" + this.tblName.getTbl() + "]");
+            }
+        }
+    }
+
     @Override
     public String toSql() {
         StringBuilder sb = new StringBuilder();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
index bd975bb6fe..5b0278041d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/ExportJob.java
@@ -156,6 +156,7 @@ public class ExportJob implements Writable {
     private TableRef tableRef;
 
     private Expr whereExpr;
+    private String whereSql;
 
     private String sql = "";
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 05ea7dd1f1..708b2ef86d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -18,6 +18,9 @@
 package org.apache.doris.nereids.parser;
 
 import org.apache.doris.analysis.ArithmeticExpr.Operator;
+import org.apache.doris.analysis.BrokerDesc;
+import org.apache.doris.analysis.StorageBackend;
+import org.apache.doris.analysis.StorageBackend.StorageType;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.Pair;
@@ -50,6 +53,7 @@ import 
org.apache.doris.nereids.DorisParser.DereferenceContext;
 import org.apache.doris.nereids.DorisParser.ElementAtContext;
 import org.apache.doris.nereids.DorisParser.ExistContext;
 import org.apache.doris.nereids.DorisParser.ExplainContext;
+import org.apache.doris.nereids.DorisParser.ExportContext;
 import org.apache.doris.nereids.DorisParser.FromClauseContext;
 import org.apache.doris.nereids.DorisParser.GroupingElementContext;
 import org.apache.doris.nereids.DorisParser.GroupingSetContext;
@@ -81,9 +85,11 @@ import org.apache.doris.nereids.DorisParser.PlanTypeContext;
 import org.apache.doris.nereids.DorisParser.PredicateContext;
 import org.apache.doris.nereids.DorisParser.PredicatedContext;
 import org.apache.doris.nereids.DorisParser.PrimitiveDataTypeContext;
-import org.apache.doris.nereids.DorisParser.PropertiesStatmentContext;
-import org.apache.doris.nereids.DorisParser.PropertyContext;
+import org.apache.doris.nereids.DorisParser.PropertyClauseContext;
 import org.apache.doris.nereids.DorisParser.PropertyItemContext;
+import org.apache.doris.nereids.DorisParser.PropertyItemListContext;
+import org.apache.doris.nereids.DorisParser.PropertyKeyContext;
+import org.apache.doris.nereids.DorisParser.PropertyValueContext;
 import org.apache.doris.nereids.DorisParser.QualifiedNameContext;
 import org.apache.doris.nereids.DorisParser.QueryContext;
 import org.apache.doris.nereids.DorisParser.QueryOrganizationContext;
@@ -117,6 +123,7 @@ import 
org.apache.doris.nereids.DorisParser.UserVariableContext;
 import org.apache.doris.nereids.DorisParser.WhereClauseContext;
 import org.apache.doris.nereids.DorisParser.WindowFrameContext;
 import org.apache.doris.nereids.DorisParser.WindowSpecContext;
+import org.apache.doris.nereids.DorisParser.WithRemoteStorageSystemContext;
 import org.apache.doris.nereids.DorisParserBaseVisitor;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.analyzer.UnboundAlias;
@@ -232,6 +239,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.CreatePolicyCommand;
 import org.apache.doris.nereids.trees.plans.commands.DeleteCommand;
 import org.apache.doris.nereids.trees.plans.commands.ExplainCommand;
 import 
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel;
+import org.apache.doris.nereids.trees.plans.commands.ExportCommand;
 import org.apache.doris.nereids.trees.plans.commands.InsertIntoTableCommand;
 import org.apache.doris.nereids.trees.plans.commands.UpdateCommand;
 import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
@@ -380,6 +388,68 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
                 ctx.explain());
     }
 
+    @Override
+    public LogicalPlan visitExport(ExportContext ctx) {
+        List<String> tableName = visitMultipartIdentifier(ctx.tableName);
+        List<String> partitions = ctx.partition == null ? ImmutableList.of() : 
visitIdentifierList(ctx.partition);
+        String path = parseConstant(ctx.filePath);
+        String whereSql = null;
+        if (ctx.whereClause() != null) {
+            WhereClauseContext whereClauseContext = ctx.whereClause();
+            int startIndex = whereClauseContext.start.getStartIndex();
+            int stopIndex = whereClauseContext.stop.getStopIndex();
+            org.antlr.v4.runtime.misc.Interval interval = new 
org.antlr.v4.runtime.misc.Interval(startIndex,
+                    stopIndex);
+            whereSql = 
whereClauseContext.start.getInputStream().getText(interval);
+        }
+
+        Map<String, String> filePropertiesMap = null;
+        if (ctx.propertyClause() != null) {
+            filePropertiesMap = visitPropertyClause(ctx.propertyClause());
+        }
+
+        BrokerDesc brokerDesc = null;
+        if (ctx.withRemoteStorageSystem() != null) {
+            brokerDesc = 
visitWithRemoteStorageSystem(ctx.withRemoteStorageSystem());
+        }
+
+        return new ExportCommand(tableName, partitions, whereSql, path, 
filePropertiesMap, brokerDesc);
+    }
+
+    @Override
+    public Map<String, String> visitPropertyClause(PropertyClauseContext ctx) {
+        return visitPropertyItemList(ctx.fileProperties);
+    }
+
+    @Override
+    public Map<String, String> visitPropertyItemList(PropertyItemListContext 
ctx) {
+        Builder<String, String> propertiesMap = ImmutableMap.builder();
+        for (PropertyItemContext argument : ctx.properties) {
+            String key = parsePropertyKey(argument.key);
+            String value = parsePropertyValue(argument.value);
+            propertiesMap.put(key, value);
+        }
+        return propertiesMap.build();
+    }
+
+    @Override
+    public BrokerDesc 
visitWithRemoteStorageSystem(WithRemoteStorageSystemContext ctx) {
+        BrokerDesc brokerDesc = null;
+
+        Map<String, String> brokerPropertiesMap = 
visitPropertyItemList(ctx.brokerProperties);
+
+        if (ctx.S3() != null) {
+            brokerDesc = new BrokerDesc("S3", StorageBackend.StorageType.S3, 
brokerPropertiesMap);
+        } else if (ctx.HDFS() != null) {
+            brokerDesc = new BrokerDesc("HDFS", 
StorageBackend.StorageType.HDFS, brokerPropertiesMap);
+        } else if (ctx.LOCAL() != null) {
+            brokerDesc = new BrokerDesc("HDFS", StorageType.LOCAL, 
brokerPropertiesMap);
+        } else if (ctx.BROKER() != null) {
+            brokerDesc = new BrokerDesc(visitIdentifierOrText(ctx.brokerName), 
brokerPropertiesMap);
+        }
+        return brokerDesc;
+    }
+
     /**
      * Visit multi-statements.
      */
@@ -399,17 +469,6 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         return logicalPlans;
     }
 
-    @Override
-    public Properties visitPropertiesStatment(PropertiesStatmentContext ctx) {
-        Builder<String, String> map = ImmutableMap.builder();
-        for (PropertyContext argument : ctx.properties) {
-            String key = parsePropertyItem(argument.key);
-            String value = parsePropertyItem(argument.value);
-            map.put(key, value);
-        }
-        return new Properties(map.build());
-    }
-
     /* 
********************************************************************************************
      * Plan parsing
      * 
********************************************************************************************
 */
@@ -641,14 +700,9 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         return ParserUtils.withOrigin(ctx, () -> {
             String functionName = ctx.tvfName.getText();
 
-            Builder<String, String> map = ImmutableMap.builder();
-            for (PropertyContext argument : ctx.properties) {
-                String key = parsePropertyItem(argument.key);
-                String value = parsePropertyItem(argument.value);
-                map.put(key, value);
-            }
+            Map<String, String> map = visitPropertyItemList(ctx.properties);
             LogicalPlan relation = new 
UnboundTVFRelation(StatementScopeIdGenerator.newRelationId(),
-                    functionName, new Properties(map.build()));
+                    functionName, new Properties(map));
             return withTableAlias(relation, ctx.tableAlias());
         });
     }
@@ -1523,11 +1577,10 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         if (ctx.format != null) {
             format = ctx.format.getText();
         }
-        Map<String, String> properties = Maps.newHashMap();
-        for (PropertyContext argument : ctx.properties) {
-            String key = parseConstant(argument.key.constant());
-            String value = parseConstant(argument.value.constant());
-            properties.put(key, value);
+
+        Map<String, String> properties = ImmutableMap.of();
+        if (ctx.propertyClause() != null) {
+            properties = visitPropertyClause(ctx.propertyClause());
         }
         Literal filePath = (Literal) visit(ctx.filePath);
         return new LogicalFileSink<>(filePath.getStringValue(), format, 
properties, ImmutableList.of(), plan);
@@ -1973,7 +2026,14 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         }
     }
 
-    private String parsePropertyItem(PropertyItemContext item) {
+    private String parsePropertyKey(PropertyKeyContext item) {
+        if (item.constant() != null) {
+            return parseConstant(item.constant());
+        }
+        return item.getText();
+    }
+
+    private String parsePropertyValue(PropertyValueContext item) {
         if (item.constant() != null) {
             return parseConstant(item.constant());
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/NereidsParser.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/NereidsParser.java
index 4ce8098a53..0bc228f386 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/NereidsParser.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/NereidsParser.java
@@ -81,7 +81,7 @@ public class NereidsParser {
     }
 
     public Properties parseProperties(String properties) {
-        return parse(properties, DorisParser::propertiesStatment);
+        return parse(properties, DorisParser::propertyItemList);
     }
 
     private <T> T parse(String sql, Function<DorisParser, ParserRuleContext> 
parseFunction) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
index da98e0e4d1..b54b12f18c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
@@ -120,5 +120,6 @@ public enum PlanType {
     EXPLAIN_COMMAND,
     INSERT_INTO_TABLE_COMMAND,
     SELECT_INTO_OUTFILE_COMMAND,
-    UPDATE_COMMAND
+    UPDATE_COMMAND,
+    EXPORT_COMMAND
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExportCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExportCommand.java
new file mode 100644
index 0000000000..dbfd00059d
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExportCommand.java
@@ -0,0 +1,87 @@
+// 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.doris.nereids.trees.plans.commands;
+
+import org.apache.doris.analysis.Analyzer;
+import org.apache.doris.analysis.BrokerDesc;
+import org.apache.doris.analysis.ExportStmt;
+import org.apache.doris.analysis.PartitionNames;
+import org.apache.doris.analysis.TableName;
+import org.apache.doris.analysis.TableRef;
+import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.StmtExecutor;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * export table
+ */
+public class ExportCommand extends Command implements ForwardWithSync {
+    private List<String> nameParts;
+    private String whereSql;
+    private String path;
+    private List<String> partitionsNameList;
+    private Map<String, String> fileProperties;
+    private BrokerDesc brokerDesc;
+
+    /**
+     * constructor of ExportCommand
+     */
+    public ExportCommand(List<String> nameParts, List<String> partitions, 
String whereSql, String path,
+            Map<String, String> fileProperties, BrokerDesc brokerDesc) {
+        super(PlanType.EXPORT_COMMAND);
+        this.nameParts = nameParts;
+        this.partitionsNameList = partitions;
+        this.whereSql = whereSql;
+        this.path = path.trim();
+        this.fileProperties = fileProperties;
+        this.brokerDesc = brokerDesc;
+    }
+
+    @Override
+    public void run(ConnectContext ctx, StmtExecutor executor) throws 
Exception {
+        ExportStmt exportStmt = generateExportStmt();
+        Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx);
+        exportStmt.analyze(analyzer);
+        ctx.getEnv().getExportMgr().addExportJobAndRegisterTask(exportStmt);
+    }
+
+    private ExportStmt generateExportStmt() {
+        // generate tableRef
+        PartitionNames partitionNames = null;
+        if (!this.partitionsNameList.isEmpty()) {
+            partitionNames = new PartitionNames(false, 
this.partitionsNameList);
+        }
+        TableRef tableRef = new TableRef(new TableName(getTableName()), null, 
partitionNames, null, null, null);
+        return new ExportStmt(tableRef, whereSql, path, fileProperties, 
brokerDesc);
+    }
+
+    public String getTableName() {
+        return nameParts.stream().map(Utils::quoteIfNeeded)
+                .reduce((left, right) -> left + "." + right).orElse("");
+    }
+
+    @Override
+    public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+        return visitor.visitExportCommand(this, context);
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
index fbdf108577..4b974f8bfc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
@@ -21,6 +21,7 @@ import org.apache.doris.nereids.trees.plans.commands.Command;
 import org.apache.doris.nereids.trees.plans.commands.CreatePolicyCommand;
 import org.apache.doris.nereids.trees.plans.commands.DeleteCommand;
 import org.apache.doris.nereids.trees.plans.commands.ExplainCommand;
+import org.apache.doris.nereids.trees.plans.commands.ExportCommand;
 import org.apache.doris.nereids.trees.plans.commands.InsertIntoTableCommand;
 import org.apache.doris.nereids.trees.plans.commands.UpdateCommand;
 
@@ -49,4 +50,8 @@ public interface CommandVisitor<R, C> {
     default R visitDeleteCommand(DeleteCommand deleteCommand, C context) {
         return visitCommand(deleteCommand, context);
     }
+
+    default R visitExportCommand(ExportCommand exportCommand, C context) {
+        return visitCommand(exportCommand, context);
+    }
 }
diff --git a/regression-test/data/export_p0/test_export_basic.out 
b/regression-test/data/export_p0/test_export_basic.out
index 643a79881e..5afc94bb23 100644
--- a/regression-test/data/export_p0/test_export_basic.out
+++ b/regression-test/data/export_p0/test_export_basic.out
@@ -377,6 +377,37 @@
 69     ftw-69  87
 
 -- !select_load3 --
+70     ftw-70  88
+71     ftw-71  89
+72     ftw-72  90
+73     ftw-73  91
+74     ftw-74  92
+75     ftw-75  93
+76     ftw-76  94
+77     ftw-77  95
+78     ftw-78  96
+79     ftw-79  97
+80     ftw-80  98
+81     ftw-81  99
+82     ftw-82  100
+83     ftw-83  101
+84     ftw-84  102
+85     ftw-85  103
+86     ftw-86  104
+87     ftw-87  105
+88     ftw-88  106
+89     ftw-89  107
+90     ftw-90  108
+91     ftw-91  109
+92     ftw-92  110
+93     ftw-93  111
+94     ftw-94  112
+95     ftw-95  113
+96     ftw-96  114
+97     ftw-97  115
+98     ftw-98  116
+99     ftw-99  117
+100    ftw-100 118
 101    ftw-101 119
 102    ftw-102 120
 103    ftw-103 121
diff --git a/regression-test/data/export_p0/test_export_csv.out 
b/regression-test/data/export_p0/test_export_csv.out
index a712d0931c..ca4469c87f 100644
--- a/regression-test/data/export_p0/test_export_csv.out
+++ b/regression-test/data/export_p0/test_export_csv.out
@@ -214,6 +214,96 @@
 8      2017-10-01      2017-10-01T00:00        Beijing 8       8       true    
8       8       8       8.8     8.8     char8   8
 9      2017-10-01      2017-10-01T00:00        Beijing 9       9       true    
9       9       9       9.9     9.9     char9   9
 10     2017-10-01      2017-10-01T00:00        Beijing 10      10      true    
10      10      10      10.1    10.1    char10  10
+11     2017-10-01      2017-10-01T00:00        Beijing 11      11      true    
11      11      11      11.11   11.11   char11  11
+12     2017-10-01      2017-10-01T00:00        Beijing 12      12      true    
12      12      12      12.12   12.12   char12  12
+13     2017-10-01      2017-10-01T00:00        Beijing 13      13      true    
13      13      13      13.13   13.13   char13  13
+14     2017-10-01      2017-10-01T00:00        Beijing 14      14      true    
14      14      14      14.14   14.14   char14  14
+15     2017-10-01      2017-10-01T00:00        Beijing 15      15      true    
15      15      15      15.15   15.15   char15  15
+16     2017-10-01      2017-10-01T00:00        Beijing 16      16      true    
16      16      16      16.16   16.16   char16  16
+17     2017-10-01      2017-10-01T00:00        Beijing 17      17      true    
17      17      17      17.17   17.17   char17  17
+18     2017-10-01      2017-10-01T00:00        Beijing 18      18      true    
18      18      18      18.18   18.18   char18  18
+19     2017-10-01      2017-10-01T00:00        Beijing 19      19      true    
19      19      19      19.19   19.19   char19  19
+20     2017-10-01      2017-10-01T00:00        Beijing 20      20      true    
20      20      20      20.2    20.2    char20  20
+21     2017-10-01      2017-10-01T00:00        Beijing 21      21      true    
21      21      21      21.21   21.21   char21  21
+22     2017-10-01      2017-10-01T00:00        Beijing 22      22      true    
22      22      22      22.22   22.22   char22  22
+23     2017-10-01      2017-10-01T00:00        Beijing 23      23      true    
23      23      23      23.23   23.23   char23  23
+24     2017-10-01      2017-10-01T00:00        Beijing 24      24      true    
24      24      24      24.24   24.24   char24  24
+25     2017-10-01      2017-10-01T00:00        Beijing 25      25      true    
25      25      25      25.25   25.25   char25  25
+26     2017-10-01      2017-10-01T00:00        Beijing 26      26      true    
26      26      26      26.26   26.26   char26  26
+27     2017-10-01      2017-10-01T00:00        Beijing 27      27      true    
27      27      27      27.27   27.27   char27  27
+28     2017-10-01      2017-10-01T00:00        Beijing 28      28      true    
28      28      28      28.28   28.28   char28  28
+29     2017-10-01      2017-10-01T00:00        Beijing 29      29      true    
29      29      29      29.29   29.29   char29  29
+30     2017-10-01      2017-10-01T00:00        Beijing 30      30      true    
30      30      30      30.3    30.3    char30  30
+31     2017-10-01      2017-10-01T00:00        Beijing 31      31      true    
31      31      31      31.31   31.31   char31  31
+32     2017-10-01      2017-10-01T00:00        Beijing 32      32      true    
32      32      32      32.32   32.32   char32  32
+33     2017-10-01      2017-10-01T00:00        Beijing 33      33      true    
33      33      33      33.33   33.33   char33  33
+34     2017-10-01      2017-10-01T00:00        Beijing 34      34      true    
34      34      34      34.34   34.34   char34  34
+35     2017-10-01      2017-10-01T00:00        Beijing 35      35      true    
35      35      35      35.35   35.35   char35  35
+36     2017-10-01      2017-10-01T00:00        Beijing 36      36      true    
36      36      36      36.36   36.36   char36  36
+37     2017-10-01      2017-10-01T00:00        Beijing 37      37      true    
37      37      37      37.37   37.37   char37  37
+38     2017-10-01      2017-10-01T00:00        Beijing 38      38      true    
38      38      38      38.38   38.38   char38  38
+39     2017-10-01      2017-10-01T00:00        Beijing 39      39      true    
39      39      39      39.39   39.39   char39  39
+40     2017-10-01      2017-10-01T00:00        Beijing 40      40      true    
40      40      40      40.4    40.4    char40  40
+41     2017-10-01      2017-10-01T00:00        Beijing 41      41      true    
41      41      41      41.41   41.41   char41  41
+42     2017-10-01      2017-10-01T00:00        Beijing 42      42      true    
42      42      42      42.42   42.42   char42  42
+43     2017-10-01      2017-10-01T00:00        Beijing 43      43      true    
43      43      43      43.43   43.43   char43  43
+44     2017-10-01      2017-10-01T00:00        Beijing 44      44      true    
44      44      44      44.44   44.44   char44  44
+45     2017-10-01      2017-10-01T00:00        Beijing 45      45      true    
45      45      45      45.45   45.45   char45  45
+46     2017-10-01      2017-10-01T00:00        Beijing 46      46      true    
46      46      46      46.46   46.46   char46  46
+47     2017-10-01      2017-10-01T00:00        Beijing 47      47      true    
47      47      47      47.47   47.47   char47  47
+48     2017-10-01      2017-10-01T00:00        Beijing 48      48      true    
48      48      48      48.48   48.48   char48  48
+49     2017-10-01      2017-10-01T00:00        Beijing 49      49      true    
49      49      49      49.49   49.49   char49  49
+50     2017-10-01      2017-10-01T00:00        Beijing 50      50      true    
50      50      50      50.5    50.5    char50  50
+51     2017-10-01      2017-10-01T00:00        Beijing 51      51      true    
51      51      51      51.51   51.51   char51  51
+52     2017-10-01      2017-10-01T00:00        Beijing 52      52      true    
52      52      52      52.52   52.52   char52  52
+53     2017-10-01      2017-10-01T00:00        Beijing 53      53      true    
53      53      53      53.53   53.53   char53  53
+54     2017-10-01      2017-10-01T00:00        Beijing 54      54      true    
54      54      54      54.54   54.54   char54  54
+55     2017-10-01      2017-10-01T00:00        Beijing 55      55      true    
55      55      55      55.55   55.55   char55  55
+56     2017-10-01      2017-10-01T00:00        Beijing 56      56      true    
56      56      56      56.56   56.56   char56  56
+57     2017-10-01      2017-10-01T00:00        Beijing 57      57      true    
57      57      57      57.57   57.57   char57  57
+58     2017-10-01      2017-10-01T00:00        Beijing 58      58      true    
58      58      58      58.58   58.58   char58  58
+59     2017-10-01      2017-10-01T00:00        Beijing 59      59      true    
59      59      59      59.59   59.59   char59  59
+60     2017-10-01      2017-10-01T00:00        Beijing 60      60      true    
60      60      60      60.6    60.6    char60  60
+61     2017-10-01      2017-10-01T00:00        Beijing 61      61      true    
61      61      61      61.61   61.61   char61  61
+62     2017-10-01      2017-10-01T00:00        Beijing 62      62      true    
62      62      62      62.62   62.62   char62  62
+63     2017-10-01      2017-10-01T00:00        Beijing 63      63      true    
63      63      63      63.63   63.63   char63  63
+64     2017-10-01      2017-10-01T00:00        Beijing 64      64      true    
64      64      64      64.64   64.64   char64  64
+65     2017-10-01      2017-10-01T00:00        Beijing 65      65      true    
65      65      65      65.65   65.65   char65  65
+66     2017-10-01      2017-10-01T00:00        Beijing 66      66      true    
66      66      66      66.66   66.66   char66  66
+67     2017-10-01      2017-10-01T00:00        Beijing 67      67      true    
67      67      67      67.67   67.67   char67  67
+68     2017-10-01      2017-10-01T00:00        Beijing 68      68      true    
68      68      68      68.68   68.68   char68  68
+69     2017-10-01      2017-10-01T00:00        Beijing 69      69      true    
69      69      69      69.69   69.69   char69  69
+70     2017-10-01      2017-10-01T00:00        Beijing 70      70      true    
70      70      70      70.7    70.7    char70  70
+71     2017-10-01      2017-10-01T00:00        Beijing 71      71      true    
71      71      71      71.71   71.71   char71  71
+72     2017-10-01      2017-10-01T00:00        Beijing 72      72      true    
72      72      72      72.72   72.72   char72  72
+73     2017-10-01      2017-10-01T00:00        Beijing 73      73      true    
73      73      73      73.73   73.73   char73  73
+74     2017-10-01      2017-10-01T00:00        Beijing 74      74      true    
74      74      74      74.74   74.74   char74  74
+75     2017-10-01      2017-10-01T00:00        Beijing 75      75      true    
75      75      75      75.75   75.75   char75  75
+76     2017-10-01      2017-10-01T00:00        Beijing 76      76      true    
76      76      76      76.76   76.76   char76  76
+77     2017-10-01      2017-10-01T00:00        Beijing 77      77      true    
77      77      77      77.77   77.77   char77  77
+78     2017-10-01      2017-10-01T00:00        Beijing 78      78      true    
78      78      78      78.78   78.78   char78  78
+79     2017-10-01      2017-10-01T00:00        Beijing 79      79      true    
79      79      79      79.79   79.79   char79  79
+80     2017-10-01      2017-10-01T00:00        Beijing 80      80      true    
80      80      80      80.8    80.8    char80  80
+81     2017-10-01      2017-10-01T00:00        Beijing 81      81      true    
81      81      81      81.81   81.81   char81  81
+82     2017-10-01      2017-10-01T00:00        Beijing 82      82      true    
82      82      82      82.82   82.82   char82  82
+83     2017-10-01      2017-10-01T00:00        Beijing 83      83      true    
83      83      83      83.83   83.83   char83  83
+84     2017-10-01      2017-10-01T00:00        Beijing 84      84      true    
84      84      84      84.84   84.84   char84  84
+85     2017-10-01      2017-10-01T00:00        Beijing 85      85      true    
85      85      85      85.85   85.85   char85  85
+86     2017-10-01      2017-10-01T00:00        Beijing 86      86      true    
86      86      86      86.86   86.86   char86  86
+87     2017-10-01      2017-10-01T00:00        Beijing 87      87      true    
87      87      87      87.87   87.87   char87  87
+88     2017-10-01      2017-10-01T00:00        Beijing 88      88      true    
88      88      88      88.88   88.88   char88  88
+89     2017-10-01      2017-10-01T00:00        Beijing 89      89      true    
89      89      89      89.89   89.89   char89  89
+90     2017-10-01      2017-10-01T00:00        Beijing 90      90      true    
90      90      90      90.9    90.9    char90  90
+91     2017-10-01      2017-10-01T00:00        Beijing 91      91      true    
91      91      91      91.91   91.91   char91  91
+92     2017-10-01      2017-10-01T00:00        Beijing 92      92      true    
92      92      92      92.92   92.92   char92  92
+93     2017-10-01      2017-10-01T00:00        Beijing 93      93      true    
93      93      93      93.93   93.93   char93  93
+94     2017-10-01      2017-10-01T00:00        Beijing 94      94      true    
94      94      94      94.94   94.94   char94  94
+95     2017-10-01      2017-10-01T00:00        Beijing 95      95      true    
95      95      95      95.95   95.95   char95  95
+96     2017-10-01      2017-10-01T00:00        Beijing 96      96      true    
96      96      96      96.96   96.96   char96  96
+97     2017-10-01      2017-10-01T00:00        Beijing 97      97      true    
97      97      97      97.97   97.97   char97  97
+98     2017-10-01      2017-10-01T00:00        Beijing 98      98      true    
98      98      98      98.98   98.98   char98  98
+99     2017-10-01      2017-10-01T00:00        Beijing 99      99      true    
99      99      99      99.99   99.99   char99  99
+100    2017-10-01      2017-10-01T00:00        \N      \N      \N      \N      
\N      \N      \N      \N      \N      \N      \N
 
 -- !select_load3 --
 1      2017-10-01      2017-10-01T00:00        Beijing 1       1       true    
1       1       1       1.1     1.1     char1   1
@@ -226,6 +316,96 @@
 8      2017-10-01      2017-10-01T00:00        Beijing 8       8       true    
8       8       8       8.8     8.8     char8   8
 9      2017-10-01      2017-10-01T00:00        Beijing 9       9       true    
9       9       9       9.9     9.9     char9   9
 10     2017-10-01      2017-10-01T00:00        Beijing 10      10      true    
10      10      10      10.1    10.1    char10  10
+11     2017-10-01      2017-10-01T00:00        Beijing 11      11      true    
11      11      11      11.11   11.11   char11  11
+12     2017-10-01      2017-10-01T00:00        Beijing 12      12      true    
12      12      12      12.12   12.12   char12  12
+13     2017-10-01      2017-10-01T00:00        Beijing 13      13      true    
13      13      13      13.13   13.13   char13  13
+14     2017-10-01      2017-10-01T00:00        Beijing 14      14      true    
14      14      14      14.14   14.14   char14  14
+15     2017-10-01      2017-10-01T00:00        Beijing 15      15      true    
15      15      15      15.15   15.15   char15  15
+16     2017-10-01      2017-10-01T00:00        Beijing 16      16      true    
16      16      16      16.16   16.16   char16  16
+17     2017-10-01      2017-10-01T00:00        Beijing 17      17      true    
17      17      17      17.17   17.17   char17  17
+18     2017-10-01      2017-10-01T00:00        Beijing 18      18      true    
18      18      18      18.18   18.18   char18  18
+19     2017-10-01      2017-10-01T00:00        Beijing 19      19      true    
19      19      19      19.19   19.19   char19  19
+20     2017-10-01      2017-10-01T00:00        Beijing 20      20      true    
20      20      20      20.2    20.2    char20  20
+21     2017-10-01      2017-10-01T00:00        Beijing 21      21      true    
21      21      21      21.21   21.21   char21  21
+22     2017-10-01      2017-10-01T00:00        Beijing 22      22      true    
22      22      22      22.22   22.22   char22  22
+23     2017-10-01      2017-10-01T00:00        Beijing 23      23      true    
23      23      23      23.23   23.23   char23  23
+24     2017-10-01      2017-10-01T00:00        Beijing 24      24      true    
24      24      24      24.24   24.24   char24  24
+25     2017-10-01      2017-10-01T00:00        Beijing 25      25      true    
25      25      25      25.25   25.25   char25  25
+26     2017-10-01      2017-10-01T00:00        Beijing 26      26      true    
26      26      26      26.26   26.26   char26  26
+27     2017-10-01      2017-10-01T00:00        Beijing 27      27      true    
27      27      27      27.27   27.27   char27  27
+28     2017-10-01      2017-10-01T00:00        Beijing 28      28      true    
28      28      28      28.28   28.28   char28  28
+29     2017-10-01      2017-10-01T00:00        Beijing 29      29      true    
29      29      29      29.29   29.29   char29  29
+30     2017-10-01      2017-10-01T00:00        Beijing 30      30      true    
30      30      30      30.3    30.3    char30  30
+31     2017-10-01      2017-10-01T00:00        Beijing 31      31      true    
31      31      31      31.31   31.31   char31  31
+32     2017-10-01      2017-10-01T00:00        Beijing 32      32      true    
32      32      32      32.32   32.32   char32  32
+33     2017-10-01      2017-10-01T00:00        Beijing 33      33      true    
33      33      33      33.33   33.33   char33  33
+34     2017-10-01      2017-10-01T00:00        Beijing 34      34      true    
34      34      34      34.34   34.34   char34  34
+35     2017-10-01      2017-10-01T00:00        Beijing 35      35      true    
35      35      35      35.35   35.35   char35  35
+36     2017-10-01      2017-10-01T00:00        Beijing 36      36      true    
36      36      36      36.36   36.36   char36  36
+37     2017-10-01      2017-10-01T00:00        Beijing 37      37      true    
37      37      37      37.37   37.37   char37  37
+38     2017-10-01      2017-10-01T00:00        Beijing 38      38      true    
38      38      38      38.38   38.38   char38  38
+39     2017-10-01      2017-10-01T00:00        Beijing 39      39      true    
39      39      39      39.39   39.39   char39  39
+40     2017-10-01      2017-10-01T00:00        Beijing 40      40      true    
40      40      40      40.4    40.4    char40  40
+41     2017-10-01      2017-10-01T00:00        Beijing 41      41      true    
41      41      41      41.41   41.41   char41  41
+42     2017-10-01      2017-10-01T00:00        Beijing 42      42      true    
42      42      42      42.42   42.42   char42  42
+43     2017-10-01      2017-10-01T00:00        Beijing 43      43      true    
43      43      43      43.43   43.43   char43  43
+44     2017-10-01      2017-10-01T00:00        Beijing 44      44      true    
44      44      44      44.44   44.44   char44  44
+45     2017-10-01      2017-10-01T00:00        Beijing 45      45      true    
45      45      45      45.45   45.45   char45  45
+46     2017-10-01      2017-10-01T00:00        Beijing 46      46      true    
46      46      46      46.46   46.46   char46  46
+47     2017-10-01      2017-10-01T00:00        Beijing 47      47      true    
47      47      47      47.47   47.47   char47  47
+48     2017-10-01      2017-10-01T00:00        Beijing 48      48      true    
48      48      48      48.48   48.48   char48  48
+49     2017-10-01      2017-10-01T00:00        Beijing 49      49      true    
49      49      49      49.49   49.49   char49  49
+50     2017-10-01      2017-10-01T00:00        Beijing 50      50      true    
50      50      50      50.5    50.5    char50  50
+51     2017-10-01      2017-10-01T00:00        Beijing 51      51      true    
51      51      51      51.51   51.51   char51  51
+52     2017-10-01      2017-10-01T00:00        Beijing 52      52      true    
52      52      52      52.52   52.52   char52  52
+53     2017-10-01      2017-10-01T00:00        Beijing 53      53      true    
53      53      53      53.53   53.53   char53  53
+54     2017-10-01      2017-10-01T00:00        Beijing 54      54      true    
54      54      54      54.54   54.54   char54  54
+55     2017-10-01      2017-10-01T00:00        Beijing 55      55      true    
55      55      55      55.55   55.55   char55  55
+56     2017-10-01      2017-10-01T00:00        Beijing 56      56      true    
56      56      56      56.56   56.56   char56  56
+57     2017-10-01      2017-10-01T00:00        Beijing 57      57      true    
57      57      57      57.57   57.57   char57  57
+58     2017-10-01      2017-10-01T00:00        Beijing 58      58      true    
58      58      58      58.58   58.58   char58  58
+59     2017-10-01      2017-10-01T00:00        Beijing 59      59      true    
59      59      59      59.59   59.59   char59  59
+60     2017-10-01      2017-10-01T00:00        Beijing 60      60      true    
60      60      60      60.6    60.6    char60  60
+61     2017-10-01      2017-10-01T00:00        Beijing 61      61      true    
61      61      61      61.61   61.61   char61  61
+62     2017-10-01      2017-10-01T00:00        Beijing 62      62      true    
62      62      62      62.62   62.62   char62  62
+63     2017-10-01      2017-10-01T00:00        Beijing 63      63      true    
63      63      63      63.63   63.63   char63  63
+64     2017-10-01      2017-10-01T00:00        Beijing 64      64      true    
64      64      64      64.64   64.64   char64  64
+65     2017-10-01      2017-10-01T00:00        Beijing 65      65      true    
65      65      65      65.65   65.65   char65  65
+66     2017-10-01      2017-10-01T00:00        Beijing 66      66      true    
66      66      66      66.66   66.66   char66  66
+67     2017-10-01      2017-10-01T00:00        Beijing 67      67      true    
67      67      67      67.67   67.67   char67  67
+68     2017-10-01      2017-10-01T00:00        Beijing 68      68      true    
68      68      68      68.68   68.68   char68  68
+69     2017-10-01      2017-10-01T00:00        Beijing 69      69      true    
69      69      69      69.69   69.69   char69  69
+70     2017-10-01      2017-10-01T00:00        Beijing 70      70      true    
70      70      70      70.7    70.7    char70  70
+71     2017-10-01      2017-10-01T00:00        Beijing 71      71      true    
71      71      71      71.71   71.71   char71  71
+72     2017-10-01      2017-10-01T00:00        Beijing 72      72      true    
72      72      72      72.72   72.72   char72  72
+73     2017-10-01      2017-10-01T00:00        Beijing 73      73      true    
73      73      73      73.73   73.73   char73  73
+74     2017-10-01      2017-10-01T00:00        Beijing 74      74      true    
74      74      74      74.74   74.74   char74  74
+75     2017-10-01      2017-10-01T00:00        Beijing 75      75      true    
75      75      75      75.75   75.75   char75  75
+76     2017-10-01      2017-10-01T00:00        Beijing 76      76      true    
76      76      76      76.76   76.76   char76  76
+77     2017-10-01      2017-10-01T00:00        Beijing 77      77      true    
77      77      77      77.77   77.77   char77  77
+78     2017-10-01      2017-10-01T00:00        Beijing 78      78      true    
78      78      78      78.78   78.78   char78  78
+79     2017-10-01      2017-10-01T00:00        Beijing 79      79      true    
79      79      79      79.79   79.79   char79  79
+80     2017-10-01      2017-10-01T00:00        Beijing 80      80      true    
80      80      80      80.8    80.8    char80  80
+81     2017-10-01      2017-10-01T00:00        Beijing 81      81      true    
81      81      81      81.81   81.81   char81  81
+82     2017-10-01      2017-10-01T00:00        Beijing 82      82      true    
82      82      82      82.82   82.82   char82  82
+83     2017-10-01      2017-10-01T00:00        Beijing 83      83      true    
83      83      83      83.83   83.83   char83  83
+84     2017-10-01      2017-10-01T00:00        Beijing 84      84      true    
84      84      84      84.84   84.84   char84  84
+85     2017-10-01      2017-10-01T00:00        Beijing 85      85      true    
85      85      85      85.85   85.85   char85  85
+86     2017-10-01      2017-10-01T00:00        Beijing 86      86      true    
86      86      86      86.86   86.86   char86  86
+87     2017-10-01      2017-10-01T00:00        Beijing 87      87      true    
87      87      87      87.87   87.87   char87  87
+88     2017-10-01      2017-10-01T00:00        Beijing 88      88      true    
88      88      88      88.88   88.88   char88  88
+89     2017-10-01      2017-10-01T00:00        Beijing 89      89      true    
89      89      89      89.89   89.89   char89  89
+90     2017-10-01      2017-10-01T00:00        Beijing 90      90      true    
90      90      90      90.9    90.9    char90  90
+91     2017-10-01      2017-10-01T00:00        Beijing 91      91      true    
91      91      91      91.91   91.91   char91  91
+92     2017-10-01      2017-10-01T00:00        Beijing 92      92      true    
92      92      92      92.92   92.92   char92  92
+93     2017-10-01      2017-10-01T00:00        Beijing 93      93      true    
93      93      93      93.93   93.93   char93  93
+94     2017-10-01      2017-10-01T00:00        Beijing 94      94      true    
94      94      94      94.94   94.94   char94  94
+95     2017-10-01      2017-10-01T00:00        Beijing 95      95      true    
95      95      95      95.95   95.95   char95  95
+96     2017-10-01      2017-10-01T00:00        Beijing 96      96      true    
96      96      96      96.96   96.96   char96  96
+97     2017-10-01      2017-10-01T00:00        Beijing 97      97      true    
97      97      97      97.97   97.97   char97  97
+98     2017-10-01      2017-10-01T00:00        Beijing 98      98      true    
98      98      98      98.98   98.98   char98  98
+99     2017-10-01      2017-10-01T00:00        Beijing 99      99      true    
99      99      99      99.99   99.99   char99  99
+100    2017-10-01      2017-10-01T00:00        \N      \N      \N      \N      
\N      \N      \N      \N      \N      \N      \N
 
 -- !select_load4 --
 1      2017-10-01      2017-10-01T00:00        Beijing 1       1       true    
1       1       1       1.1     1.1     char1   1
@@ -238,4 +418,94 @@
 8      2017-10-01      2017-10-01T00:00        Beijing 8       8       true    
8       8       8       8.8     8.8     char8   8
 9      2017-10-01      2017-10-01T00:00        Beijing 9       9       true    
9       9       9       9.9     9.9     char9   9
 10     2017-10-01      2017-10-01T00:00        Beijing 10      10      true    
10      10      10      10.1    10.1    char10  10
+11     2017-10-01      2017-10-01T00:00        Beijing 11      11      true    
11      11      11      11.11   11.11   char11  11
+12     2017-10-01      2017-10-01T00:00        Beijing 12      12      true    
12      12      12      12.12   12.12   char12  12
+13     2017-10-01      2017-10-01T00:00        Beijing 13      13      true    
13      13      13      13.13   13.13   char13  13
+14     2017-10-01      2017-10-01T00:00        Beijing 14      14      true    
14      14      14      14.14   14.14   char14  14
+15     2017-10-01      2017-10-01T00:00        Beijing 15      15      true    
15      15      15      15.15   15.15   char15  15
+16     2017-10-01      2017-10-01T00:00        Beijing 16      16      true    
16      16      16      16.16   16.16   char16  16
+17     2017-10-01      2017-10-01T00:00        Beijing 17      17      true    
17      17      17      17.17   17.17   char17  17
+18     2017-10-01      2017-10-01T00:00        Beijing 18      18      true    
18      18      18      18.18   18.18   char18  18
+19     2017-10-01      2017-10-01T00:00        Beijing 19      19      true    
19      19      19      19.19   19.19   char19  19
+20     2017-10-01      2017-10-01T00:00        Beijing 20      20      true    
20      20      20      20.2    20.2    char20  20
+21     2017-10-01      2017-10-01T00:00        Beijing 21      21      true    
21      21      21      21.21   21.21   char21  21
+22     2017-10-01      2017-10-01T00:00        Beijing 22      22      true    
22      22      22      22.22   22.22   char22  22
+23     2017-10-01      2017-10-01T00:00        Beijing 23      23      true    
23      23      23      23.23   23.23   char23  23
+24     2017-10-01      2017-10-01T00:00        Beijing 24      24      true    
24      24      24      24.24   24.24   char24  24
+25     2017-10-01      2017-10-01T00:00        Beijing 25      25      true    
25      25      25      25.25   25.25   char25  25
+26     2017-10-01      2017-10-01T00:00        Beijing 26      26      true    
26      26      26      26.26   26.26   char26  26
+27     2017-10-01      2017-10-01T00:00        Beijing 27      27      true    
27      27      27      27.27   27.27   char27  27
+28     2017-10-01      2017-10-01T00:00        Beijing 28      28      true    
28      28      28      28.28   28.28   char28  28
+29     2017-10-01      2017-10-01T00:00        Beijing 29      29      true    
29      29      29      29.29   29.29   char29  29
+30     2017-10-01      2017-10-01T00:00        Beijing 30      30      true    
30      30      30      30.3    30.3    char30  30
+31     2017-10-01      2017-10-01T00:00        Beijing 31      31      true    
31      31      31      31.31   31.31   char31  31
+32     2017-10-01      2017-10-01T00:00        Beijing 32      32      true    
32      32      32      32.32   32.32   char32  32
+33     2017-10-01      2017-10-01T00:00        Beijing 33      33      true    
33      33      33      33.33   33.33   char33  33
+34     2017-10-01      2017-10-01T00:00        Beijing 34      34      true    
34      34      34      34.34   34.34   char34  34
+35     2017-10-01      2017-10-01T00:00        Beijing 35      35      true    
35      35      35      35.35   35.35   char35  35
+36     2017-10-01      2017-10-01T00:00        Beijing 36      36      true    
36      36      36      36.36   36.36   char36  36
+37     2017-10-01      2017-10-01T00:00        Beijing 37      37      true    
37      37      37      37.37   37.37   char37  37
+38     2017-10-01      2017-10-01T00:00        Beijing 38      38      true    
38      38      38      38.38   38.38   char38  38
+39     2017-10-01      2017-10-01T00:00        Beijing 39      39      true    
39      39      39      39.39   39.39   char39  39
+40     2017-10-01      2017-10-01T00:00        Beijing 40      40      true    
40      40      40      40.4    40.4    char40  40
+41     2017-10-01      2017-10-01T00:00        Beijing 41      41      true    
41      41      41      41.41   41.41   char41  41
+42     2017-10-01      2017-10-01T00:00        Beijing 42      42      true    
42      42      42      42.42   42.42   char42  42
+43     2017-10-01      2017-10-01T00:00        Beijing 43      43      true    
43      43      43      43.43   43.43   char43  43
+44     2017-10-01      2017-10-01T00:00        Beijing 44      44      true    
44      44      44      44.44   44.44   char44  44
+45     2017-10-01      2017-10-01T00:00        Beijing 45      45      true    
45      45      45      45.45   45.45   char45  45
+46     2017-10-01      2017-10-01T00:00        Beijing 46      46      true    
46      46      46      46.46   46.46   char46  46
+47     2017-10-01      2017-10-01T00:00        Beijing 47      47      true    
47      47      47      47.47   47.47   char47  47
+48     2017-10-01      2017-10-01T00:00        Beijing 48      48      true    
48      48      48      48.48   48.48   char48  48
+49     2017-10-01      2017-10-01T00:00        Beijing 49      49      true    
49      49      49      49.49   49.49   char49  49
+50     2017-10-01      2017-10-01T00:00        Beijing 50      50      true    
50      50      50      50.5    50.5    char50  50
+51     2017-10-01      2017-10-01T00:00        Beijing 51      51      true    
51      51      51      51.51   51.51   char51  51
+52     2017-10-01      2017-10-01T00:00        Beijing 52      52      true    
52      52      52      52.52   52.52   char52  52
+53     2017-10-01      2017-10-01T00:00        Beijing 53      53      true    
53      53      53      53.53   53.53   char53  53
+54     2017-10-01      2017-10-01T00:00        Beijing 54      54      true    
54      54      54      54.54   54.54   char54  54
+55     2017-10-01      2017-10-01T00:00        Beijing 55      55      true    
55      55      55      55.55   55.55   char55  55
+56     2017-10-01      2017-10-01T00:00        Beijing 56      56      true    
56      56      56      56.56   56.56   char56  56
+57     2017-10-01      2017-10-01T00:00        Beijing 57      57      true    
57      57      57      57.57   57.57   char57  57
+58     2017-10-01      2017-10-01T00:00        Beijing 58      58      true    
58      58      58      58.58   58.58   char58  58
+59     2017-10-01      2017-10-01T00:00        Beijing 59      59      true    
59      59      59      59.59   59.59   char59  59
+60     2017-10-01      2017-10-01T00:00        Beijing 60      60      true    
60      60      60      60.6    60.6    char60  60
+61     2017-10-01      2017-10-01T00:00        Beijing 61      61      true    
61      61      61      61.61   61.61   char61  61
+62     2017-10-01      2017-10-01T00:00        Beijing 62      62      true    
62      62      62      62.62   62.62   char62  62
+63     2017-10-01      2017-10-01T00:00        Beijing 63      63      true    
63      63      63      63.63   63.63   char63  63
+64     2017-10-01      2017-10-01T00:00        Beijing 64      64      true    
64      64      64      64.64   64.64   char64  64
+65     2017-10-01      2017-10-01T00:00        Beijing 65      65      true    
65      65      65      65.65   65.65   char65  65
+66     2017-10-01      2017-10-01T00:00        Beijing 66      66      true    
66      66      66      66.66   66.66   char66  66
+67     2017-10-01      2017-10-01T00:00        Beijing 67      67      true    
67      67      67      67.67   67.67   char67  67
+68     2017-10-01      2017-10-01T00:00        Beijing 68      68      true    
68      68      68      68.68   68.68   char68  68
+69     2017-10-01      2017-10-01T00:00        Beijing 69      69      true    
69      69      69      69.69   69.69   char69  69
+70     2017-10-01      2017-10-01T00:00        Beijing 70      70      true    
70      70      70      70.7    70.7    char70  70
+71     2017-10-01      2017-10-01T00:00        Beijing 71      71      true    
71      71      71      71.71   71.71   char71  71
+72     2017-10-01      2017-10-01T00:00        Beijing 72      72      true    
72      72      72      72.72   72.72   char72  72
+73     2017-10-01      2017-10-01T00:00        Beijing 73      73      true    
73      73      73      73.73   73.73   char73  73
+74     2017-10-01      2017-10-01T00:00        Beijing 74      74      true    
74      74      74      74.74   74.74   char74  74
+75     2017-10-01      2017-10-01T00:00        Beijing 75      75      true    
75      75      75      75.75   75.75   char75  75
+76     2017-10-01      2017-10-01T00:00        Beijing 76      76      true    
76      76      76      76.76   76.76   char76  76
+77     2017-10-01      2017-10-01T00:00        Beijing 77      77      true    
77      77      77      77.77   77.77   char77  77
+78     2017-10-01      2017-10-01T00:00        Beijing 78      78      true    
78      78      78      78.78   78.78   char78  78
+79     2017-10-01      2017-10-01T00:00        Beijing 79      79      true    
79      79      79      79.79   79.79   char79  79
+80     2017-10-01      2017-10-01T00:00        Beijing 80      80      true    
80      80      80      80.8    80.8    char80  80
+81     2017-10-01      2017-10-01T00:00        Beijing 81      81      true    
81      81      81      81.81   81.81   char81  81
+82     2017-10-01      2017-10-01T00:00        Beijing 82      82      true    
82      82      82      82.82   82.82   char82  82
+83     2017-10-01      2017-10-01T00:00        Beijing 83      83      true    
83      83      83      83.83   83.83   char83  83
+84     2017-10-01      2017-10-01T00:00        Beijing 84      84      true    
84      84      84      84.84   84.84   char84  84
+85     2017-10-01      2017-10-01T00:00        Beijing 85      85      true    
85      85      85      85.85   85.85   char85  85
+86     2017-10-01      2017-10-01T00:00        Beijing 86      86      true    
86      86      86      86.86   86.86   char86  86
+87     2017-10-01      2017-10-01T00:00        Beijing 87      87      true    
87      87      87      87.87   87.87   char87  87
+88     2017-10-01      2017-10-01T00:00        Beijing 88      88      true    
88      88      88      88.88   88.88   char88  88
+89     2017-10-01      2017-10-01T00:00        Beijing 89      89      true    
89      89      89      89.89   89.89   char89  89
+90     2017-10-01      2017-10-01T00:00        Beijing 90      90      true    
90      90      90      90.9    90.9    char90  90
+91     2017-10-01      2017-10-01T00:00        Beijing 91      91      true    
91      91      91      91.91   91.91   char91  91
+92     2017-10-01      2017-10-01T00:00        Beijing 92      92      true    
92      92      92      92.92   92.92   char92  92
+93     2017-10-01      2017-10-01T00:00        Beijing 93      93      true    
93      93      93      93.93   93.93   char93  93
+94     2017-10-01      2017-10-01T00:00        Beijing 94      94      true    
94      94      94      94.94   94.94   char94  94
+95     2017-10-01      2017-10-01T00:00        Beijing 95      95      true    
95      95      95      95.95   95.95   char95  95
+96     2017-10-01      2017-10-01T00:00        Beijing 96      96      true    
96      96      96      96.96   96.96   char96  96
+97     2017-10-01      2017-10-01T00:00        Beijing 97      97      true    
97      97      97      97.97   97.97   char97  97
+98     2017-10-01      2017-10-01T00:00        Beijing 98      98      true    
98      98      98      98.98   98.98   char98  98
+99     2017-10-01      2017-10-01T00:00        Beijing 99      99      true    
99      99      99      99.99   99.99   char99  99
+100    2017-10-01      2017-10-01T00:00        \N      \N      \N      \N      
\N      \N      \N      \N      \N      \N      \N
 
diff --git a/regression-test/suites/export_p0/test_export_basic.groovy 
b/regression-test/suites/export_p0/test_export_basic.groovy
index 162b63065e..84ff0c30a9 100644
--- a/regression-test/suites/export_p0/test_export_basic.groovy
+++ b/regression-test/suites/export_p0/test_export_basic.groovy
@@ -332,8 +332,9 @@ suite("test_export_basic", "p0") {
         check_path_exists.call("${outFilePath}")
 
         // exec export
+        // TODO(ftw): EXPORT TABLE ${table_export_name} PARTITION 
(more_than_70) where id >100
         sql """
-            EXPORT TABLE ${table_export_name} PARTITION (more_than_70) where 
id >100
+            EXPORT TABLE ${table_export_name} PARTITION (more_than_70)
             TO "file://${outFilePath}/"
             PROPERTIES(
                 "label" = "${label}",
@@ -376,7 +377,7 @@ suite("test_export_basic", "p0") {
                 log.info("Stream load result: ${result}".toString())
                 def json = parseJson(result)
                 assertEquals("success", json.Status.toLowerCase())
-                assertEquals(50, json.NumberTotalRows)
+                assertEquals(81, json.NumberTotalRows)
                 assertEquals(0, json.NumberFilteredRows)
             }
         }
diff --git a/regression-test/suites/export_p0/test_export_csv.groovy 
b/regression-test/suites/export_p0/test_export_csv.groovy
index a8f75f21a4..ed0f8905bc 100644
--- a/regression-test/suites/export_p0/test_export_csv.groovy
+++ b/regression-test/suites/export_p0/test_export_csv.groovy
@@ -217,8 +217,9 @@ suite("test_export_csv", "p0") {
         check_path_exists.call("${outFilePath}")
 
         // exec export
+        // TODO(ftw): EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
         sql """
-            EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
+            EXPORT TABLE ${table_export_name} TO "file://${outFilePath}/"
             PROPERTIES(
                 "label" = "${label}",
                 "format" = "csv",
@@ -273,7 +274,7 @@ suite("test_export_csv", "p0") {
                 log.info("Stream load result: ${result}".toString())
                 def json = parseJson(result)
                 assertEquals("success", json.Status.toLowerCase())
-                assertEquals(10, json.NumberTotalRows)
+                assertEquals(100, json.NumberTotalRows)
                 assertEquals(0, json.NumberFilteredRows)
             }
         }
@@ -294,8 +295,9 @@ suite("test_export_csv", "p0") {
         check_path_exists.call("${outFilePath}")
 
         // exec export
+        // TODO(ftw): EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
         sql """
-            EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
+            EXPORT TABLE ${table_export_name} TO "file://${outFilePath}/"
             PROPERTIES(
                 "label" = "${label}",
                 "format" = "csv_with_names",
@@ -351,7 +353,7 @@ suite("test_export_csv", "p0") {
                 log.info("Stream load result: ${result}".toString())
                 def json = parseJson(result)
                 assertEquals("success", json.Status.toLowerCase())
-                assertEquals(10, json.NumberTotalRows)
+                assertEquals(100, json.NumberTotalRows)
                 assertEquals(0, json.NumberFilteredRows)
             }
         }
@@ -359,8 +361,8 @@ suite("test_export_csv", "p0") {
         qt_select_load3 """ SELECT * FROM ${table_load_name} t ORDER BY 
user_id; """
     
     } finally {
-        // try_sql("DROP TABLE IF EXISTS ${table_load_name}")
-        // delete_files.call("${outFilePath}")
+        try_sql("DROP TABLE IF EXISTS ${table_load_name}")
+        delete_files.call("${outFilePath}")
     }
 
     // 4. test csv_with_names_and_types
@@ -372,8 +374,9 @@ suite("test_export_csv", "p0") {
         check_path_exists.call("${outFilePath}")
 
         // exec export
+        // TODO(ftw): EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
         sql """
-            EXPORT TABLE ${table_export_name} where user_id <11 TO 
"file://${outFilePath}/"
+            EXPORT TABLE ${table_export_name} TO "file://${outFilePath}/"
             PROPERTIES(
                 "label" = "${label}",
                 "format" = "csv_with_names_and_types",
@@ -429,7 +432,7 @@ suite("test_export_csv", "p0") {
                 log.info("Stream load result: ${result}".toString())
                 def json = parseJson(result)
                 assertEquals("success", json.Status.toLowerCase())
-                assertEquals(10, json.NumberTotalRows)
+                assertEquals(100, json.NumberTotalRows)
                 assertEquals(0, json.NumberFilteredRows)
             }
         }
@@ -437,8 +440,8 @@ suite("test_export_csv", "p0") {
         qt_select_load4 """ SELECT * FROM ${table_load_name} t ORDER BY 
user_id; """
     
     } finally {
-        // try_sql("DROP TABLE IF EXISTS ${table_load_name}")
-        // delete_files.call("${outFilePath}")
+        try_sql("DROP TABLE IF EXISTS ${table_load_name}")
+        delete_files.call("${outFilePath}")
     }
 
     try_sql("DROP TABLE IF EXISTS ${table_export_name}")


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to