diff --git a/be/src/exec/olap_scanner.cpp b/be/src/exec/olap_scanner.cpp index a5f29970eaf176..6b92f9813a531b 100644 --- a/be/src/exec/olap_scanner.cpp +++ b/be/src/exec/olap_scanner.cpp @@ -153,7 +153,11 @@ Status OlapScanner::_init_tablet_reader_params( ->rowset_meta() ->is_segments_overlapping()); - _tablet_reader_params.direct_mode = single_version || _aggregation; + if (_runtime_state->agg_as_duplicate()) { + _tablet_reader_params.direct_mode = true; + } else { + _tablet_reader_params.direct_mode = single_version || _aggregation; + } RETURN_IF_ERROR(_init_return_columns(!_tablet_reader_params.direct_mode)); diff --git a/be/src/runtime/runtime_state.h b/be/src/runtime/runtime_state.h index 4f03a206e0adf0..2bbd8bd58ad5a9 100644 --- a/be/src/runtime/runtime_state.h +++ b/be/src/runtime/runtime_state.h @@ -357,6 +357,10 @@ class RuntimeState { return _query_options.enable_enable_exchange_node_parallel_merge; } + bool agg_as_duplicate() const { + return _query_options.agg_as_duplicate; + } + // the following getters are only valid after Prepare() InitialReservations* initial_reservations() const { return _initial_reservations; } diff --git a/docs/en/administrator-guide/variables.md b/docs/en/administrator-guide/variables.md index 3eb2ac31216272..c525b389ebd3be 100644 --- a/docs/en/administrator-guide/variables.md +++ b/docs/en/administrator-guide/variables.md @@ -496,4 +496,7 @@ Translated with www.DeepL.com/Translator (free version) SM4_128_CFB128, SM4_128_OFB, SM4_128_CTR, -``` \ No newline at end of file +``` + +* `agg_as_duplicate` + For debugging purpose. In case of problems of reading data of Aggregate Key model and Unique Key model, setting value to `true` will read data as Duplicate Key model. \ No newline at end of file diff --git a/docs/zh-CN/administrator-guide/variables.md b/docs/zh-CN/administrator-guide/variables.md index 219e86049e326c..6b39eb4e10d72b 100644 --- a/docs/zh-CN/administrator-guide/variables.md +++ b/docs/zh-CN/administrator-guide/variables.md @@ -490,3 +490,5 @@ SELECT /*+ SET_VAR(query_timeout = 1, enable_partition_cache=true) */ sleep(3); 用于控制是否进行谓词推导。取值有两种:true 和 false。默认情况下关闭,系统不在进行谓词推导,采用原始的谓词进行相关操作。设置为 true 后,进行谓词扩展。 +* `agg_as_duplicate` + 用于调试目的。当发现读取Aggregate Key模型或者Unique Key模型的数据结果有问题的时候,把此变量的值设置为`true`,将会把Aggregate Key模型或者Unique Key模型的数据当成Duplicate Key模型读取。 diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 204ce8dbaa9063..df86e37bbce55c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -189,6 +189,8 @@ public class SessionVariable implements Serializable, Writable { static final String SESSION_CONTEXT = "session_context"; + static final String AGG_AS_DUPLICATE = "agg_as_duplicate"; + // session origin value public Map sessionOriginValue = new HashMap(); // check stmt is or not [select /*+ SET_VAR(...)*/ ...] @@ -463,6 +465,12 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = SESSION_CONTEXT, needForward = true) public String sessionContext = ""; + /** + * For debugg purpose, dont' merge unique key and agg key when reading data. + */ + @VariableMgr.VarAttr(name = AGG_AS_DUPLICATE) + private boolean aggAsDuplicate = false; + public String getBlockEncryptionMode() { return blockEncryptionMode; } @@ -970,6 +978,8 @@ public TQueryOptions toThrift() { tResult.setResourceLimit(resourceLimit); } + tResult.setAggAsDuplicate(aggAsDuplicate); + return tResult; } diff --git a/gensrc/thrift/PaloInternalService.thrift b/gensrc/thrift/PaloInternalService.thrift index aa1576b95a3419..27ac7259ebd856 100644 --- a/gensrc/thrift/PaloInternalService.thrift +++ b/gensrc/thrift/PaloInternalService.thrift @@ -163,6 +163,9 @@ struct TQueryOptions { // trim tailing spaces while querying external table and stream load 44: optional bool trim_tailing_spaces_for_external_table_query = false + + // For debug purpose, dont' merge unique key and agg key when reading data. + 45: optional bool agg_as_duplicate = false }