Impala
Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
aggregate-functions.h
Go to the documentation of this file.
1 // Copyright 2012 Cloudera Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 
16 #ifndef IMPALA_EXPRS_AGGREGATE_FUNCTIONS_H
17 #define IMPALA_EXPRS_AGGREGATE_FUNCTIONS_H
18 
19 #include "udf/udf-internal.h"
20 
21 using namespace impala_udf;
22 
23 namespace impala {
24 
31  public:
33  static void InitNull(FunctionContext*, AnyVal* dst);
35  static void InitNullString(FunctionContext* c, StringVal* dst);
36 
38  template <typename T>
39  static void InitZero(FunctionContext*, T* dst);
40 
42  static StringVal StringValGetValue(FunctionContext* ctx, const StringVal& src);
43 
45  static StringVal StringValSerializeOrFinalize(
46  FunctionContext* ctx, const StringVal& src);
47 
49  static void CountUpdate(FunctionContext*, const AnyVal& src, BigIntVal* dst);
50  static void CountStarUpdate(FunctionContext*, BigIntVal* dst);
51  static void CountRemove(FunctionContext*, const AnyVal& src, BigIntVal* dst);
52  static void CountStarRemove(FunctionContext*, BigIntVal* dst);
53  static void CountMerge(FunctionContext*, const BigIntVal& src, BigIntVal* dst);
54 
57  static void AvgInit(FunctionContext* ctx, StringVal* dst);
58  template <typename T>
59  static void AvgUpdate(FunctionContext* ctx, const T& src, StringVal* dst);
60  template <typename T>
61  static void AvgRemove(FunctionContext* ctx, const T& src, StringVal* dst);
62  static void AvgMerge(FunctionContext* ctx, const StringVal& src, StringVal* dst);
63  static DoubleVal AvgGetValue(FunctionContext* ctx, const StringVal& val);
64  static DoubleVal AvgFinalize(FunctionContext* ctx, const StringVal& val);
65 
67  static void TimestampAvgUpdate(FunctionContext* ctx, const TimestampVal& src,
68  StringVal* dst);
69  static void TimestampAvgRemove(FunctionContext* ctx, const TimestampVal& src,
70  StringVal* dst);
71  static TimestampVal TimestampAvgGetValue(FunctionContext* ctx, const StringVal& val);
72  static TimestampVal TimestampAvgFinalize(FunctionContext* ctx, const StringVal& val);
73 
75  static void DecimalAvgInit(FunctionContext* ctx, StringVal* dst);
76  static void DecimalAvgUpdate(FunctionContext* ctx, const DecimalVal& src,
77  StringVal* dst);
78  static void DecimalAvgRemove(FunctionContext* ctx, const DecimalVal& src,
79  StringVal* dst);
80  static void DecimalAvgAddOrRemove(FunctionContext* ctx, const DecimalVal& src,
81  StringVal* dst, bool remove = false);
82  static void DecimalAvgMerge(FunctionContext* ctx, const StringVal& src,
83  StringVal* dst);
84  static DecimalVal DecimalAvgGetValue(FunctionContext* ctx, const StringVal& val);
85  static DecimalVal DecimalAvgFinalize(FunctionContext* ctx, const StringVal& val);
86 
88  template <typename SRC_VAL, typename DST_VAL>
89  static void SumUpdate(FunctionContext*, const SRC_VAL& src, DST_VAL* dst);
90 
91  template <typename SRC_VAL, typename DST_VAL>
92  static void SumRemove(FunctionContext*, const SRC_VAL& src, DST_VAL* dst);
93 
95  static void SumDecimalUpdate(FunctionContext*, const DecimalVal& src, DecimalVal* dst);
96  static void SumDecimalRemove(FunctionContext*, const DecimalVal& src, DecimalVal* dst);
97  static void SumDecimalMerge(FunctionContext*, const DecimalVal& src, DecimalVal* dst);
99  static void SumDecimalAddOrSubtract(FunctionContext*, const DecimalVal& src,
100  DecimalVal* dst, bool subtract = false);
101 
103  template <typename T>
104  static void Min(FunctionContext*, const T& src, T* dst);
105 
107  template <typename T>
108  static void Max(FunctionContext*, const T& src, T* dst);
109 
111  static void StringConcatUpdate(FunctionContext*,
112  const StringVal& src, StringVal* result);
113  static void StringConcatUpdate(FunctionContext*,
114  const StringVal& src, const StringVal& separator, StringVal* result);
115  static void StringConcatMerge(FunctionContext*,
116  const StringVal& src, StringVal* result);
118  const StringVal& src);
119 
123  static void PcInit(FunctionContext*, StringVal* slot);
124 
125  template <typename T>
126  static void PcUpdate(FunctionContext*, const T& src, StringVal* dst);
127  template <typename T>
128  static void PcsaUpdate(FunctionContext*, const T& src, StringVal* dst);
129 
130  static void PcMerge(FunctionContext*, const StringVal& src, StringVal* dst);
131  static BigIntVal PcFinalize(FunctionContext*, const StringVal& src);
132  static BigIntVal PcsaFinalize(FunctionContext*, const StringVal& src);
133 
142  template <typename T>
143  static void ReservoirSampleInit(FunctionContext*, StringVal* slot);
144  template <typename T>
145  static void ReservoirSampleUpdate(FunctionContext*, const T& src, StringVal* dst);
146  template <typename T>
147  static void ReservoirSampleMerge(FunctionContext*, const StringVal& src,
148  StringVal* dst);
149  template <typename T>
150  static const StringVal ReservoirSampleSerialize(FunctionContext*,
151  const StringVal& src);
152 
154  template <typename T>
155  static StringVal ReservoirSampleFinalize(FunctionContext*, const StringVal& src);
156 
158  template <typename T>
159  static T AppxMedianFinalize(FunctionContext*, const StringVal& src);
160 
166  template <typename T>
167  static StringVal HistogramFinalize(FunctionContext*, const StringVal& src);
168 
174  static const int HLL_PRECISION;
175  static const int HLL_LEN;
176  static void HllInit(FunctionContext*, StringVal* slot);
177  template <typename T>
178  static void HllUpdate(FunctionContext*, const T& src, StringVal* dst);
179  static void HllMerge(FunctionContext*, const StringVal& src, StringVal* dst);
180  static BigIntVal HllFinalize(FunctionContext*, const StringVal& src);
181 
184  static uint64_t HllFinalEstimate(const uint8_t* buckets, int32_t num_buckets);
185 
189  static void KnuthVarInit(FunctionContext* context, StringVal* val);
190  template <typename T>
191  static void KnuthVarUpdate(FunctionContext* context, const T& input, StringVal* val);
192  static void KnuthVarMerge(FunctionContext* context, const StringVal& src,
193  StringVal* dst);
194  static DoubleVal KnuthVarFinalize(FunctionContext* context, const StringVal& val);
195 
197  static DoubleVal KnuthVarPopFinalize(FunctionContext* context, const StringVal& val);
198 
200  static DoubleVal KnuthStddevFinalize(FunctionContext* context, const StringVal& val);
201 
203  static DoubleVal KnuthStddevPopFinalize(FunctionContext* context, const StringVal& val);
204 
205 
212 
214  static void RankInit(FunctionContext*, StringVal* slot);
215 
217  static void RankUpdate(FunctionContext*, StringVal* dst);
218 
220  static void DenseRankUpdate(FunctionContext*, StringVal* dst);
221 
223  static BigIntVal RankGetValue(FunctionContext*, StringVal& src);
224 
228  static BigIntVal DenseRankGetValue(FunctionContext*, StringVal& src);
229 
231  static BigIntVal RankFinalize(FunctionContext*, StringVal& src);
232 
234  template <typename T>
235  static void LastValUpdate(FunctionContext*, const T& src, T* dst);
236  template <typename T>
237  static void LastValRemove(FunctionContext*, const T& src, T* dst);
238 
240  template <typename T>
241  static void FirstValUpdate(FunctionContext*, const T& src, T* dst);
245  template <typename T>
246  static void FirstValRewriteUpdate(FunctionContext*, const T& src, const BigIntVal&,
247  T* dst);
248 
251  template <typename T>
252  static void OffsetFnInit(FunctionContext*, T* dst);
253 
258  template <typename T>
259  static void OffsetFnUpdate(FunctionContext*, const T& src, const BigIntVal&, const T&,
260  T* dst);
261 };
262 
263 }
264 #endif
void CountUpdate(FunctionContext *context, const IntVal &input, BigIntVal *val)
Definition: uda-test.cc:39
void StringConcatUpdate(FunctionContext *context, const StringVal &arg1, const StringVal &arg2, StringVal *val)
Definition: uda-sample.cc:83
void HllMerge(FunctionContext *ctx, const StringVal &src, StringVal *dst)
StringVal HllFinalize(FunctionContext *ctx, const StringVal &src)
This object has a compatible storage format with boost::ptime.
Definition: udf.h:495
void HllInit(FunctionContext *ctx, StringVal *dst)
void HllUpdate(FunctionContext *ctx, const IntVal &src, StringVal *dst)
void StringConcatMerge(FunctionContext *context, const StringVal &src, StringVal *dst)
Definition: uda-sample.cc:99
void AvgInit(FunctionContext *context, BufferVal *val)
Definition: uda-sample.cc:49
StringVal StringConcatFinalize(FunctionContext *context, const StringVal &val)
Definition: uda-sample.cc:104
void CountMerge(FunctionContext *context, const BigIntVal &src, BigIntVal *dst)
Definition: uda-test.cc:45
void AvgMerge(FunctionContext *context, const BufferVal &src, BufferVal *dst)
Definition: uda-sample.cc:61
void AvgUpdate(FunctionContext *context, const DoubleVal &input, BufferVal *val)
Definition: uda-sample.cc:54
DoubleVal AvgFinalize(FunctionContext *context, const BufferVal &val)
Definition: uda-sample.cc:69