andimiller commented on code in PR #10427:
URL: https://github.com/apache/pinot/pull/10427#discussion_r1140475437
##########
pinot-core/src/main/java/org/apache/pinot/core/function/scalar/SketchFunctions.java:
##########
@@ -131,4 +133,49 @@ public static byte[] toHLL(@Nullable Object input, int
log2m) {
}
return ObjectSerDeUtils.HYPER_LOG_LOG_SER_DE.serialize(hll);
}
+
+ /**
+ * Create a Tuple Sketch containing the key and value supplied
+ *
+ * @param key an Object we want to insert as the key of the sketch, may be
null to return an empty sketch
+ * @param value an Integer we want to associate as the value to go along
with the key, may be null to return an
+ * empty sketch
+ * @return serialized tuple sketch as bytes
+ */
+ @ScalarFunction(nullableParameters = true)
+ public static byte[] toIntegerSumTupleSketch(@Nullable Object key, @Nullable
Integer value) {
+ return toIntegerSumTupleSketch(key, value,
CommonConstants.Helix.DEFAULT_TUPLE_SKETCH_LGK);
+ }
+
+ /**
+ * Create a Tuple Sketch containing the key and value supplied
+ *
+ * @param key an Object we want to insert as the key of the sketch, may be
null to return an empty sketch
+ * @param value an Integer we want to associate as the value to go along
with the key, may be null to return an
+ * empty sketch
+ * @param lgK integer representing the log of the maximum number of retained
entries in the sketch, between 4 and 26
+ * @return serialized tuple sketch as bytes
+ */
+ @ScalarFunction(nullableParameters = true)
+ public static byte[] toIntegerSumTupleSketch(@Nullable Object key, Integer
value, int lgK) {
+ IntegerSketch is = new IntegerSketch(lgK, IntegerSummary.Mode.Sum);
+ if (value != null) {
+ if (key instanceof Integer) {
+ is.update((Integer) key, value);
+ } else if (key instanceof Long) {
+ is.update((Long) key, value);
+ } else if (key instanceof Float) {
+ is.update((float) key, value);
+ } else if (key instanceof Double) {
+ is.update((double) key, value);
+ } else if (key instanceof BigDecimal) {
+ is.update(((BigDecimal) key).toString(), value);
+ } else if (key instanceof String) {
+ is.update((String) key, value);
+ } else if (key instanceof byte[]) {
+ is.update((byte[]) key, value);
+ }
Review Comment:
done, added it for theta too and expanded the tests to cover
--
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]