xiaokang commented on code in PR #17389:
URL: https://github.com/apache/doris/pull/17389#discussion_r1124173329


##########
be/src/vec/sink/vtablet_sink.cpp:
##########
@@ -1058,13 +1146,34 @@ Status VOlapTableSink::send(RuntimeState* state, 
vectorized::Block* input_block,
         _convert_to_dest_desc_block(&block);
     }
 
+    // Load to single tablet
+    if (findTabletMode == FindTabletMode::FIND_TABLET_EVERY_SINK) {
+        if (filtered_rows > 0) {
+            // Filter block
+            auto filter = vectorized::ColumnUInt8::create(block.rows(), 0);
+            vectorized::UInt8* filter_data =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data().data();
+            vectorized::IColumn::Filter& filter_col =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data();
+            for (size_t i = 0; i < filter_col.size(); ++i) {
+                filter_data[i] = !_filter_bitmap.Get(i);
+            }
+            vectorized::Block::filter_block_internal(&block, filter_col, 
block.columns());
+        }
+        VLOG_DEBUG << "send block by append block";
+        RETURN_IF_ERROR(_append_block_to_single_tablet(state, block));
+        input_block->clear();
+        // recalcute tablet each time
+        _partition_to_tablet_map.clear();

Review Comment:
   should not clear _partition_to_tablet_map for FIND_TABLET_EVERY_SINK



##########
be/src/vec/sink/vtablet_sink.cpp:
##########
@@ -1058,13 +1146,34 @@ Status VOlapTableSink::send(RuntimeState* state, 
vectorized::Block* input_block,
         _convert_to_dest_desc_block(&block);
     }
 
+    // Load to single tablet
+    if (findTabletMode == FindTabletMode::FIND_TABLET_EVERY_SINK) {
+        if (filtered_rows > 0) {
+            // Filter block
+            auto filter = vectorized::ColumnUInt8::create(block.rows(), 0);
+            vectorized::UInt8* filter_data =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data().data();
+            vectorized::IColumn::Filter& filter_col =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data();
+            for (size_t i = 0; i < filter_col.size(); ++i) {
+                filter_data[i] = !_filter_bitmap.Get(i);
+            }
+            vectorized::Block::filter_block_internal(&block, filter_col, 
block.columns());
+        }
+        VLOG_DEBUG << "send block by append block";
+        RETURN_IF_ERROR(_append_block_to_single_tablet(state, block));

Review Comment:
   try to reuse the code bellow to avoid duplicated code



##########
be/src/vec/exec/format/json/new_json_reader.cpp:
##########
@@ -24,6 +24,7 @@
 #include "olap/iterators.h"
 #include "runtime/descriptors.h"
 #include "runtime/runtime_state.h"
+#include "util/defer_op.h"

Review Comment:
   unrelated code



##########
be/src/vec/sink/vtablet_sink.cpp:
##########
@@ -1058,13 +1146,34 @@ Status VOlapTableSink::send(RuntimeState* state, 
vectorized::Block* input_block,
         _convert_to_dest_desc_block(&block);
     }
 
+    // Load to single tablet
+    if (findTabletMode == FindTabletMode::FIND_TABLET_EVERY_SINK) {
+        if (filtered_rows > 0) {
+            // Filter block
+            auto filter = vectorized::ColumnUInt8::create(block.rows(), 0);
+            vectorized::UInt8* filter_data =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data().data();
+            vectorized::IColumn::Filter& filter_col =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data();
+            for (size_t i = 0; i < filter_col.size(); ++i) {
+                filter_data[i] = !_filter_bitmap.Get(i);
+            }
+            vectorized::Block::filter_block_internal(&block, filter_col, 
block.columns());
+        }
+        VLOG_DEBUG << "send block by append block";
+        RETURN_IF_ERROR(_append_block_to_single_tablet(state, block));
+        input_block->clear();
+        // recalcute tablet each time
+        _partition_to_tablet_map.clear();
+        return Status::OK();
+    }
+
     SCOPED_RAW_TIMER(&_send_data_ns);
-    // This is just for passing compilation.
-    bool stop_processing = false;
     if (findTabletMode == FindTabletMode::FIND_TABLET_EVERY_BATCH) {
         _partition_to_tablet_map.clear();
     }
-
+    // This is just for passing compilation.
+    bool stop_processing = false;

Review Comment:
   useless code move 



##########
be/src/vec/sink/vtablet_sink.cpp:
##########
@@ -1058,13 +1146,34 @@ Status VOlapTableSink::send(RuntimeState* state, 
vectorized::Block* input_block,
         _convert_to_dest_desc_block(&block);
     }
 
+    // Load to single tablet
+    if (findTabletMode == FindTabletMode::FIND_TABLET_EVERY_SINK) {
+        if (filtered_rows > 0) {
+            // Filter block
+            auto filter = vectorized::ColumnUInt8::create(block.rows(), 0);
+            vectorized::UInt8* filter_data =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data().data();
+            vectorized::IColumn::Filter& filter_col =
+                    
static_cast<vectorized::ColumnUInt8*>(filter.get())->get_data();
+            for (size_t i = 0; i < filter_col.size(); ++i) {
+                filter_data[i] = !_filter_bitmap.Get(i);
+            }
+            vectorized::Block::filter_block_internal(&block, filter_col, 
block.columns());
+        }
+        VLOG_DEBUG << "send block by append block";
+        RETURN_IF_ERROR(_append_block_to_single_tablet(state, block));
+        input_block->clear();
+        // recalcute tablet each time
+        _partition_to_tablet_map.clear();

Review Comment:
   it's FIND_TABLET_EVERY_BATCH for choosing tablet for each block



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to