springboot?使用clickhouse實(shí)時(shí)大數(shù)據(jù)分析引擎(使用方式)
聲明:
因項(xiàng)目中使用clickhouse引擎這里springboot使用的方式是jdbc方式連接,這種方式的好處是可以使用clickhouse 自帶的fetch方法批量從clickhouse中獲取數(shù)據(jù),對(duì)于大量數(shù)據(jù)的下載來說,比較好
因?yàn)槿绻磕玫絻?nèi)存中處理,大量數(shù)據(jù)會(huì)有內(nèi)存溢出的結(jié)果
如果批量多次請(qǐng)求數(shù)據(jù)庫對(duì)于數(shù)據(jù)庫查詢等也不靠譜,所有直接使用clickhouse jdbc連接來滿足這種情況,不使用mybatis等框架來管理,這里根據(jù)大家不同的需求酌情參考即可
使用方式:
第一步:加入clickhouse jar包依賴
<!--clickhouse-->
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.40</version>
</dependency>第二步:配置數(shù)據(jù)庫連接屬性配置文件,yml方式 此處僅作為參數(shù),不連接任何驅(qū)動(dòng)
clickhouse: address: jdbc:clickhouse://172.20.xxx.xxx:8123 username: default password: xxx db: marketing socketTimeout: 600000
第三步:添加數(shù)據(jù)庫連接操作util工具類
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import net.sf.json.JSONObject;
import ru.yandex.clickhouse.ClickHouseConnection;
import ru.yandex.clickhouse.ClickHouseDataSource;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
import java.sql.*;
import java.util.*;
/**
* @Description:
* @Date 2018/11/12
*/
@Slf4j
@Component
public class ClickHouseUtil {
private static String clickhouseAddress;
private static String clickhouseUsername;
private static String clickhousePassword;
private static String clickhouseDB;
private static Integer clickhouseSocketTimeout;
@Value("${clickhouse.address}")
public void setClickhouseAddress(String address) {
ClickHouseUtil.clickhouseAddress = address;
}
@Value("${clickhouse.username}")
public void setClickhouseUsername(String username) {
ClickHouseUtil.clickhouseUsername = username;
@Value("${clickhouse.password}")
public void setClickhousePassword(String password) {
ClickHouseUtil.clickhousePassword = password;
@Value("${clickhouse.db}")
public void setClickhouseDB(String db) {
ClickHouseUtil.clickhouseDB = db;
@Value("${clickhouse.socketTimeout}")
public void setClickhouseSocketTimeout(Integer socketTimeout) {
ClickHouseUtil.clickhouseSocketTimeout = socketTimeout;
public static Connection getConn() {
ClickHouseConnection conn = null;
ClickHouseProperties properties = new ClickHouseProperties();
properties.setUser(clickhouseUsername);
properties.setPassword(clickhousePassword);
properties.setDatabase(clickhouseDB);
properties.setSocketTimeout(clickhouseSocketTimeout);
ClickHouseDataSource clickHouseDataSource = new ClickHouseDataSource(clickhouseAddress,properties);
try {
conn = clickHouseDataSource.getConnection();
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
public static List<JSONObject> exeSql(String sql){
log.info("cliockhouse 執(zhí)行sql:" + sql);
Connection connection = getConn();
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery(sql);
ResultSetMetaData rsmd = results.getMetaData();
List<JSONObject> list = new ArrayList();
while(results.next()){
JSONObject row = new JSONObject();
for(int i = 1;i<=rsmd.getColumnCount();i++){
row.put(rsmd.getColumnName(i),results.getString(rsmd.getColumnName(i)));
}
list.add(row);
}
return list;
}第四步:Test簡(jiǎn)單使用執(zhí)行sql查詢數(shù)據(jù)
import com.renrenche.databus.common.ClickHouseUtil;
import com.renrenche.databus.common.Result;
import com.renrenche.databus.domain.logdata.fem.FemParam;
import com.renrenche.databus.service.fem.FemMainService;
import net.sf.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
/**
* @Auther: qixin
* @Date: 2018/12/11 15:05
* @Description:
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SemTest {
@Test
public void getFrsDataTest(){
System.out.println("******************");
String sql="select * from marketing.sem_campaign_real_time_report";
List<JSONObject> result= ClickHouseUtil.exeSql(sql);
}
}執(zhí)行完畢打印結(jié)果查看即可,
fetch方法之后再補(bǔ)充
到此這篇關(guān)于springboot 使用clickhouse實(shí)時(shí)大數(shù)據(jù)分析引擎的方法的文章就介紹到這了,更多相關(guān)springboot clickhouse大數(shù)據(jù)分析引擎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java驗(yàn)證jwt token代碼實(shí)例
這篇文章主要介紹了基于Java驗(yàn)證jwt token代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
使用springboot aop來實(shí)現(xiàn)讀寫分離和事物配置
這篇文章主要介紹了使用springboot aop來實(shí)現(xiàn)讀寫分離和事物配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
通過Spring Boot + Mybatis + Redis快速搭建現(xiàn)代化Web項(xiàng)目
本篇文章介紹了如何通過Spring Boot、Mybatis以及Redis快速搭建一個(gè)現(xiàn)代化的Web項(xiàng)目,并且同時(shí)介紹了如何在Spring Boot下優(yōu)雅地書寫單元測(cè)試來保證我們的代碼質(zhì)量。具體內(nèi)容詳情大家通過本文學(xué)習(xí)下吧2017-12-12
解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無法使用的情況
這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無法使用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
java多線程應(yīng)用實(shí)現(xiàn)方法
以前沒有寫筆記的習(xí)慣,現(xiàn)在慢慢的發(fā)現(xiàn)及時(shí)總結(jié)是多么的重要了,呵呵。雖然才大二,但是也快要畢業(yè)了,要加油2012-11-11
Java 中組合模型之對(duì)象結(jié)構(gòu)模式的詳解
這篇文章主要介紹了Java 中組合模型之對(duì)象結(jié)構(gòu)模式的詳解的相關(guān)資料,希望通過本文能幫助到大家理解應(yīng)用對(duì)象結(jié)構(gòu)模型,需要的朋友可以參考下2017-09-09

