This is an automated email from the ASF dual-hosted git repository.
nehapawar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 9e913ad [TE] Upgrade Pinot version to 0.4.0 (#5618)
9e913ad is described below
commit 9e913ade4c4919b61425952e672da3df0fd3cef9
Author: Neha Pawar <[email protected]>
AuthorDate: Fri Jun 26 13:36:20 2020 -0700
[TE] Upgrade Pinot version to 0.4.0 (#5618)
Starting 0.4.0, Pinot schemas can express time column as DateTimeFieldSpec.
Handled that in onboarding utils.
Also, fetching the primary time column from tableConfig
---
thirdeye/docs/pinot.rst | 4 +-
thirdeye/install.sh | 2 +-
thirdeye/pom.xml | 15 +++-
thirdeye/thirdeye-pinot/pom.xml | 6 +-
.../onboard/AutoOnboardPinotMetadataSource.java | 95 ++++++++++++----------
.../auto/onboard/AutoOnboardPinotMetricsUtils.java | 75 +++++++++--------
.../thirdeye/auto/onboard/ConfigGenerator.java | 44 ++++++----
.../pinot/thirdeye/common/time/TimeSpec.java | 6 +-
.../apache/pinot/thirdeye/dataframe/DataFrame.java | 4 +-
.../pinot/thirdeye/datasource/pinot/PqlUtils.java | 12 +--
.../pinot/thirdeye/datasource/sql/SqlUtils.java | 8 +-
.../pinot/thirdeye/detection/ModelRetuneFlow.java | 1 -
.../apache/pinot/thirdeye/util/ThirdEyeUtils.java | 6 +-
.../AutoOnboardPinotMetricsServiceTest.java | 63 +++++++-------
.../thirdeye/datasource/pinot/PqlUtilsTest.java | 4 +-
15 files changed, 193 insertions(+), 152 deletions(-)
diff --git a/thirdeye/docs/pinot.rst b/thirdeye/docs/pinot.rst
index 315be31..410dd20 100644
--- a/thirdeye/docs/pinot.rst
+++ b/thirdeye/docs/pinot.rst
@@ -69,7 +69,7 @@ Update the `thirdeye-pinot/config/detector.yml` file to
enable auto onboarding o
./run-backend.sh
-Note: This process may take some time. The worker process will print log
messages for each data set schema being processed. Schemas must contain a
`timeFieldSpec` in order for ThirdEye to onboard it automatically
+Note: This process may take some time. The worker process will print log
messages for each data set schema being processed. Schemas must contain a
`timeFieldSpec` or a `dateTimeFieldSpec` in order for ThirdEye to onboard it
automatically
**4: Stop the backend worker**
@@ -81,4 +81,4 @@ By pressing **Ctrl-C** in the terminal
.. code-block:: bash
- ./run-frontend.sh
\ No newline at end of file
+ ./run-frontend.sh
diff --git a/thirdeye/install.sh b/thirdeye/install.sh
index ae9f697..67ad6e8 100755
--- a/thirdeye/install.sh
+++ b/thirdeye/install.sh
@@ -2,7 +2,7 @@
# [Optional] Uncomment below lines to build with latest Pinot changes
# cd ..
-# mvn install -DskipTests -pl pinot-common,pinot-core,pinot-api -am
-Pbuild-shaded-jar || exit 1
+# mvn install -DskipTests -pl
pinot-common,pinot-core,pinot-spi,pinot-java-client -am -Pbuild-shaded-jar ||
exit 1
# cd thirdeye
echo "*******************************************************"
diff --git a/thirdeye/pom.xml b/thirdeye/pom.xml
index 38ef6a8..08eee1c 100644
--- a/thirdeye/pom.xml
+++ b/thirdeye/pom.xml
@@ -35,7 +35,7 @@
<revision>1.0.0</revision>
<sha1>-SNAPSHOT</sha1>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <pinot.version>0.1.0</pinot.version>
+ <pinot.version>0.4.0</pinot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.8</jdk.version>
<dropwizard.version>1.3.12</dropwizard.version>
@@ -171,7 +171,7 @@
<!-- project dependencies -->
<dependency>
<groupId>org.apache.pinot</groupId>
- <artifactId>pinot-api</artifactId>
+ <artifactId>pinot-java-client</artifactId>
<version>${pinot.version}</version>
<exclusions>
<exclusion>
@@ -202,6 +202,17 @@
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.apache.pinot</groupId>
+ <artifactId>pinot-spi</artifactId>
+ <version>${pinot.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-server</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<!-- hadoop specific -->
<dependency>
diff --git a/thirdeye/thirdeye-pinot/pom.xml b/thirdeye/thirdeye-pinot/pom.xml
index 0781d5d..31fd00b 100644
--- a/thirdeye/thirdeye-pinot/pom.xml
+++ b/thirdeye/thirdeye-pinot/pom.xml
@@ -106,7 +106,7 @@
<dependency>
<groupId>org.apache.pinot</groupId>
- <artifactId>pinot-api</artifactId>
+ <artifactId>pinot-spi</artifactId>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
@@ -120,6 +120,10 @@
</dependency>
<dependency>
<groupId>org.apache.pinot</groupId>
+ <artifactId>pinot-java-client</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pinot</groupId>
<artifactId>pinot-common</artifactId>
<exclusions>
<exclusion>
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetadataSource.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetadataSource.java
index 0777052..4a52d01 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetadataSource.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetadataSource.java
@@ -39,9 +39,11 @@ import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.pinot.common.data.MetricFieldSpec;
-import org.apache.pinot.common.data.Schema;
-import org.apache.pinot.common.data.TimeGranularitySpec;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
+import org.apache.pinot.spi.data.DateTimeFieldSpec.TimeFormat;
+import org.apache.pinot.spi.data.DateTimeFormatSpec;
+import org.apache.pinot.spi.data.MetricFieldSpec;
+import org.apache.pinot.spi.data.Schema;
import org.apache.pinot.thirdeye.datalayer.bao.AlertConfigManager;
import org.apache.pinot.thirdeye.datalayer.bao.DatasetConfigManager;
import org.apache.pinot.thirdeye.datalayer.bao.MetricConfigManager;
@@ -55,7 +57,7 @@ import
org.apache.pinot.thirdeye.datasource.pinot.PinotThirdEyeDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.pinot.thirdeye.auto.onboard.ConfigGenerator.*;
+import static
org.apache.pinot.thirdeye.auto.onboard.ConfigGenerator.checkNonAdditive;
/**
* This is a service to onboard datasets automatically to thirdeye from pinot
@@ -105,15 +107,17 @@ public class AutoOnboardPinotMetadataSource extends
AutoOnboard {
List<String> allDatasets = new ArrayList<>();
Map<String, Schema> allSchemas = new HashMap<>();
Map<String, Map<String, String>> allCustomConfigs = new HashMap<>();
- loadDatasets(allDatasets, allSchemas, allCustomConfigs);
+ Map<String, String> datasetToTimeColumn = new HashMap<>();
+ loadDatasets(allDatasets, allSchemas, allCustomConfigs,
datasetToTimeColumn);
LOG.info("Checking all datasets");
deactivateDatasets(allDatasets);
for (String dataset : allDatasets) {
LOG.info("Checking dataset {}", dataset);
Schema schema = allSchemas.get(dataset);
Map<String, String> customConfigs = allCustomConfigs.get(dataset);
+ String timeColumnName = datasetToTimeColumn.get(dataset);
DatasetConfigDTO datasetConfig = datasetDAO.findByDataset(dataset);
- addPinotDataset(dataset, schema, customConfigs, datasetConfig);
+ addPinotDataset(dataset, schema, timeColumnName, customConfigs,
datasetConfig);
}
} catch (Exception e) {
LOG.error("Exception in loading datasets", e);
@@ -161,31 +165,28 @@ public class AutoOnboardPinotMetadataSource extends
AutoOnboard {
/**
* Adds a dataset to the thirdeye database
- * @param dataset
- * @param schema
- * @param datasetConfig
*/
- public void addPinotDataset(String dataset, Schema schema, Map<String,
String> customConfigs,
- DatasetConfigDTO datasetConfig) throws Exception {
+ public void addPinotDataset(String dataset, Schema schema, String
timeColumnName, Map<String, String> customConfigs,
+ DatasetConfigDTO datasetConfig)
+ throws Exception {
if (datasetConfig == null) {
LOG.info("Dataset {} is new, adding it to thirdeye", dataset);
- addNewDataset(dataset, schema, customConfigs);
+ addNewDataset(dataset, schema, timeColumnName, customConfigs);
} else {
LOG.info("Dataset {} already exists, checking for updates", dataset);
- refreshOldDataset(dataset, schema, customConfigs, datasetConfig);
+ refreshOldDataset(dataset, schema, timeColumnName, customConfigs,
datasetConfig);
}
}
/**
* Adds a new dataset to the thirdeye database
- * @param dataset
- * @param schema
*/
- private void addNewDataset(String dataset, Schema schema, Map<String,
String> customConfigs) throws Exception {
+ private void addNewDataset(String dataset, Schema schema, String
timeColumnName, Map<String, String> customConfigs) {
List<MetricFieldSpec> metricSpecs = schema.getMetricFieldSpecs();
// Create DatasetConfig
- DatasetConfigDTO datasetConfigDTO =
ConfigGenerator.generateDatasetConfig(dataset, schema, customConfigs);
+ DatasetConfigDTO datasetConfigDTO =
+ ConfigGenerator.generateDatasetConfig(dataset, schema, timeColumnName,
customConfigs);
LOG.info("Creating dataset for {}", dataset);
this.datasetDAO.save(datasetConfigDTO);
@@ -200,15 +201,12 @@ public class AutoOnboardPinotMetadataSource extends
AutoOnboard {
/**
* Refreshes an existing dataset in the thirdeye database
* with any dimension/metric changes from pinot schema
- * @param dataset
- * @param schema
- * @param datasetConfig
*/
- private void refreshOldDataset(String dataset, Schema schema, Map<String,
String> customConfigs,
- DatasetConfigDTO datasetConfig) throws Exception {
+ private void refreshOldDataset(String dataset, Schema schema, String
timeColumnName,
+ Map<String, String> customConfigs, DatasetConfigDTO datasetConfig) {
checkDimensionChanges(dataset, datasetConfig, schema);
checkMetricChanges(dataset, datasetConfig, schema);
- checkTimeFieldChanges(datasetConfig, schema);
+ checkTimeFieldChanges(datasetConfig, schema, timeColumnName);
appendNewCustomConfigs(datasetConfig, customConfigs);
checkNonAdditive(datasetConfig);
datasetConfig.setActive(true);
@@ -338,16 +336,21 @@ public class AutoOnboardPinotMetadataSource extends
AutoOnboard {
}
- private void checkTimeFieldChanges(DatasetConfigDTO datasetConfig, Schema
schema) {
- TimeGranularitySpec timeSpec =
schema.getTimeFieldSpec().getOutgoingGranularitySpec();
- if (!datasetConfig.getTimeColumn().equals(timeSpec.getName())
- || !datasetConfig.getTimeFormat().equals(timeSpec.getTimeFormat())
- || datasetConfig.bucketTimeGranularity().getUnit() !=
timeSpec.getTimeType()
- || datasetConfig.bucketTimeGranularity().getSize() !=
timeSpec.getTimeUnitSize()) {
- ConfigGenerator.setTimeSpecs(datasetConfig, timeSpec);
+ private void checkTimeFieldChanges(DatasetConfigDTO datasetConfig, Schema
schema, String timeColumnName) {
+ DateTimeFieldSpec dateTimeFieldSpec =
schema.getSpecForTimeColumn(timeColumnName);
+ DateTimeFormatSpec formatSpec = new
DateTimeFormatSpec(dateTimeFieldSpec.getFormat());
+ String timeFormatStr =
formatSpec.getTimeFormat().equals(TimeFormat.SIMPLE_DATE_FORMAT) ? String
+ .format("%s:%s", TimeFormat.SIMPLE_DATE_FORMAT.toString(),
formatSpec.getSDFPattern())
+ : TimeFormat.EPOCH.toString();
+ if (!datasetConfig.getTimeColumn().equals(timeColumnName)
+ || !datasetConfig.getTimeFormat().equals(timeFormatStr)
+ || datasetConfig.bucketTimeGranularity().getUnit() !=
formatSpec.getColumnUnit()
+ || datasetConfig.bucketTimeGranularity().getSize() !=
formatSpec.getColumnSize()) {
+ ConfigGenerator.setDateTimeSpecs(datasetConfig, timeColumnName,
timeFormatStr, formatSpec.getColumnSize(),
+ formatSpec.getColumnUnit());
DAO_REGISTRY.getDatasetConfigDAO().update(datasetConfig);
LOG.info("Refreshed time field. name = {}, format = {}, type = {}, unit
size = {}.",
- timeSpec.getName(), timeSpec.getTimeType(), timeSpec.getTimeType(),
timeSpec.getTimeUnitSize());
+ timeColumnName, timeFormatStr, formatSpec.getColumnUnit(),
formatSpec.getColumnSize());
}
}
@@ -385,28 +388,36 @@ public class AutoOnboardPinotMetadataSource extends
AutoOnboard {
}
/**
- * Reads all table names in pinot, and loads their schema
- * @param allSchemas
- * @param allDatasets
- * @throws IOException
+ * For every table in Pinot, fetches the following:
+ * 1. Pinot schema
+ * 2. TimeColumnName from Pinot table config
+ * 3. Custom property map from Pinot table config
*/
private void loadDatasets(List<String> allDatasets, Map<String, Schema>
allSchemas,
- Map<String, Map<String, String>> allCustomConfigs) throws IOException {
+ Map<String, Map<String, String>> allCustomConfigs, Map<String, String>
datasetToTimeColumnMap) throws IOException {
JsonNode tables = autoLoadPinotMetricsUtils.getAllTablesFromPinot();
LOG.info("Getting all schemas");
for (JsonNode table : tables) {
String dataset = table.asText();
- Map<String, String> pinotCustomProperty =
autoLoadPinotMetricsUtils.getCustomConfigsFromPinotEndpoint(dataset);
Schema schema = autoLoadPinotMetricsUtils.getSchemaFromPinot(dataset);
if (schema != null) {
- if (!autoLoadPinotMetricsUtils.verifySchemaCorrectness(schema)) {
+ JsonNode tableConfigJson =
autoLoadPinotMetricsUtils.getTableConfigFromPinotEndpoint(dataset);
+ String timeColumnName = null;
+ Map<String, String> pinotCustomProperty = null;
+ if (tableConfigJson != null && !tableConfigJson.isNull()) {
+ timeColumnName =
autoLoadPinotMetricsUtils.extractTimeColumnFromPinotTable(tableConfigJson);
+ pinotCustomProperty =
+
autoLoadPinotMetricsUtils.extractCustomConfigsFromPinotTable(tableConfigJson);
+ }
+ if (!autoLoadPinotMetricsUtils.verifySchemaCorrectness(schema,
timeColumnName)) {
LOG.info("Skipping {} due to incorrect schema", dataset);
- } else {
- allDatasets.add(dataset);
- allSchemas.put(dataset, schema);
- allCustomConfigs.put(dataset, pinotCustomProperty);
+ continue;
}
+ allDatasets.add(dataset);
+ allSchemas.put(dataset, schema);
+ allCustomConfigs.put(dataset, pinotCustomProperty);
+ datasetToTimeColumnMap.put(dataset, timeColumnName);
}
}
}
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsUtils.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsUtils.java
index 2b489bd..c31bca9 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsUtils.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsUtils.java
@@ -19,12 +19,9 @@
package org.apache.pinot.thirdeye.auto.onboard;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.pinot.common.data.Schema;
-import org.apache.pinot.thirdeye.datasource.DataSourceConfig;
-import org.apache.pinot.thirdeye.datasource.MetadataSourceConfig;
-import
org.apache.pinot.thirdeye.datasource.pinot.PinotThirdEyeDataSourceConfig;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@@ -34,8 +31,8 @@ import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
+import javax.annotation.Nullable;
import javax.net.ssl.SSLContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
@@ -47,6 +44,9 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.thirdeye.datasource.MetadataSourceConfig;
+import
org.apache.pinot.thirdeye.datasource.pinot.PinotThirdEyeDataSourceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -156,25 +156,18 @@ public class AutoOnboardPinotMetricsUtils {
return schema;
}
- public boolean verifySchemaCorrectness(Schema schema) {
- boolean isSchemaCorrect = true;
- if (StringUtils.isBlank(schema.getSchemaName()) ||
schema.getTimeFieldSpec() == null
- || schema.getTimeFieldSpec().getOutgoingGranularitySpec() == null) {
- isSchemaCorrect = false;
+ /**
+ * Verify schema name and presence of field spec for time column
+ */
+ public boolean verifySchemaCorrectness(Schema schema, @Nullable String
timeColumnName) {
+ if (StringUtils.isBlank(schema.getSchemaName()) || timeColumnName == null
+ || schema.getSpecForTimeColumn(timeColumnName) == null) {
+ return false;
}
- return isSchemaCorrect;
+ return true;
}
- /**
- * Returns the map of custom configs of the given dataset from the table
config on Pinot.
- *
- * @param dataset the target dataset
- *
- * @return the field, which is a Map of string to string, of custom config
on Pinot's table config
- *
- * @throws IOException if this method fails to connect to Pinot endpoint.
- */
- public Map<String, String> getCustomConfigsFromPinotEndpoint(String dataset)
throws IOException {
+ public JsonNode getTableConfigFromPinotEndpoint(String dataset) throws
IOException {
HttpGet request = new
HttpGet(String.format(PINOT_TABLES_ENDPOINT_TEMPLATE, dataset));
CloseableHttpResponse response =
pinotControllerClient.execute(pinotControllerHost, request);
LOG.debug("Retrieving dataset's custom config: {}", request);
@@ -196,27 +189,37 @@ public class AutoOnboardPinotMetricsUtils {
response.close();
}
- // Parse custom config
- Map<String, String> customConfigs = Collections.emptyMap();
+ JsonNode tableJson = null;
if (tables != null) {
- JsonNode table = tables.get("REALTIME");
- if (table == null || table.isNull()) {
- table = tables.get("OFFLINE");
- }
- if (table != null && !table.isNull()) {
- try {
- JsonNode jsonNode = table.get("metadata").get("customConfigs");
- customConfigs = OBJECT_MAPPER.convertValue(jsonNode, HashMap.class);
- } catch (Exception e) {
- LOG.warn("Failed to get custom config for dataset: {}. Reason: {}",
dataset, e);
- }
- } else {
- LOG.debug("Dataset {} doesn't exists in Pinot.", dataset);
+ tableJson = tables.get("REALTIME");
+ if (tableJson == null || tableJson.isNull()) {
+ tableJson = tables.get("OFFLINE");
}
}
+ return tableJson;
+ }
+
+ /**
+ * Returns the map of custom configs of the given dataset from the Pinot
table config json.
+ */
+ public Map<String, String> extractCustomConfigsFromPinotTable(JsonNode
tableConfigJson) {
+
+ Map<String, String> customConfigs = Collections.emptyMap();
+ try {
+ JsonNode jsonNode = tableConfigJson.get("metadata").get("customConfigs");
+ customConfigs = OBJECT_MAPPER.convertValue(jsonNode, new
TypeReference<Map<String, String>>() {
+ });
+ } catch (Exception e) {
+ LOG.warn("Failed to get custom config from table: {}. Reason: {}",
tableConfigJson, e);
+ }
return customConfigs;
}
+ public String extractTimeColumnFromPinotTable(JsonNode tableConfigJson) {
+ JsonNode timeColumnNode =
tableConfigJson.get("segmentsConfig").get("timeColumnName");
+ return (timeColumnNode != null && !timeColumnNode.isNull()) ?
timeColumnNode.asText() : null;
+ }
+
/**
* This class accepts (i.e., ignores) all SSL certificate.
*/
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/ConfigGenerator.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/ConfigGenerator.java
index 6f0dd89..65f55b0 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/ConfigGenerator.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/auto/onboard/ConfigGenerator.java
@@ -19,14 +19,17 @@
package org.apache.pinot.thirdeye.auto.onboard;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
-import org.apache.pinot.common.data.MetricFieldSpec;
-import org.apache.pinot.common.data.Schema;
-import org.apache.pinot.common.data.TimeGranularitySpec;
-import org.apache.pinot.common.data.TimeGranularitySpec.TimeFormat;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
+import org.apache.pinot.spi.data.DateTimeFieldSpec.TimeFormat;
+import org.apache.pinot.spi.data.DateTimeFormatSpec;
+import org.apache.pinot.spi.data.MetricFieldSpec;
+import org.apache.pinot.spi.data.Schema;
import org.apache.pinot.thirdeye.common.metric.MetricType;
import org.apache.pinot.thirdeye.common.time.TimeGranularity;
import org.apache.pinot.thirdeye.common.time.TimeSpec;
@@ -44,15 +47,24 @@ public class ConfigGenerator {
private static final String NON_ADDITIVE = "non_additive";
private static final String PINOT_PRE_AGGREGATED_KEYWORD = "*";
- public static void setTimeSpecs(DatasetConfigDTO datasetConfigDTO,
TimeGranularitySpec timeSpec) {
- datasetConfigDTO.setTimeColumn(timeSpec.getName());
- datasetConfigDTO.setTimeDuration(timeSpec.getTimeUnitSize());
- datasetConfigDTO.setTimeUnit(timeSpec.getTimeType());
- datasetConfigDTO.setTimeFormat(timeSpec.getTimeFormat());
-
datasetConfigDTO.setExpectedDelay(getExpectedDelayFromTimeunit(timeSpec.getTimeType()));
- if
(timeSpec.getTimeFormat().startsWith(TimeFormat.SIMPLE_DATE_FORMAT.toString())
|| timeSpec.getTimeFormat().equals(TimeSpec.SINCE_EPOCH_FORMAT)) {
- datasetConfigDTO.setTimezone(PDT_TIMEZONE);
- }
+ public static void setDateTimeSpecs(DatasetConfigDTO datasetConfigDTO,
DateTimeFieldSpec dateTimeFieldSpec) {
+ Preconditions.checkNotNull(dateTimeFieldSpec);
+ DateTimeFormatSpec formatSpec = new
DateTimeFormatSpec(dateTimeFieldSpec.getFormat());
+ String timeFormatStr =
formatSpec.getTimeFormat().equals(TimeFormat.SIMPLE_DATE_FORMAT) ? String
+ .format("%s:%s", TimeFormat.SIMPLE_DATE_FORMAT.toString(),
formatSpec.getSDFPattern())
+ : TimeFormat.EPOCH.toString();
+ setDateTimeSpecs(datasetConfigDTO, dateTimeFieldSpec.getName(),
timeFormatStr, formatSpec.getColumnSize(),
+ formatSpec.getColumnUnit());
+ }
+
+ public static void setDateTimeSpecs(DatasetConfigDTO datasetConfigDTO,
String timeColumnName, String timeFormatStr,
+ int columnSize, TimeUnit columnUnit) {
+ datasetConfigDTO.setTimeColumn(timeColumnName);
+ datasetConfigDTO.setTimeDuration(columnSize);
+ datasetConfigDTO.setTimeUnit(columnUnit);
+ datasetConfigDTO.setTimeFormat(timeFormatStr);
+
datasetConfigDTO.setExpectedDelay(getExpectedDelayFromTimeunit(columnUnit));
+ datasetConfigDTO.setTimezone(PDT_TIMEZONE);
// set the data granularity of epoch timestamp dataset to minute-level
if (datasetConfigDTO.getTimeFormat().equals(TimeSpec.SINCE_EPOCH_FORMAT)
&& datasetConfigDTO.getTimeUnit()
.equals(TimeUnit.MILLISECONDS) &&
(datasetConfigDTO.getNonAdditiveBucketSize() == null
@@ -62,15 +74,15 @@ public class ConfigGenerator {
}
}
- public static DatasetConfigDTO generateDatasetConfig(String dataset, Schema
schema,
+ public static DatasetConfigDTO generateDatasetConfig(String dataset, Schema
schema, String timeColumnName,
Map<String, String> customConfigs) {
List<String> dimensions = schema.getDimensionNames();
- TimeGranularitySpec timeSpec =
schema.getTimeFieldSpec().getOutgoingGranularitySpec();
+ DateTimeFieldSpec dateTimeFieldSpec =
schema.getSpecForTimeColumn(timeColumnName);
// Create DatasetConfig
DatasetConfigDTO datasetConfigDTO = new DatasetConfigDTO();
datasetConfigDTO.setDataset(dataset);
datasetConfigDTO.setDimensions(dimensions);
- setTimeSpecs(datasetConfigDTO, timeSpec);
+ setDateTimeSpecs(datasetConfigDTO, dateTimeFieldSpec);
datasetConfigDTO.setDataSource(PinotThirdEyeDataSource.DATA_SOURCE_NAME);
datasetConfigDTO.setProperties(customConfigs);
checkNonAdditive(datasetConfigDTO);
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/time/TimeSpec.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/time/TimeSpec.java
index 43c6658..9022e72 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/time/TimeSpec.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/time/TimeSpec.java
@@ -19,17 +19,17 @@
package org.apache.pinot.thirdeye.common.time;
+import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.concurrent.TimeUnit;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.apache.pinot.common.data.TimeGranularitySpec.TimeFormat;
public class TimeSpec {
private static final TimeGranularity DEFAULT_TIME_GRANULARITY= new
TimeGranularity(1, TimeUnit.DAYS);
private String columnName;
private TimeGranularity dataGranularity = DEFAULT_TIME_GRANULARITY;
private String format = SINCE_EPOCH_FORMAT; //sinceEpoch or yyyyMMdd
- public static String SINCE_EPOCH_FORMAT = TimeFormat.EPOCH.toString();
+ public static String SINCE_EPOCH_FORMAT =
DateTimeFieldSpec.TimeFormat.EPOCH.toString();
public static String DEFAULT_TIMEZONE = "UTC";
public TimeSpec() {
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dataframe/DataFrame.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dataframe/DataFrame.java
index 1a21ea1..2165e5a 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dataframe/DataFrame.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dataframe/DataFrame.java
@@ -19,8 +19,6 @@
package org.apache.pinot.thirdeye.dataframe;
-import org.apache.pinot.client.ResultSet;
-import org.apache.pinot.client.ResultSetGroup;
import com.udojava.evalex.Expression;
import java.io.IOException;
import java.io.Reader;
@@ -41,6 +39,8 @@ import java.util.regex.Pattern;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.lang3.StringUtils;
+import org.apache.pinot.client.ResultSet;
+import org.apache.pinot.client.ResultSetGroup;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Period;
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtils.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtils.java
index 03f1e15..fdd06e8 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtils.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtils.java
@@ -24,7 +24,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
-import org.apache.pinot.common.data.TimeGranularitySpec;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
import org.apache.pinot.thirdeye.common.time.TimeGranularity;
import org.apache.pinot.thirdeye.common.time.TimeSpec;
import org.apache.pinot.thirdeye.constant.MetricAggFunction;
@@ -246,13 +246,13 @@ public class PqlUtils {
return builder.toString();
}
- static String getBetweenClause(DateTime start, DateTime endExclusive,
TimeSpec timeFieldSpec, String dataset)
+ static String getBetweenClause(DateTime start, DateTime endExclusive,
TimeSpec timeSpec, String dataset)
throws ExecutionException {
- TimeGranularity dataGranularity = timeFieldSpec.getDataGranularity();
+ TimeGranularity dataGranularity = timeSpec.getDataGranularity();
long dataGranularityMillis = dataGranularity.toMillis();
- String timeField = timeFieldSpec.getColumnName();
- String timeFormat = timeFieldSpec.getFormat();
+ String timeField = timeSpec.getColumnName();
+ String timeFormat = timeSpec.getFormat();
// epoch case
if (timeFormat == null || TimeSpec.SINCE_EPOCH_FORMAT.equals(timeFormat)) {
@@ -360,7 +360,7 @@ public class PqlUtils {
if (aggregationGranularity != null && !groups.contains(timeColumnName)) {
// Convert the time column to 1 minute granularity if it is epoch.
// E.g.,
dateTimeConvert(timestampInEpoch,'1:MILLISECONDS:EPOCH','1:MILLISECONDS:EPOCH','1:MINUTES')
- if
(timeSpec.getFormat().equals(TimeGranularitySpec.TimeFormat.EPOCH.toString())
+ if
(timeSpec.getFormat().equals(DateTimeFieldSpec.TimeFormat.EPOCH.toString())
&& !timeSpec.getDataGranularity().equals(aggregationGranularity)) {
String groupByTimeColumnName =
convertEpochToMinuteAggGranularity(timeColumnName, timeSpec);
groups.add(groupByTimeColumnName);
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlUtils.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlUtils.java
index f8b98a2..5fca022 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlUtils.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlUtils.java
@@ -320,12 +320,12 @@ public class SqlUtils {
return
datasetName.substring(tableComponents[0].length()+tableComponents[1].length()+2);
}
- static String getBetweenClause(DateTime start, DateTime endExclusive,
TimeSpec timeFieldSpec, String sourceName) {
- TimeGranularity dataGranularity = timeFieldSpec.getDataGranularity();
+ static String getBetweenClause(DateTime start, DateTime endExclusive,
TimeSpec timeSpec, String sourceName) {
+ TimeGranularity dataGranularity = timeSpec.getDataGranularity();
long dataGranularityMillis = dataGranularity.toMillis();
- String timeField = timeFieldSpec.getColumnName();
- String timeFormat = timeFieldSpec.getFormat();
+ String timeField = timeSpec.getColumnName();
+ String timeFormat = timeSpec.getFormat();
// epoch case
if (TimeSpec.SINCE_EPOCH_FORMAT.equals(timeFormat)) {
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/ModelRetuneFlow.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/ModelRetuneFlow.java
index 987d8d0..8fd6673 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/ModelRetuneFlow.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/ModelRetuneFlow.java
@@ -23,7 +23,6 @@
package org.apache.pinot.thirdeye.detection;
import com.google.common.base.Preconditions;
-import com.sun.org.apache.xpath.internal.operations.Mod;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/util/ThirdEyeUtils.java
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/util/ThirdEyeUtils.java
index e7512c3..d7438fb 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/util/ThirdEyeUtils.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/util/ThirdEyeUtils.java
@@ -55,7 +55,7 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.apache.pinot.common.data.TimeGranularitySpec.TimeFormat;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
import org.apache.pinot.thirdeye.common.dimension.DimensionMap;
import org.apache.pinot.thirdeye.common.time.TimeGranularity;
import org.apache.pinot.thirdeye.common.time.TimeSpec;
@@ -83,7 +83,7 @@ import org.joda.time.Period;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.pinot.thirdeye.detection.wrapper.GrouperWrapper.*;
+import static
org.apache.pinot.thirdeye.detection.wrapper.GrouperWrapper.PROP_DETECTOR_COMPONENT_NAME;
public abstract class ThirdEyeUtils {
@@ -238,7 +238,7 @@ public abstract class ThirdEyeUtils {
private static String getTimeFormatString(DatasetConfigDTO datasetConfig) {
String timeFormat = datasetConfig.getTimeFormat();
- if (timeFormat.startsWith(TimeFormat.SIMPLE_DATE_FORMAT.toString())) {
+ if
(timeFormat.startsWith(DateTimeFieldSpec.TimeFormat.SIMPLE_DATE_FORMAT.toString()))
{
timeFormat = getSDFPatternFromTimeFormat(timeFormat);
}
return timeFormat;
diff --git
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsServiceTest.java
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsServiceTest.java
index ca3d8ee..938e043 100644
---
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsServiceTest.java
+++
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/auto/onboard/AutoOnboardPinotMetricsServiceTest.java
@@ -17,27 +17,26 @@
package org.apache.pinot.thirdeye.auto.onboard;
import com.google.common.collect.Sets;
-import org.apache.pinot.common.data.DimensionFieldSpec;
-import org.apache.pinot.common.data.FieldSpec.DataType;
-import org.apache.pinot.common.data.MetricFieldSpec;
-import org.apache.pinot.common.data.Schema;
-import org.apache.pinot.common.data.TimeFieldSpec;
-import org.apache.pinot.common.data.TimeGranularitySpec;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import org.apache.pinot.spi.data.DateTimeFieldSpec;
+import org.apache.pinot.spi.data.DateTimeFormatSpec;
+import org.apache.pinot.spi.data.DimensionFieldSpec;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.MetricFieldSpec;
+import org.apache.pinot.spi.data.Schema;
import org.apache.pinot.thirdeye.common.metric.MetricType;
import org.apache.pinot.thirdeye.datalayer.bao.DAOTestBase;
import org.apache.pinot.thirdeye.datalayer.bao.DatasetConfigManager;
import org.apache.pinot.thirdeye.datalayer.bao.MetricConfigManager;
import org.apache.pinot.thirdeye.datalayer.dto.DatasetConfigDTO;
-import org.apache.pinot.thirdeye.datalayer.dto.DetectionConfigDTO;
import org.apache.pinot.thirdeye.datalayer.dto.MetricConfigDTO;
import org.apache.pinot.thirdeye.datalayer.pojo.MetricConfigBean;
import org.apache.pinot.thirdeye.datasource.DAORegistry;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
@@ -47,6 +46,8 @@ public class AutoOnboardPinotMetricsServiceTest {
private AutoOnboardPinotMetadataSource testAutoLoadPinotMetricsService;
private String dataset = "test-collection";
+ private String oldTimeColumnName = "time";
+ private String newTimeColumnName = "timestampInEpoch";
private Schema schema;
private DAOTestBase testDAOProvider;
@@ -64,7 +65,7 @@ public class AutoOnboardPinotMetricsServiceTest {
Map<String, String> pinotCustomConfigs = new HashMap<>();
pinotCustomConfigs.put("configKey1", "configValue1");
pinotCustomConfigs.put("configKey2", "configValue2");
- testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema,
pinotCustomConfigs, null);
+ testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema,
oldTimeColumnName, pinotCustomConfigs, null);
}
@AfterMethod(alwaysRun = true)
@@ -78,11 +79,12 @@ public class AutoOnboardPinotMetricsServiceTest {
DatasetConfigDTO datasetConfig = datasetConfigDAO.findByDataset(dataset);
Assert.assertEquals(datasetConfig.getDataset(), dataset);
Assert.assertEquals(datasetConfig.getDimensions(),
schema.getDimensionNames());
- Assert.assertEquals(datasetConfig.getTimeColumn(),
schema.getTimeColumnName());
- TimeGranularitySpec timeGranularitySpec =
schema.getTimeFieldSpec().getOutgoingGranularitySpec();
- Assert.assertEquals(datasetConfig.bucketTimeGranularity().getUnit(),
timeGranularitySpec.getTimeType());
- Assert.assertEquals(datasetConfig.bucketTimeGranularity().getSize(),
timeGranularitySpec.getTimeUnitSize());
- Assert.assertEquals(datasetConfig.getTimeFormat(),
timeGranularitySpec.getTimeFormat());
+ Assert.assertEquals(datasetConfig.getTimeColumn(), oldTimeColumnName);
+ DateTimeFieldSpec dateTimeFieldSpec =
schema.getSpecForTimeColumn(oldTimeColumnName);
+ DateTimeFormatSpec formatSpec = new
DateTimeFormatSpec(dateTimeFieldSpec.getFormat());
+ Assert.assertEquals(datasetConfig.bucketTimeGranularity().getUnit(),
formatSpec.getColumnUnit());
+ Assert.assertEquals(datasetConfig.bucketTimeGranularity().getSize(),
formatSpec.getColumnSize());
+ Assert.assertEquals(datasetConfig.getTimeFormat(), "EPOCH");
Assert.assertEquals(datasetConfig.getTimezone(), "US/Pacific");
Assert.assertEquals(datasetConfig.getExpectedDelay().getUnit(),
TimeUnit.HOURS);
@@ -105,23 +107,23 @@ public class AutoOnboardPinotMetricsServiceTest {
@Test (dependsOnMethods={"testAddNewDataset"})
public void testRefreshDataset() throws Exception {
DatasetConfigDTO datasetConfig = datasetConfigDAO.findByDataset(dataset);
- DimensionFieldSpec dimensionFieldSpec = new
DimensionFieldSpec("newDimension", DataType.STRING, true);
+ DimensionFieldSpec dimensionFieldSpec = new
DimensionFieldSpec("newDimension", FieldSpec.DataType.STRING, true);
schema.addField(dimensionFieldSpec);
Map<String, String> pinotCustomConfigs = new HashMap<>();
pinotCustomConfigs.put("configKey1", "configValue1");
pinotCustomConfigs.put("configKey2", "configValue2");
- testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema, new
HashMap<>(pinotCustomConfigs), datasetConfig);
+ testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema,
oldTimeColumnName, new HashMap<>(pinotCustomConfigs), datasetConfig);
Assert.assertEquals(datasetConfigDAO.findAll().size(), 1);
DatasetConfigDTO newDatasetConfig1 =
datasetConfigDAO.findByDataset(dataset);
Assert.assertEquals(newDatasetConfig1.getDataset(), dataset);
Assert.assertEquals(Sets.newHashSet(newDatasetConfig1.getDimensions()),
Sets.newHashSet(schema.getDimensionNames()));
Assert.assertEquals(newDatasetConfig1.getProperties(), pinotCustomConfigs);
- MetricFieldSpec metricFieldSpec = new MetricFieldSpec("newMetric",
DataType.LONG);
+ MetricFieldSpec metricFieldSpec = new MetricFieldSpec("newMetric",
FieldSpec.DataType.LONG);
schema.addField(metricFieldSpec);
pinotCustomConfigs.put("configKey3", "configValue3");
pinotCustomConfigs.remove("configKey2");
- testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema, new
HashMap<>(pinotCustomConfigs), newDatasetConfig1);
+ testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema,
oldTimeColumnName, new HashMap<>(pinotCustomConfigs), newDatasetConfig1);
Assert.assertEquals(datasetConfigDAO.findAll().size(), 1);
List<MetricConfigDTO> metricConfigs =
metricConfigDAO.findByDataset(dataset);
@@ -143,18 +145,17 @@ public class AutoOnboardPinotMetricsServiceTest {
Assert.assertEquals(datasetCustomConfigs.get(configKey), configValue);
}
- TimeFieldSpec timeFieldSpec = new TimeFieldSpec("timestampInEpoch",
DataType.LONG, TimeUnit.MILLISECONDS);
- schema.removeField(schema.getTimeColumnName());
- schema.addField(timeFieldSpec);
- testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema, new
HashMap<>(pinotCustomConfigs), newDatasetConfig1);
+ DateTimeFieldSpec dateTimeFieldSpec = new
DateTimeFieldSpec(newTimeColumnName, FieldSpec.DataType.LONG,
"1:MILLISECONDS:EPOCH", "1:MILLISECONDS");
+ schema.removeField(oldTimeColumnName);
+ schema.addField(dateTimeFieldSpec);
+ testAutoLoadPinotMetricsService.addPinotDataset(dataset, schema,
newTimeColumnName, new HashMap<>(pinotCustomConfigs), newDatasetConfig1);
Assert.assertEquals(datasetConfigDAO.findAll().size(), 1);
datasetConfig = datasetConfigDAO.findByDataset(dataset);
- TimeGranularitySpec timeGranularitySpec =
schema.getTimeFieldSpec().getOutgoingGranularitySpec();
Assert.assertEquals(datasetConfig.bucketTimeGranularity().getUnit(),
TimeUnit.MINUTES);
Assert.assertEquals(datasetConfig.bucketTimeGranularity().getSize(), 5);
- Assert.assertEquals(datasetConfig.getTimeUnit(),
timeGranularitySpec.getTimeType());
- Assert.assertEquals(datasetConfig.getTimeDuration().intValue(),
timeGranularitySpec.getTimeUnitSize());
- Assert.assertEquals(datasetConfig.getTimeFormat(),
timeGranularitySpec.getTimeFormat());
+ Assert.assertEquals(datasetConfig.getTimeUnit(), TimeUnit.MILLISECONDS);
+ Assert.assertEquals(datasetConfig.getTimeDuration().intValue(), 1);
+ Assert.assertEquals(datasetConfig.getTimeFormat(), "EPOCH");
Assert.assertEquals(datasetConfig.getTimezone(), "US/Pacific");
Assert.assertEquals(datasetConfig.getExpectedDelay().getUnit(),
TimeUnit.HOURS);
}
diff --git
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtilsTest.java
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtilsTest.java
index df68ca5..d7272b2 100644
---
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtilsTest.java
+++
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/datasource/pinot/PqlUtilsTest.java
@@ -76,8 +76,8 @@ public class PqlUtilsTest {
}
@Test(dataProvider = "betweenClauseArgs")
- public void getBetweenClause(DateTime start, DateTime end, TimeSpec
timeFieldSpec, String expected) throws ExecutionException {
- String betweenClause = PqlUtils.getBetweenClause(start, end,
timeFieldSpec, "collection");
+ public void getBetweenClause(DateTime start, DateTime end, TimeSpec
timeSpec, String expected) throws ExecutionException {
+ String betweenClause = PqlUtils.getBetweenClause(start, end, timeSpec,
"collection");
Assert.assertEquals(betweenClause, expected);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]