clickhouse-ts
This module is used by LookFor.sale which produces WB Analytics
⚠️ Using this module might lead to some unhandled errors. Please, report Me about issues you faced!
This module is not released yet. Wait for version 2.0.0 to be release.
How to contact me
TS client for clickhouse database with using redis caching rows for bulk insertion
import { Clickhouse } from 'clickhouse-ts'
import fs from 'fs'
import dayjs from 'dayjs'
import { serializeError } from 'serialize-error'
import Redis from 'ioredis'
const clickhouseInstance = new Clickhouse(
{
url: 'url',
port: 8443,
user: 'user',
password: 'password',
database: 'database',
ca: fs.readFileSync('cert.crt')
},
{
debug: {
mode: true,
exclude: [...providers]
},
cache: {
chunkTTLSeconds: 3600,
chunkResolverIntervalSeconds: 180,
chunkSizeLimit: 10_000,
chunkResolveType: 'events'
},
defaultResponseFormat: 'JSON',
clickhouseOptions: {
send_progress_in_http_headers: '1'
}
}
)
clickhouseInstance.useCaching('redis', new Redis())
clickhouseInstance.onChunk((chunkId, table, rows) => {
})
Cache
const response = clickhouseInstance
.cache(
'strings',
[
{ date: '2021-01-01', string: 'str1' },
{ date: '2021-01-02', string: 'str2' }
],
{
responseFormat: 'CSVWithNames'
}
)
.then(response => response)
.catch(e => serializeError(e))
response
Insert
const response = clickhouseInstance
.insert(
'strings',
[
{ date: '2021-01-01', string: 'str1' },
{ date: '2021-01-02', string: 'str2' }
],
{
responseFormat: 'CSVWithNames'
}
)
.then(response => response)
.catch(e => serializeError(e))
response
Query
clickhouseInstance
.query('WITH now() as t SELECT t', {
responseFormat: 'TSV',
})
.then(result => result.data.data)
.catch(e => serializeError(e))
clickhouseInstance.query(`
CREATE TABLE strings (
date DateTime('UTC'),
string String
) Engine = ReplacingMergeTree()
PARTITION BY toMonday(date)
ORDER BY (date, string)
`)