diff --git a/magic-api-plugins/magic-api-plugin-clickhouse/pom.xml b/magic-api-plugins/magic-api-plugin-clickhouse/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8774814924d819e3b51702a9fb5a6afb6353ca18
--- /dev/null
+++ b/magic-api-plugins/magic-api-plugin-clickhouse/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ magic-api-plugins
+ org.ssssssss
+ 2.2.2
+
+ 4.0.0
+ magic-api-plugin-clickhouse
+ magic-api-plugin-clickhouse
+ magic-api clickhouse plugin
+
+
+
+ org.ssssssss
+ magic-api
+
+
+ com.clickhouse
+ clickhouse-jdbc
+ 0.4.6
+ true
+
+
+
+ org.lz4
+ lz4-java
+ 1.8.0
+ true
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ true
+
+
+
\ No newline at end of file
diff --git a/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseFunction.java b/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseFunction.java
new file mode 100644
index 0000000000000000000000000000000000000000..a45406cc1a1954c52faa509192660a442070225d
--- /dev/null
+++ b/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseFunction.java
@@ -0,0 +1,42 @@
+package org.ssssssss.magicapi.clickhouse;
+
+import org.ssssssss.magicapi.core.config.MagicFunction;
+import org.ssssssss.script.annotation.Comment;
+import org.ssssssss.script.annotation.Function;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class ClickHouseFunction implements MagicFunction {
+
+ @Function
+ @Comment("格式化ClickHouse日期时间")
+ public static String formatDateTime(Object dateTime, String pattern) {
+ if (dateTime instanceof LocalDateTime) {
+ return ((LocalDateTime) dateTime).format(DateTimeFormatter.ofPattern(pattern));
+ }
+ return dateTime.toString();
+ }
+
+ @Function
+ @Comment("生成ClickHouse UUID")
+ public static String generateUUID() {
+ return java.util.UUID.randomUUID().toString();
+ }
+
+ @Function
+ @Comment("转换为ClickHouse数组格式")
+ public static String toArray(Object... values) {
+ StringBuilder sb = new StringBuilder("[");
+ for (int i = 0; i < values.length; i++) {
+ if (i > 0) sb.append(",");
+ if (values[i] instanceof String) {
+ sb.append("'").append(values[i]).append("'");
+ } else {
+ sb.append(values[i]);
+ }
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseModule.java b/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..dccbc5a561704d91d72d0cb85f3da0df7eb0934e
--- /dev/null
+++ b/magic-api-plugins/magic-api-plugin-clickhouse/src/main/java/org/ssssssss/magicapi/clickhouse/ClickHouseModule.java
@@ -0,0 +1,60 @@
+package org.ssssssss.magicapi.clickhouse;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.ssssssss.magicapi.core.annotation.MagicModule;
+import org.ssssssss.script.annotation.Comment;
+
+import javax.sql.DataSource;
+import java.util.List;
+import java.util.Map;
+
+@MagicModule("clickhouse")
+public class ClickHouseModule {
+
+ private final JdbcTemplate jdbcTemplate;
+
+ public ClickHouseModule(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ @Comment("执行ClickHouse查询")
+ public List