clickhouse-ts
v2.1.0
Published
Light stable Clickhouse client
Downloads
445
Maintainers
Readme
Introduction
💙 Typescript
This package is written in TypeScript because Node.js typing development is already an industry standard.
🖐 Batch insert*
It has been empirically verified that in-memory collecting rows is the most efficient and consistent way to insert into Clickhouse. To work with built-in caching, you just need to call the useCaching() method
💪 Transparent and Stability
clickhouse-ts doesn't use a lot of abstractions and dependencies, so it's fast and stable.
🏗 Ready for production
The Lookforsale team has been using clickhouse-ts effectively for over a year under extreme loads!
👍 Batch validation
Double checking data for anomalies during in-memory caching and when inserting a finished batch.
✨ Flexibility
Flexible configuration of the Clickhouse client instance and support for all features provided by Clickhouse developers.
🔐 Security
SQL Injection Protection with sqlstring
🌈 Free for use
The package has a public license and is available for download to any developer!## Installation
*How can I insert in-memory batches?
Starting from version 2.0.0
the caching module should be imported separately.
This is because clickcache package, like clickhouse-ts, is going to be part of my Clickhouse Node.js ecosystem.
In addition, it planned to introduce data validation, as in Joi and model generation, as in mongodb/mongoose.
Installation
npm i clickhouse-ts
npm i clickcache
Roadmap
- Implement http/cli-queries-with-parameters feature
- Complete in/out data validation with schemas
- Make it works with GrahpQL or something like cube.js
*How to insert?
Basically, this client supports data insertion, but you should consider collecting your data before passing it as an argument here. Use clickcache
to prepare batches!
Starting from version 2.0.0
the caching module should be imported separately.
This is because clickcache package, like clickhouse-ts, is going to be part of my Clickhouse Node.js ecosystem.
In addition, it planned to introduce data validation, as in Joi and model generation, as in mongodb/mongoose.
Connection
Only HTTP(s) protocol is supported.
const client = new Clickhouse(
{
url: 'url',
port: 8443,
user: 'user',
password: 'password',
database: 'database',
ca: fs.readFileSync('cert.crt')
},
{
/* https://clickhouse.com/docs/en/interfaces/formats */
defaultResponseFormat: 'JSON',
clickhouseOptions: {
/* https://clickhouse.tech/docs/en/operations/settings/settings/ */
send_progress_in_http_headers: '1'
}
}
)
Usage examples
Insert
const response = await client.insert('table_strings', rows, {
format: 'CSVWithNames'
})
Select
await clickhouseInstance.query<{ t: string }>('WITH now() as t SELECT t', {
format: 'TSV',
send_progress_in_http_headers: '1'
})
DDL queries
await clickhouseInstance.query(`
CREATE TABLE strings (
date DateTime('UTC'),
string String
) Engine = ReplacingMergeTree()
PARTITION BY toMonday(date)
ORDER BY (date, string)
`, { noFormat: true })