This is an automated email from the ASF dual-hosted git repository.

jihao 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 52f69d1  [TE] Added support for Vertica as a data source (#4404)
52f69d1 is described below

commit 52f69d16a0e99376348ad060fb4062cffc9886cc
Author: Takahiko Saito <[email protected]>
AuthorDate: Wed Jul 10 11:55:01 2019 -0700

    [TE] Added support for Vertica as a data source (#4404)
    
    Added support for Vertica as a data source.
---
 .../datasource/sql/SqlResponseCacheLoader.java     | 37 ++++++++++++++++++++++
 .../pinot/thirdeye/datasource/sql/SqlUtils.java    |  3 ++
 2 files changed, 40 insertions(+)

diff --git 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlResponseCacheLoader.java
 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlResponseCacheLoader.java
index 5877291..3caa095 100644
--- 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlResponseCacheLoader.java
+++ 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlResponseCacheLoader.java
@@ -60,19 +60,23 @@ public class SqlResponseCacheLoader extends 
CacheLoader<SqlQuery, ThirdEyeResult
   private static int MAX_CONNECTIONS = 50;
   private static final String PRESTO = "Presto";
   private static final String MYSQL = "MySQL";
+  private static final String VERTICA = "Vertica";
   private static final String DATASETS = "datasets";
   private static final String H2 = "H2";
   private static final String USER = "user";
   private static final String DB = "db";
   private static final String PASSWORD = "password";
+  private static final String DRIVER = "driver";
   private static final DateTime MIN_DATETIME = DateTime.parse("1970-01-01");
   private static final int ABANDONED_TIMEOUT = 60000;
 
   private Map<String, DataSource> prestoDBNameToDataSourceMap = new 
HashMap<>();
   private Map<String, DataSource> mysqlDBNameToDataSourceMap = new HashMap<>();
+  private Map<String, DataSource> verticaDBNameToDataSourceMap = new 
HashMap<>();
 
   private static Map<String, String> prestoDBNameToURLMap = new HashMap<>();
   private static Map<String, String> mysqlDBNameToURLMap = new HashMap<>();
+  private static Map<String, String> verticaDBNameToURLMap = new HashMap<>();
 
   private static String h2Url;
   DataSource h2DataSource;
@@ -133,6 +137,34 @@ public class SqlResponseCacheLoader extends 
CacheLoader<SqlQuery, ThirdEyeResult
       }
     }
 
+    // Init Vertica datasources
+    if (properties.containsKey(VERTICA)) {
+      List<Map<String, Object>> verticaMapList = 
ConfigUtils.getList(properties.get(VERTICA));
+      for (Map<String, Object> objMap: verticaMapList) {
+        Map<String, String> dbNameToURLMap = (Map)objMap.get(DB);
+        String verticaUser = (String)objMap.get(USER);
+        String verticaPassword = getPassword(objMap);
+        String verticaDriver = (String)objMap.get(DRIVER);
+
+        for (Map.Entry<String, String> entry: dbNameToURLMap.entrySet()) {
+          DataSource dataSource = new DataSource();
+          dataSource.setInitialSize(INIT_CONNECTIONS);
+          dataSource.setMaxActive(MAX_CONNECTIONS);
+          dataSource.setUsername(verticaUser);
+          dataSource.setPassword(verticaPassword);
+          dataSource.setDriverClassName(verticaDriver);
+          dataSource.setUrl(entry.getValue());
+
+          // Timeout before an abandoned(in use) connection can be removed.
+          dataSource.setRemoveAbandonedTimeout(ABANDONED_TIMEOUT);
+          dataSource.setRemoveAbandoned(true);
+
+          verticaDBNameToDataSourceMap.put(entry.getKey(), dataSource);
+          verticaDBNameToURLMap.putAll(dbNameToURLMap);
+        }
+      }
+    }
+
     // Init H2 datasource
     if (properties.containsKey(H2)) {
       h2DataSource = new DataSource();
@@ -293,6 +325,8 @@ public class SqlResponseCacheLoader extends 
CacheLoader<SqlQuery, ThirdEyeResult
       dataSource = prestoDBNameToDataSourceMap.get(SQLQuery.getDbName());
     } else if (sourceName.equals(MYSQL)) {
       dataSource = mysqlDBNameToDataSourceMap.get(SQLQuery.getDbName());
+    } else if (sourceName.equals(VERTICA)) {
+      dataSource = verticaDBNameToDataSourceMap.get(SQLQuery.getDbName());
     } else {
       dataSource = h2DataSource;
     }
@@ -323,6 +357,7 @@ public class SqlResponseCacheLoader extends 
CacheLoader<SqlQuery, ThirdEyeResult
     Map<String, Map<String,String>> dbNameToURLMap = new LinkedHashMap<>();
     dbNameToURLMap.put(PRESTO, prestoDBNameToURLMap);
     dbNameToURLMap.put(MYSQL, mysqlDBNameToURLMap);
+    dbNameToURLMap.put(VERTICA, verticaDBNameToURLMap);
 
     Map<String, String> h2ToURLMap = new HashMap<>();
     h2ToURLMap.put(H2, h2Url);
@@ -348,6 +383,8 @@ public class SqlResponseCacheLoader extends 
CacheLoader<SqlQuery, ThirdEyeResult
       return prestoDBNameToDataSourceMap.get(dbName);
     } else if (sourceName.equals(MYSQL)) {
       return mysqlDBNameToDataSourceMap.get(dbName);
+    } else if (sourceName.equals(VERTICA)) {
+      return verticaDBNameToDataSourceMap.get(dbName);
     } else {
       return h2DataSource;
     }
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 dedb9f7..298a842 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
@@ -87,6 +87,7 @@ public class SqlUtils {
   private static final String PRESTO = "Presto";
   private static final String MYSQL = "MySQL";
   private static final String H2 = "H2";
+  private static final String VERTICA = "Vertica";
 
   /**
    * Insert a table to SQL database, currently only used by H2, that can be 
read by ThirdEye
@@ -595,6 +596,8 @@ public class SqlUtils {
       return "UNIX_TIMESTAMP(STR_TO_DATE(CAST(" + timeColumn + " AS CHAR), '" 
+ timeFormatToMySQLFormat(timeFormat) + "'))";
     } else if (sourceName.equals(H2)){
       return "TO_UNIXTIME(PARSEDATETIME(CAST(" + timeColumn + " AS VARCHAR), 
'" + timeFormat + "'))";
+    } else if (sourceName.equals(VERTICA)) {
+      return "EXTRACT(EPOCH FROM to_timestamp(to_char(" + timeColumn + "), '" 
+ timeFormat + "'))";
     }
     return "";
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to