Skip to content

Commit 1e89124

Browse files
branch-4.0: [opt](varbinary) support multi_distinct_count about varbinary and add conf mapping iceberg uuid #59406 (#59483)
Cherry-picked from #59406 Co-authored-by: zhangstar333 <zhangsida@selectdb.com>
1 parent 267abae commit 1e89124

File tree

5 files changed

+17
-8
lines changed

5 files changed

+17
-8
lines changed

be/src/vec/aggregate_functions/aggregate_function_uniq.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ AggregateFunctionPtr create_aggregate_function_uniq(const std::string& name,
4040
return creator_with_type_list<
4141
TYPE_BOOLEAN, TYPE_TINYINT, TYPE_SMALLINT, TYPE_INT, TYPE_BIGINT, TYPE_LARGEINT,
4242
TYPE_DECIMAL32, TYPE_DECIMAL64, TYPE_DECIMAL128I, TYPE_DECIMAL256, TYPE_VARCHAR,
43-
TYPE_ARRAY, TYPE_FLOAT, TYPE_DOUBLE, TYPE_DATEV2, TYPE_DATETIMEV2,
44-
TYPE_TIMESTAMPTZ>::create<AggregateFunctionUniq, Data>(argument_types,
45-
result_is_nullable, attr);
43+
TYPE_ARRAY, TYPE_FLOAT, TYPE_DOUBLE, TYPE_DATEV2, TYPE_DATETIMEV2, TYPE_TIMESTAMPTZ,
44+
TYPE_VARBINARY>::create<AggregateFunctionUniq, Data>(argument_types, result_is_nullable,
45+
attr);
4646
}
4747

4848
void register_aggregate_function_uniq(AggregateFunctionSimpleFactory& factory) {

be/src/vec/aggregate_functions/aggregate_function_uniq.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <vector>
2929

3030
#include "common/compiler_util.h" // IWYU pragma: keep
31+
#include "runtime/primitive_type.h"
3132
#include "vec/aggregate_functions/aggregate_function.h"
3233
#include "vec/columns/column.h"
3334
#include "vec/columns/column_vector.h"
@@ -56,7 +57,7 @@ class ColumnDecimal;
5657

5758
template <PrimitiveType T>
5859
struct AggregateFunctionUniqExactData {
59-
static constexpr bool is_string_key = is_string_type(T);
60+
static constexpr bool is_string_key = is_string_type(T) || is_varbinary(T);
6061
using Key = std::conditional_t<
6162
is_string_key, UInt128,
6263
std::conditional_t<T == TYPE_ARRAY, UInt64,
@@ -91,7 +92,7 @@ namespace detail {
9192
template <PrimitiveType T, typename Data>
9293
struct OneAdder {
9394
static void ALWAYS_INLINE add(Data& data, const IColumn& column, size_t row_num) {
94-
if constexpr (is_string_type(T)) {
95+
if constexpr (is_string_type(T) || is_varbinary(T)) {
9596
StringRef value = column.get_data_at(row_num);
9697
data.set.insert(Data::get_key(value));
9798
} else if constexpr (T == TYPE_ARRAY) {
@@ -119,7 +120,7 @@ class AggregateFunctionUniq final
119120
NotNullableAggregateFunction {
120121
public:
121122
using KeyType =
122-
std::conditional_t<is_string_type(T), UInt128,
123+
std::conditional_t<is_string_type(T) || is_varbinary(T), UInt128,
123124
std::conditional_t<T == TYPE_ARRAY, UInt64,
124125
typename PrimitiveTypeTraits<T>::ColumnItemType>>;
125126
AggregateFunctionUniq(const DataTypes& argument_types_)
@@ -138,7 +139,7 @@ class AggregateFunctionUniq final
138139

139140
static ALWAYS_INLINE const KeyType* get_keys(std::vector<KeyType>& keys_container,
140141
const IColumn& column, size_t batch_size) {
141-
if constexpr (is_string_type(T)) {
142+
if constexpr (is_string_type(T) || is_varbinary(T)) {
142143
keys_container.resize(batch_size);
143144
for (size_t i = 0; i != batch_size; ++i) {
144145
StringRef value = column.get_data_at(i);

fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ private static Type icebergPrimitiveTypeToDorisType(org.apache.iceberg.types.Typ
572572
case STRING:
573573
return Type.STRING;
574574
case UUID:
575-
return ScalarType.createVarbinaryType(16);
575+
return enableMappingVarbinary ? ScalarType.createVarbinaryType(16) : Type.STRING;
576576
case BINARY:
577577
return enableMappingVarbinary ? ScalarType.createVarbinaryType(VarBinaryType.MAX_VARBINARY_LENGTH)
578578
: Type.STRING;
Binary file not shown.

regression-test/suites/external_table_p0/iceberg/test_iceberg_varbinary.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,12 @@ suite("test_iceberg_varbinary", "p0,external,doris,external_docker,external_dock
149149
qt_select19 """
150150
select * from test_ice_uuid_parquet_write_with_mapping order by id;
151151
"""
152+
153+
qt_select21 """
154+
select multi_distinct_count(col2),multi_distinct_count(col1) from test_ice_uuid_orc;
155+
"""
156+
157+
qt_select22 """
158+
select multi_distinct_count(col2),multi_distinct_count(col1) from test_ice_uuid_parquet;
159+
"""
152160
}

0 commit comments

Comments
 (0)