This is an automated email from the ASF dual-hosted git repository.
luchunliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new 5d4128d826 [INLONG-10607][SDK] Transform SQL support arithmetic
functions(Including log10, log2, log and exp) (#10615)
5d4128d826 is described below
commit 5d4128d8266e745a5df8580e7e1a886308d20b12
Author: LeeWY <[email protected]>
AuthorDate: Sat Jul 13 16:36:20 2024 +0800
[INLONG-10607][SDK] Transform SQL support arithmetic functions(Including
log10, log2, log and exp) (#10615)
* [INLONG-10607][SDK] Transform SQL support arithmetic functions(Including
log10, log2, log and exp)
* [INLONG-10607][SDK] Rename some variables and optimize the test code
---------
Co-authored-by: jameswyli <[email protected]>
---
.../transform/process/function/AbsFunction.java | 6 +-
.../{AbsFunction.java => ExpFunction.java} | 16 ++--
.../sdk/transform/process/function/LnFunction.java | 6 +-
.../{AbsFunction.java => Log10Function.java} | 16 ++--
.../{AbsFunction.java => Log2Function.java} | 16 ++--
.../{AbsFunction.java => LogFunction.java} | 33 +++++++--
.../transform/process/function/PowerFunction.java | 12 +--
.../transform/process/function/SqrtFunction.java | 6 +-
.../transform/process/operator/OperatorTools.java | 8 ++
.../TestTransformArithmeticFunctionsProcessor.java | 86 +++++++++++++++++++---
10 files changed, 149 insertions(+), 56 deletions(-)
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
index cc56afb85e..a94d662eae 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
*/
public class AbsFunction implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
public AbsFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,7 +49,7 @@ public class AbsFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
return numberValue.abs();
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
similarity index 77%
copy from
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
index cc56afb85e..5f542413e2 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
import java.math.BigDecimal;
/**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * ExpFunction
+ * description: exp(numeric)--returns e raised to the power of numeric
*/
-public class AbsFunction implements ValueParser {
+public class ExpFunction implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
- public AbsFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ public ExpFunction(Function expr) {
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
- return numberValue.abs();
+ return Math.exp(numberValue.doubleValue());
}
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
index fde53b6db1..d5e5ecf80b 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
*/
public class LnFunction implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
public LnFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,7 +49,7 @@ public class LnFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
return Math.log(numberValue.doubleValue());
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
similarity index 76%
copy from
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
index cc56afb85e..d390893af2 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
import java.math.BigDecimal;
/**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * Log10Function
+ * description: log10(numeric)--returns the base 10 logarithm of numeric
*/
-public class AbsFunction implements ValueParser {
+public class Log10Function implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
- public AbsFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ public Log10Function(Function expr) {
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
- return numberValue.abs();
+ return Math.log10(numberValue.doubleValue());
}
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
similarity index 76%
copy from
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
index cc56afb85e..9c502f25a5 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
import java.math.BigDecimal;
/**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * Log2Function
+ * description: log2(numeric)--returns the base 2 logarithm of numeric
*/
-public class AbsFunction implements ValueParser {
+public class Log2Function implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
- public AbsFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ public Log2Function(Function expr) {
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
- return numberValue.abs();
+ return Math.log(numberValue.doubleValue()) / Math.log(2);
}
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
similarity index 52%
copy from
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
index cc56afb85e..bc0e200255 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
@@ -21,24 +21,35 @@ import org.apache.inlong.sdk.transform.decode.SourceData;
import org.apache.inlong.sdk.transform.process.operator.OperatorTools;
import org.apache.inlong.sdk.transform.process.parser.ValueParser;
+import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Function;
import java.math.BigDecimal;
+import java.util.List;
/**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * LogFunction
+ * description: log(numeric) or log(numeric1, numeric2)--When called with one
argument, returns the natural logarithm
+ * of numeric. When called with two arguments, this function returns the
logarithm of numeric2 to the base numeric1
*/
-public class AbsFunction implements ValueParser {
+public class LogFunction implements ValueParser {
- private ValueParser number;
+ private ValueParser baseParser;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
- public AbsFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ public LogFunction(Function expr) {
+ List<Expression> expressions = expr.getParameters().getExpressions();
+ // Determine the number of arguments and build parser
+ if (expressions.size() == 1) {
+ numberParser = OperatorTools.buildParser(expressions.get(0));
+ } else {
+ baseParser = OperatorTools.buildParser(expressions.get(0));
+ numberParser = OperatorTools.buildParser(expressions.get(1));
+ }
}
/**
@@ -49,8 +60,14 @@ public class AbsFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
- return numberValue.abs();
+ if (baseParser != null) {
+ Object baseObj = baseParser.parse(sourceData, rowIndex);
+ BigDecimal baseValue = OperatorTools.parseBigDecimal(baseObj);
+ return Math.log(numberValue.doubleValue()) /
Math.log(baseValue.doubleValue());
+ } else {
+ return Math.log(numberValue.doubleValue());
+ }
}
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
index 598c8c45f1..94835f9d7b 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
@@ -31,16 +31,16 @@ import java.math.BigDecimal;
*/
public class PowerFunction implements ValueParser {
- private ValueParser base;
- private ValueParser exponent;
+ private ValueParser baseParser;
+ private ValueParser exponentParser;
/**
* Constructor
* @param expr
*/
public PowerFunction(Function expr) {
- base =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
- exponent =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(1));
+ baseParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ exponentParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(1));
}
/**
@@ -51,8 +51,8 @@ public class PowerFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object baseObj = base.parse(sourceData, rowIndex);
- Object exponentObj = exponent.parse(sourceData, rowIndex);
+ Object baseObj = baseParser.parse(sourceData, rowIndex);
+ Object exponentObj = exponentParser.parse(sourceData, rowIndex);
BigDecimal baseValue = OperatorTools.parseBigDecimal(baseObj);
BigDecimal exponentValue = OperatorTools.parseBigDecimal(exponentObj);
return Math.pow(baseValue.doubleValue(), exponentValue.doubleValue());
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
index b3038ecaba..f9e277acbd 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
*/
public class SqrtFunction implements ValueParser {
- private ValueParser number;
+ private ValueParser numberParser;
/**
* Constructor
* @param expr
*/
public SqrtFunction(Function expr) {
- number =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+ numberParser =
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
}
/**
@@ -49,7 +49,7 @@ public class SqrtFunction implements ValueParser {
*/
@Override
public Object parse(SourceData sourceData, int rowIndex) {
- Object numberObj = number.parse(sourceData, rowIndex);
+ Object numberObj = numberParser.parse(sourceData, rowIndex);
BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
return Math.sqrt(numberValue.doubleValue());
}
diff --git
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
index 6e4dbace0f..de8c9b499c 100644
---
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
+++
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
@@ -19,7 +19,11 @@ package org.apache.inlong.sdk.transform.process.operator;
import org.apache.inlong.sdk.transform.process.function.AbsFunction;
import org.apache.inlong.sdk.transform.process.function.ConcatFunction;
+import org.apache.inlong.sdk.transform.process.function.ExpFunction;
import org.apache.inlong.sdk.transform.process.function.LnFunction;
+import org.apache.inlong.sdk.transform.process.function.Log10Function;
+import org.apache.inlong.sdk.transform.process.function.Log2Function;
+import org.apache.inlong.sdk.transform.process.function.LogFunction;
import org.apache.inlong.sdk.transform.process.function.NowFunction;
import org.apache.inlong.sdk.transform.process.function.PowerFunction;
import org.apache.inlong.sdk.transform.process.function.SqrtFunction;
@@ -77,6 +81,10 @@ public class OperatorTools {
functionMap.put("abs", AbsFunction::new);
functionMap.put("sqrt", SqrtFunction::new);
functionMap.put("ln", LnFunction::new);
+ functionMap.put("log10", Log10Function::new);
+ functionMap.put("log2", Log2Function::new);
+ functionMap.put("log", LogFunction::new);
+ functionMap.put("exp", ExpFunction::new);
}
public static ExpressionOperator buildOperator(Expression expr) {
diff --git
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
index fef3d23e1f..b291d2b685 100644
---
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
+++
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
@@ -61,15 +61,15 @@ public class TestTransformArithmeticFunctionsProcessor {
// case1: 2^4
TransformProcessor processor = new TransformProcessor(config);
List<String> output1 = processor.transform("2|4|6|8", new HashMap<>());
- Assert.assertTrue(output1.size() == 1);
+ Assert.assertEquals(1, output1.size());
Assert.assertEquals(output1.get(0), "result=16.0");
// case2: 2^(-2)
List<String> output2 = processor.transform("2|-2|6|8", new
HashMap<>());
- Assert.assertTrue(output2.size() == 1);
+ Assert.assertEquals(1, output2.size());
Assert.assertEquals(output2.get(0), "result=0.25");
// case3: 4^(0.5)
List<String> output3 = processor.transform("4|0.5|6|8", new
HashMap<>());
- Assert.assertTrue(output3.size() == 1);
+ Assert.assertEquals(1, output3.size());
Assert.assertEquals(output3.get(0), "result=2.0");
}
@@ -80,11 +80,11 @@ public class TestTransformArithmeticFunctionsProcessor {
// case1: |2|
TransformProcessor processor = new TransformProcessor(config);
List<String> output1 = processor.transform("2|4|6|8", new HashMap<>());
- Assert.assertTrue(output1.size() == 1);
+ Assert.assertEquals(1, output1.size());
Assert.assertEquals(output1.get(0), "result=2");
// case2: |-4.25|
List<String> output2 = processor.transform("-4.25|4|6|8", new
HashMap<>());
- Assert.assertTrue(output2.size() == 1);
+ Assert.assertEquals(1, output2.size());
Assert.assertEquals(output2.get(0), "result=4.25");
}
@@ -95,11 +95,11 @@ public class TestTransformArithmeticFunctionsProcessor {
// case1: sqrt(9)
TransformProcessor processor = new TransformProcessor(config);
List<String> output1 = processor.transform("9|4|6|8", new HashMap<>());
- Assert.assertTrue(output1.size() == 1);
+ Assert.assertEquals(1, output1.size());
Assert.assertEquals(output1.get(0), "result=3.0");
// case2: sqrt(5)
List<String> output2 = processor.transform("5|4|6|8", new HashMap<>());
- Assert.assertTrue(output2.size() == 1);
+ Assert.assertEquals(1, output2.size());
Assert.assertEquals(output2.get(0), "result=2.23606797749979");
}
@@ -110,11 +110,79 @@ public class TestTransformArithmeticFunctionsProcessor {
// case1: ln(1)
TransformProcessor processor = new TransformProcessor(config);
List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
- Assert.assertTrue(output1.size() == 1);
+ Assert.assertEquals(1, output1.size());
Assert.assertEquals(output1.get(0), "result=0.0");
// case2: ln(10)
List<String> output2 = processor.transform("10|4|6|8", new
HashMap<>());
- Assert.assertTrue(output2.size() == 1);
+ Assert.assertEquals(1, output2.size());
Assert.assertEquals(output2.get(0), "result=2.302585092994046");
}
+
+ @Test
+ public void testLog10Function() throws Exception {
+ String transformSql = "select log10(numeric1) from source";
+ TransformConfig config = new TransformConfig(csvSource, kvSink,
transformSql);
+ // case1: log10(1)
+ TransformProcessor processor = new TransformProcessor(config);
+ List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
+ Assert.assertEquals(1, output1.size());
+ Assert.assertEquals(output1.get(0), "result=0.0");
+ // case2: log10(1000)
+ List<String> output2 = processor.transform("1000|4|6|8", new
HashMap<>());
+ Assert.assertEquals(1, output2.size());
+ Assert.assertEquals(output2.get(0), "result=3.0");
+ }
+
+ @Test
+ public void testLog2Function() throws Exception {
+ String transformSql = "select log2(numeric1) from source";
+ TransformConfig config = new TransformConfig(csvSource, kvSink,
transformSql);
+ // case1: log2(1)
+ TransformProcessor processor = new TransformProcessor(config);
+ List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
+ Assert.assertEquals(1, output1.size());
+ Assert.assertEquals(output1.get(0), "result=0.0");
+ // case2: log2(32)
+ List<String> output2 = processor.transform("32|4|6|8", new
HashMap<>());
+ Assert.assertEquals(1, output2.size());
+ Assert.assertEquals(output2.get(0), "result=5.0");
+ }
+
+ @Test
+ public void testLogFunction() throws Exception {
+ String transformSql1 = "select log(numeric1) from source";
+ TransformConfig config1 = new TransformConfig(csvSource, kvSink,
transformSql1);
+ // case1: ln(1)
+ TransformProcessor processor1 = new TransformProcessor(config1);
+ List<String> output1 = processor1.transform("1|4|6|8", new
HashMap<>());
+ Assert.assertEquals(1, output1.size());
+ Assert.assertEquals(output1.get(0), "result=0.0");
+ String transformSql2 = "select log(numeric1, numeric2) from source";
+ TransformConfig config2 = new TransformConfig(csvSource, kvSink,
transformSql2);
+ // case2: log2(8)
+ TransformProcessor processor2 = new TransformProcessor(config2);
+ List<String> output2 = processor2.transform("2|8|6|8", new
HashMap<>());
+ Assert.assertEquals(1, output2.size());
+ Assert.assertEquals(output2.get(0), "result=3.0");
+ // case3: log10(100)
+ TransformProcessor processor3 = new TransformProcessor(config2);
+ List<String> output3 = processor3.transform("10|100|6|8", new
HashMap<>());
+ Assert.assertEquals(1, output3.size());
+ Assert.assertEquals(output3.get(0), "result=2.0");
+ }
+
+ @Test
+ public void testExpFunction() throws Exception {
+ String transformSql = "select exp(numeric1) from source";
+ TransformConfig config = new TransformConfig(csvSource, kvSink,
transformSql);
+ // case1: e^0
+ TransformProcessor processor = new TransformProcessor(config);
+ List<String> output1 = processor.transform("0|4|6|8", new HashMap<>());
+ Assert.assertEquals(1, output1.size());
+ Assert.assertEquals(output1.get(0), "result=1.0");
+ // case2: e^2
+ List<String> output2 = processor.transform("2|4|6|8", new HashMap<>());
+ Assert.assertEquals(1, output2.size());
+ Assert.assertEquals(output2.get(0), "result=7.38905609893065");
+ }
}