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

zhaoqingran pushed a commit to branch doris
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/doris by this push:
     new bb34a39c4 ```feat(warehouse): create table dynamically in 
DorisDataStorage
bb34a39c4 is described below

commit bb34a39c456714d6c9c846a277c7ce89b16e036c
Author: zqr10159 <[email protected]>
AuthorDate: Mon Aug 26 00:16:53 2024 +0800

    ```feat(warehouse): create table dynamically in DorisDataStorage
    
    DorisDataStorage now creates the database and table dynamically based on 
the incoming metrics data.
    This change removes the need for manual database and table creation in the 
Doris database.
    The connection validation and table creation have been adapted to enhance 
the auto-configuration
    capabilities.
    ```
---
 manager/src/main/resources/application.yml         |  1 +
 .../store/history/doris/DorisDataStorage.java      | 40 ++++++++++++++++++----
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/manager/src/main/resources/application.yml 
b/manager/src/main/resources/application.yml
index 10f389150..f62b2547d 100644
--- a/manager/src/main/resources/application.yml
+++ b/manager/src/main/resources/application.yml
@@ -169,6 +169,7 @@ warehouse:
       enabled: false
       host: 127.0.0.1
       httpPort: 8030
+      jdbcPort: 9030
       username: root
       password:
       database: hertzbeat
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java
index c732247c3..27637ba25 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java
@@ -38,6 +38,30 @@ import org.springframework.stereotype.Component;
 @ConditionalOnProperty(prefix = "warehouse.store.doris", name = "enabled", 
havingValue = "true")
 @Slf4j
 public class DorisDataStorage extends AbstractHistoryDataStorage {
+    private final static String CREATE_TABLE_SQL = """
+            CREATE TABLE IF NOT EXISTS %s (
+                ts datetime,
+                v VARIANT,
+                INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = 
"unicode")
+            )
+            ENGINE = OLAP
+            DUPLICATE KEY(`ts`)
+            PARTITION BY RANGE(`ts`) ()
+            DISTRIBUTED BY RANDOM BUCKETS 16
+            PROPERTIES (
+            "compaction_policy" = "time_series",
+            "dynamic_partition.enable" = "true",
+            "dynamic_partition.create_history_partition" = "true",
+            "dynamic_partition.time_unit" = "DAY",
+            "dynamic_partition.start" = "-30",
+            "dynamic_partition.end" = "1",
+            "dynamic_partition.prefix" = "p",
+            "dynamic_partition.buckets" = "16",
+            "dynamic_partition.replication_num" = "1",
+            "replication_num" = "1",
+            "enable_single_replica_compaction" = "true"
+            );
+            """;
 
     private HikariDataSource hikariDataSource;
 
@@ -49,7 +73,7 @@ public class DorisDataStorage extends 
AbstractHistoryDataStorage {
             return;
         }
         this.hikariDataSource = new HikariDataSource();
-        this.hikariDataSource.setJdbcUrl("jdbc:mysql://" + 
dorisProperties.host() + ":" + dorisProperties.jdbcPort() + "/" + 
dorisProperties.database());
+        this.hikariDataSource.setJdbcUrl("jdbc:mysql://" + 
dorisProperties.host() + ":" + dorisProperties.jdbcPort() + "/" + "mysql");
         this.hikariDataSource.setUsername(dorisProperties.username());
         this.hikariDataSource.setPassword(dorisProperties.password());
         this.hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
@@ -66,20 +90,23 @@ public class DorisDataStorage extends 
AbstractHistoryDataStorage {
         // validation query
         this.hikariDataSource.setConnectionTestQuery("select 1");
         createDatabase(dorisProperties.database());
-
+        if (hikariDataSource.isRunning()) {
+            this.serverAvailable = true;
+        }
     }
 
     private void createDatabase(String database) {
         try (Connection connection = hikariDataSource.getConnection()) {
             connection.createStatement().execute("CREATE DATABASE IF NOT 
EXISTS " + database);
+            log.info("[warehouse doris]--Create database {} successful", 
database);
         } catch (SQLException e) {
             log.error("[warehouse doris]--Error: {}", e.getMessage(), e);
         }
     }
 
-    private void createTable(String database, String tableName) {
+    private void createTable(String tableName) {
         try (Connection connection = hikariDataSource.getConnection()) {
-            connection.createStatement().execute("USE " + database);
+            connection.createStatement().execute("USE " + 
dorisProperties.database());
             connection.createStatement().execute("CREATE TABLE IF NOT EXISTS " 
+ tableName);
         } catch (SQLException e) {
             log.error("[warehouse doris]--Error: {}", e.getMessage(), e);
@@ -140,7 +167,7 @@ public class DorisDataStorage extends 
AbstractHistoryDataStorage {
         }
         String monitorId = String.valueOf(metricsData.getId());
         String tableName = getTableName(metricsData.getApp(), 
metricsData.getMetrics());
-        createTable(dorisProperties.database(), tableName);
+//        createTable(tableName);
         List<CollectRep.Field> fieldsList = metricsData.getFieldsList();
         StringBuilder jsonData = new StringBuilder();
         jsonData.append("[");
@@ -171,6 +198,7 @@ public class DorisDataStorage extends 
AbstractHistoryDataStorage {
         } else {
             jsonData.append(']');
         }
+        log.info("[warehouse doris]--Write data: {}", jsonData);
 
         try {
             DorisStreamLoadUtil.sendData(
@@ -182,7 +210,7 @@ public class DorisDataStorage extends 
AbstractHistoryDataStorage {
                     tableName,
                     jsonData.toString()
             );
-            log.debug("[warehouse doris]-Write successful");
+            log.info("[warehouse doris]-Write successful");
         } catch (Exception e) {
             log.error("[warehouse doris]--Error: {}", e.getMessage(), e);
         }


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

Reply via email to