mppr/src/database/clickhouse/clickhouse.service.ts

80 lines
2.5 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { ClickHouse } from 'clickhouse';
import { isInternalThread } from 'node:worker_threads';
@Injectable()
export class ClickhouseService {
async ClickHouseConnect(parameterBody: any): Promise<any> {
let variable = new ClickHouse({
// url: 'http://192.168.2.37',
// port: 8123,
url: DATABASE_NAME,
PORT: DATABASE_PORT,
debug: false,
basicAuth: {
username: 'root',
password: 'dbss',
},
isUseGzip: false,
trimQuery: false,
usePost: false,
format: "json", // "json" || "csv" || "tsv"
raw: false,
config: {
session_id: 'session_id if neeed',
session_timeout: 60,
output_format_json_quote_64bit_integers: 0,
enable_http_compression: 0,
database: 'zvks',
},
// This object merge with request params (see request lib docs)
// reqParams: {
// ...
// },
});
// let queries = [
// 'DROP TABLE IF EXISTS session_temp',
// `CREATE TABLE IF NOT EXISTS session_temp (
// id UInt128,
// body TEXT,
// ips Array(UInt32),
// ueries Nested (
// id UInt32,
// act String,
// uptime DateTime64
// ),
// create_date DateTime64,
// update_time DateTime64,
// ) ENGINE = MergeTree()
// PRIMARY KEY (id)`
// ];
let queries = [
`CREATE TABLE IF NOT EXISTS raw_parameters (
EventTimestamp DateTime64,
ParameterBody String,
CreateDate DateTime64,
) ENGINE = MergeTree()
PRIMARY KEY (EventTimestamp)`
];
let insertQuery = '\nINSERT INTO raw_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
insertQuery = insertQuery.replace('{{parameterBody}}', parameterBody);
console.log(insertQuery);
// console.log(insertQuery);
queries.push(insertQuery);
for (let query of queries) {
let r = await variable.query(query).toPromise();
// console.log(query, r);
}
console.log(variable);
return variable;
}
}