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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 19b63bb4374 [fix](load) fix load cast throw exception when plan 
(#44968)
19b63bb4374 is described below

commit 19b63bb4374b37b5536534eb6d9bbd019d9a9c8b
Author: hui lai <lai...@selectdb.com>
AuthorDate: Wed Dec 4 17:45:05 2024 +0800

    [fix](load) fix load cast throw exception when plan (#44968)
    
    ### What problem does this PR solve?
    
    Use the load command with the following columns mapping:
    ```
    curl --location-trusted -u root: \
        -H "Expect:100-continue" \
        -H "column_separator:," \
        -H 
"columns:cache_key,result_cnt,result,result=bitmap_from_base64(result)" \
        -T 1.txt \
        -XPUT http://10.16.10.6:48733/api/mutong/task_result_dev/_stream_load
    ```
    
    ```
    {
        "TxnId": 37092,
        "Label": "54b9e25b-853d-4ecc-aca9-82bd4ed91875",
        "Comment": "",
        "TwoPhaseCommit": "false",
        "Status": "Fail",
        "Message": "[ANALYSIS_ERROR]TStatus: errCode = 2, detailMessage = can 
not cast from origin type bitmap to target type=varchar(65533)",
        "NumberTotalRows": 0,
        "NumberLoadedRows": 0,
        "NumberFilteredRows": 0,
        "NumberUnselectedRows": 0,
        "LoadBytes": 0,
        "LoadTimeMs": 0,
        "BeginTxnTimeMs": 1,
        "StreamLoadPutTimeMs": 2,
        "ReadDataTimeMs": 0,
        "WriteDataTimeMs": 0,
        "CommitAndPublishTimeMs": 0
    }
    ```
    
    The pr aims to fix this issue.
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test <!-- At least one of them must be included. -->
        - [ ] Regression test
        - [ ] Unit Test
        - [ ] Manual test (add detailed scripts or steps below)
        - [ ] No need to test or manual test. Explain why:
    - [ ] This is a refactor/code format and no logic has been changed.
            - [ ] Previous test can cover this change.
            - [ ] No code files have been changed.
            - [ ] Other reason <!-- Add your reason?  -->
    
    - Behavior changed:
        - [ ] No.
        - [ ] Yes. <!-- Explain the behavior change -->
    
    - Does this need documentation?
        - [ ] No.
    - [ ] Yes. <!-- Add document PR link here. eg:
    https://github.com/apache/doris-website/pull/1214 -->
    
    ### Check List (For Reviewer who merge this PR)
    
    - [ ] Confirm the release note
    - [ ] Confirm test cases
    - [ ] Confirm document
    - [ ] Add branch pick label <!-- Add branch pick label that this PR
    should merge into -->
---
 .../main/java/org/apache/doris/datasource/FileQueryScanNode.java  | 2 +-
 .../src/main/java/org/apache/doris/datasource/FileScanNode.java   | 8 ++++++++
 .../src/main/java/org/apache/doris/planner/FileLoadScanNode.java  | 3 ++-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
index bd312d0d612..fe8772e2341 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
@@ -172,7 +172,7 @@ public abstract class FileQueryScanNode extends 
FileScanNode {
             
slotInfo.setIsFileSlot(!partitionKeys.contains(slot.getColumn().getName()));
             params.addToRequiredSlots(slotInfo);
         }
-        setDefaultValueExprs(getTargetTable(), destSlotDescByName, params, 
false);
+        setDefaultValueExprs(getTargetTable(), destSlotDescByName, null, 
params, false);
         setColumnPositionMapping();
         // For query, set src tuple id to -1.
         params.setSrcTupleId(-1);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
index 73acb46e2de..457a580e520 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
@@ -198,6 +198,7 @@ public abstract class FileScanNode extends ExternalScanNode 
{
 
     protected void setDefaultValueExprs(TableIf tbl,
                                         Map<String, SlotDescriptor> 
slotDescByName,
+                                        Map<String, Expr> exprByName,
                                         TFileScanRangeParams params,
                                         boolean useVarcharAsNull) throws 
UserException {
         Preconditions.checkNotNull(tbl);
@@ -225,6 +226,13 @@ public abstract class FileScanNode extends 
ExternalScanNode {
                     expr = null;
                 }
             }
+            // if there is already an expr , just skip it.
+            // eg:
+            // (a, b, c, c=to_bitmap(c)) in stream load
+            // c will be filled with to_bitmap(column c) , don't need to 
specify it.
+            if (exprByName != null && 
exprByName.containsKey(column.getName())) {
+                continue;
+            }
             SlotDescriptor slotDesc = slotDescByName.get(column.getName());
             // if slot desc is null, which mean it is an unrelated slot, just 
skip.
             // eg:
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/FileLoadScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/FileLoadScanNode.java
index 16f388a058c..4047c8f30b3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/FileLoadScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/FileLoadScanNode.java
@@ -131,7 +131,8 @@ public class FileLoadScanNode extends FileScanNode {
             // FIXME(cmy): we should support set different expr for different 
file group.
             
initAndSetPrecedingFilter(context.fileGroup.getPrecedingFilterExpr(), 
context.srcTupleDescriptor, analyzer);
             initAndSetWhereExpr(context.fileGroup.getWhereExpr(), 
context.destTupleDescriptor, analyzer);
-            setDefaultValueExprs(scanProvider.getTargetTable(), 
context.srcSlotDescByName, context.params, true);
+            setDefaultValueExprs(scanProvider.getTargetTable(), 
context.srcSlotDescByName,
+                    context.exprMap, context.params, true);
             this.contexts.add(context);
         }
     }


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

Reply via email to