Clichouse TTL

main
DenisN 2025-07-02 09:55:09 -04:00
parent fcfd5e1aae
commit a0096e652c
2 changed files with 56 additions and 15 deletions

View File

@ -4,7 +4,7 @@ import { isInternalThread } from 'node:worker_threads';
@Injectable() @Injectable()
export class ClickhouseService { export class ClickhouseService {
async ClickHouseConnect(): Promise<any>{ async ClickHouseConnect(): Promise<ClickHouse>{
let connectionData = new ClickHouse({ let connectionData = new ClickHouse({
url: 'http://192.168.2.37', url: 'http://192.168.2.37',
port: 8123, port: 8123,
@ -38,7 +38,7 @@ export class ClickhouseService {
} }
async ClickHouseDBsCreate(parameterBody: any): Promise<any> { async ClickHouseDBsCreate(): Promise<ClickHouse> {
let connectionData = await this.ClickHouseConnect(); let connectionData = await this.ClickHouseConnect();
// let queries = [ // let queries = [
@ -63,16 +63,22 @@ export class ClickhouseService {
`CREATE TABLE IF NOT EXISTS raw_parameters ( `CREATE TABLE IF NOT EXISTS raw_parameters (
EventDataTime DateTime64, EventDataTime DateTime64,
ParameterBody String, ParameterBody String,
CreateDataTime DateTime64, CreateDataTime DateTime,
) ENGINE = MergeTree() ) ENGINE = MergeTree()
PRIMARY KEY (EventDataTime)`, PRIMARY KEY (EventDataTime)
PARTITION BY toYYYYMM(CreateDataTime)
TTL CreateDataTime + INTERVAL 3 MONTH
SETTINGS storage_policy = 'default'`,
`CREATE TABLE IF NOT EXISTS complex_parameters ( `CREATE TABLE IF NOT EXISTS complex_parameters (
EventDataTime DateTime64, EventDataTime DateTime64,
ParameterBody String, ParameterBody String,
CreateDate DateTime64, CreateDataTime DateTime,
) ENGINE = MergeTree() ) ENGINE = MergeTree()
PRIMARY KEY (EventDataTime)`, PRIMARY KEY (EventDataTime)
PARTITION BY toYYYYMM(CreateDataTime)
TTL CreateDataTime + INTERVAL 3 MONTH
SETTINGS storage_policy = 'default'`,
`CREATE TABLE IF NOT EXISTS raw_parameters_extended ( `CREATE TABLE IF NOT EXISTS raw_parameters_extended (
EventDataTime DateTime64, EventDataTime DateTime64,
@ -80,9 +86,12 @@ export class ClickhouseService {
ParameterName String, ParameterName String,
ParameterValue Float64, ParameterValue Float64,
ParameterBody String, ParameterBody String,
CreateDate DateTime64, CreateDataTime DateTime,
) ENGINE = MergeTree() ) ENGINE = MergeTree()
PRIMARY KEY (EventDataTime)`, PRIMARY KEY (EventDataTime)
PARTITION BY toYYYYMM(CreateDataTime)
TTL CreateDataTime + INTERVAL 3 MONTH
SETTINGS storage_policy = 'default'`,
`CREATE TABLE IF NOT EXISTS complex_parameters_extended ( `CREATE TABLE IF NOT EXISTS complex_parameters_extended (
EventDataTime DateTime64, EventDataTime DateTime64,
@ -90,9 +99,12 @@ export class ClickhouseService {
ParameterName String, ParameterName String,
ParameterValue Float64, ParameterValue Float64,
ParameterBody String, ParameterBody String,
CreateDate DateTime64, CreateDataTime DateTime,
) ENGINE = MergeTree() ) ENGINE = MergeTree()
PRIMARY KEY (EventDataTime)`, PRIMARY KEY (EventDataTime)
PARTITION BY toYYYYMM(CreateDataTime)
TTL CreateDataTime + INTERVAL 3 MONTH
SETTINGS storage_policy = 'default'`,
`CREATE TABLE IF NOT EXISTS status_events ( `CREATE TABLE IF NOT EXISTS status_events (
EventDataTime DateTime64, EventDataTime DateTime64,
@ -102,7 +114,7 @@ export class ClickhouseService {
ParameterBody String, ParameterBody String,
PreviousStatus Int32, PreviousStatus Int32,
CurrentStatus Int32, CurrentStatus Int32,
CreateDate DateTime64, CreateDataTime DateTime,
) ENGINE = MergeTree() ) ENGINE = MergeTree()
PRIMARY KEY (EventDataTime)`, PRIMARY KEY (EventDataTime)`,
@ -119,7 +131,33 @@ export class ClickhouseService {
// console.log(query, r); // console.log(query, r);
} }
console.log(connectionData); // console.log(connectionData);
return connectionData; return connectionData;
} }
async ClickHouseAddRecords(recordFormat: string, parameterBody: any): Promise<any>{
let connectionData = await this.ClickHouseDBsCreate();
switch(recordFormat){
case 'raw':
let insertRawQuery = 'INSERT INTO raw_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertRawQuery = insertRawQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertRawQuery);
// for (let query of insertQuery) {
let retRaw = await connectionData.query(insertRawQuery).toPromise();
// console.log(retRaw);
// }
break;
case 'complex':
let insertComplexQuery = 'INSERT INTO complex_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertComplexQuery = insertComplexQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertComplexQuery);
// for (let query of insertQuery) {
let retComplex = await connectionData.query(insertComplexQuery).toPromise();
// console.log(retComplex);
// }
break;
}
}
} }

View File

@ -78,12 +78,15 @@ export class ZvksmetricsService {
let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope); let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope);
// console.log(intermediate); console.log(intermediate);
let ctp: any = classToPlain(intermediate); let ctp: any = classToPlain(intermediate);
let parameterBody: string = JSON.stringify(ctp); let copmplexParameterBody: string = JSON.stringify(ctp);
let rtp: any = classToPlain(inputData);
let rawParameterBody: string = JSON.stringify(rtp);
// console.log(parameterBody); // console.log(parameterBody);
let abc = new ClickhouseService(); let abc = new ClickhouseService();
abc.ClickHouseDBsCreate(parameterBody); await abc.ClickHouseAddRecords('raw', rawParameterBody);
await abc.ClickHouseAddRecords('complex', copmplexParameterBody);
// const val = JSON.parse(JSON.stringify(model[0].values)); // const val = JSON.parse(JSON.stringify(model[0].values));