Fix distinct by single LowCardinality numeric column.

This commit is contained in:
Nikolai Kochetov 2019-01-09 17:47:51 +03:00
parent 06095340c7
commit 5ab362a303
4 changed files with 132 additions and 2 deletions

View File

@ -133,7 +133,7 @@ public:
} }
bool valuesHaveFixedSize() const override { return getDictionary().valuesHaveFixedSize(); } bool valuesHaveFixedSize() const override { return getDictionary().valuesHaveFixedSize(); }
bool isFixedAndContiguous() const override { return getDictionary().isFixedAndContiguous(); } bool isFixedAndContiguous() const override { return false; }
size_t sizeOfValueIfFixed() const override { return getDictionary().sizeOfValueIfFixed(); } size_t sizeOfValueIfFixed() const override { return getDictionary().sizeOfValueIfFixed(); }
bool isNumeric() const override { return getDictionary().isNumeric(); } bool isNumeric() const override { return getDictionary().isNumeric(); }
bool lowCardinality() const override { return true; } bool lowCardinality() const override { return true; }

View File

@ -137,7 +137,7 @@ typename SetVariantsTemplate<Variant>::Type SetVariantsTemplate<Variant>::choose
} }
/// If there is one numeric key that fits into 64 bits /// If there is one numeric key that fits into 64 bits
if (keys_size == 1 && nested_key_columns[0]->isNumeric()) if (keys_size == 1 && nested_key_columns[0]->isNumeric() && !nested_key_columns[0]->lowCardinality())
{ {
size_t size_of_field = nested_key_columns[0]->sizeOfValueIfFixed(); size_t size_of_field = nested_key_columns[0]->sizeOfValueIfFixed();
if (size_of_field == 1) if (size_of_field == 1)

View File

@ -0,0 +1,123 @@
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

View File

@ -0,0 +1,7 @@
set allow_experimental_low_cardinality_type = 1;
drop table if exists test.lc;
create table test.lc (val LowCardinality(UInt64)) engine = MergeTree order by val;
insert into test.lc select number % 123 from system.numbers limit 100000;
select distinct(val) from test.lc order by val;
drop table if exists test.lc;