NodeJS에서 @clickhouse/client 사용하기
main.ts입니다.
Package.json (./ 경로 아래에 배치):
{
"name": "a simple clickhouse client example",
"version": "1.0.0",
"main": "main.js",
"license": "MIT",
"devDependencies": {
"typescript": "^5.3.2"
},
"dependencies": {
"@clickhouse/client": "^0.2.6"
}
}
Main.ts (./src 아래에 둡니다):
import { ClickHouseClient, createClient } from '@clickhouse/client'; // or '@clickhouse/client-web'
interface ClickHouseResultSet<T> {
meta: Meta[];
data: T[];
rows: number;
statistics: Statistics;
}
interface Statistics {
elapsed: number;
rows_read: number;
bytes_read: number;
}
interface Meta {
name: string;
type: string;
}
interface Count {
c: number;
}
//`host`, `username`, `password`, `database` 등의 클라이언트 연결 매개변수를 필요에 따라 교체하십시오.
const initClickHouseClient = async (): Promise<ClickHouseClient> => {
const client = createClient({
host: 'https://FQDN.aws.clickhouse.cloud',
username: 'default',
password: 'password',
database: 'default',
application: `pingpong`,
});
console.log('ClickHouse ping');
if (!(await client.ping())) {
throw new Error('failed to ping clickhouse!');
}
console.log('ClickHouse pong!');
return client;
};
const main = async () => {
console.log('Initialising clickhouse client');
const client = await initClickHouseClient();
const row = await client.query({
query: `SELECT count() AS c FROM system.tables WHERE database='system'`,
});
const jsonRow: ClickHouseResultSet<Count> = await row.json();
console.log(`I have found ${jsonRow.data[0].c} system tables!`);
await client.close();
console.log(`👋`);
};
main();
./ 디렉터리에서 yarn을 실행하세요:
$ yarn
yarn install v1.22.19
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 🔨 Building fresh packages...
✨ Done in 0.14s.
./에서 main.ts 코드를 실행합니다:
$ npx ts-node src/main.ts
Initialising clickhouse client
ClickHouse ping
ClickHouse pong!
I have found 120 system tables!
👋