@cubejs-backend/clickhouse-driver 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,16 +3,35 @@
3
3
  * @license Apache-2.0
4
4
  * @fileoverview The `ClickHouseDriver` and related types declaration.
5
5
  */
6
- import { BaseDriver, DownloadQueryResultsOptions, DownloadQueryResultsResult, DownloadTableCSVData, DriverCapabilities, DriverInterface, QuerySchemasResult, StreamOptions, StreamTableDataWithTypes, TableStructure, UnloadOptions } from '@cubejs-backend/base-driver';
7
- import { Pool } from 'generic-pool';
8
- interface ClickHouseDriverOptions {
6
+ import { BaseDriver, DownloadQueryResultsOptions, DownloadQueryResultsResult, DownloadTableCSVData, DriverCapabilities, DriverInterface, QueryOptions, QuerySchemasResult, StreamOptions, StreamTableDataWithTypes, TableColumn, TableQueryResult, TableStructure, UnloadOptions } from '@cubejs-backend/base-driver';
7
+ import { ClickHouseClient } from '@clickhouse/client';
8
+ import type { ClickHouseSettings, ResponseJSON } from '@clickhouse/client';
9
+ export interface ClickHouseDriverOptions {
9
10
  host?: string;
10
11
  port?: string;
11
- auth?: string;
12
+ username?: string;
13
+ password?: string;
12
14
  protocol?: string;
13
15
  database?: string;
14
16
  readOnly?: boolean;
15
- queryOptions?: object;
17
+ /**
18
+ * Timeout in milliseconds for requests to ClickHouse.
19
+ * Default is 10 minutes
20
+ */
21
+ requestTimeout?: number;
22
+ /**
23
+ * Data source name.
24
+ */
25
+ dataSource?: string;
26
+ /**
27
+ * Max pool size value for the [cube]<-->[db] pool.
28
+ */
29
+ maxPoolSize?: number;
30
+ /**
31
+ * Time to wait for a response from a connection after validation
32
+ * request before determining it as not valid. Default - 10000 ms.
33
+ */
34
+ testConnectionTimeout?: number;
16
35
  }
17
36
  interface ClickhouseDriverExportRequiredAWS {
18
37
  bucketType: 's3';
@@ -20,43 +39,40 @@ interface ClickhouseDriverExportRequiredAWS {
20
39
  region: string;
21
40
  }
22
41
  interface ClickhouseDriverExportKeySecretAWS extends ClickhouseDriverExportRequiredAWS {
23
- keyId?: string;
24
- secretKey?: string;
42
+ keyId: string;
43
+ secretKey: string;
25
44
  }
26
45
  interface ClickhouseDriverExportAWS extends ClickhouseDriverExportKeySecretAWS {
27
46
  }
47
+ type ClickHouseDriverConfig = {
48
+ url: string;
49
+ username: string;
50
+ password: string;
51
+ readOnly: boolean;
52
+ database: string;
53
+ requestTimeout: number;
54
+ exportBucket: ClickhouseDriverExportAWS | null;
55
+ clickhouseSettings: ClickHouseSettings;
56
+ };
28
57
  export declare class ClickHouseDriver extends BaseDriver implements DriverInterface {
29
58
  /**
30
59
  * Returns default concurrency value.
31
60
  */
32
61
  static getDefaultConcurrency(): number;
33
- protected readonly pool: Pool<any>;
62
+ protected readonly client: ClickHouseClient;
34
63
  protected readonly readOnlyMode: boolean;
35
- protected readonly config: any;
64
+ protected readonly config: ClickHouseDriverConfig;
36
65
  /**
37
66
  * Class constructor.
38
67
  */
39
- constructor(config?: ClickHouseDriverOptions & {
40
- /**
41
- * Data source name.
42
- */
43
- dataSource?: string;
44
- /**
45
- * Max pool size value for the [cube]<-->[db] pool.
46
- */
47
- maxPoolSize?: number;
48
- /**
49
- * Time to wait for a response from a connection after validation
50
- * request before determining it as not valid. Default - 10000 ms.
51
- */
52
- testConnectionTimeout?: number;
53
- });
54
- protected withConnection(fn: (con: any, queryId: string) => Promise<any>): any;
68
+ constructor(config?: ClickHouseDriverOptions);
69
+ protected withCancel<T>(fn: (con: ClickHouseClient, queryId: string, signal: AbortSignal) => Promise<T>): Promise<T>;
70
+ protected createClient(maxPoolSize: number): ClickHouseClient;
55
71
  testConnection(): Promise<void>;
56
72
  readOnly(): boolean;
57
- query(query: string, values: unknown[]): Promise<any>;
58
- protected queryResponse(query: string, values: unknown[]): any;
59
- protected normaliseResponse(res: any): any;
73
+ query<R = unknown>(query: string, values: unknown[]): Promise<R[]>;
74
+ protected queryResponse(query: string, values: unknown[]): Promise<ResponseJSON<Record<string, unknown>>>;
75
+ protected normaliseResponse<R = unknown>(res: ResponseJSON<Record<string, unknown>>): Array<R>;
60
76
  release(): Promise<void>;
61
77
  informationSchemaQuery(): string;
62
78
  protected getTablesForSpecificSchemasQuery(schemasPlaceholders: string): string;
@@ -68,19 +84,24 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
68
84
  downloadQueryResults(query: string, values: unknown[], options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult>;
69
85
  toGenericType(columnType: string): string;
70
86
  createSchemaIfNotExists(schemaName: string): Promise<void>;
71
- getTablesQuery(schemaName: string): Promise<any>;
72
- protected getExportBucket(dataSource: string): ClickhouseDriverExportAWS | undefined;
87
+ getTablesQuery(schemaName: string): Promise<TableQueryResult[]>;
88
+ dropTable(tableName: string, _options?: QueryOptions): Promise<void>;
89
+ protected getExportBucket(dataSource: string): ClickhouseDriverExportAWS | null;
73
90
  isUnloadSupported(): Promise<boolean>;
74
91
  /**
75
92
  * Returns an array of queried fields meta info.
76
93
  */
77
94
  queryColumnTypes(sql: string, params: unknown[]): Promise<TableStructure>;
95
+ createTableRaw(query: string): Promise<void>;
96
+ createTable(quotedTableName: string, columns: TableColumn[]): Promise<void>;
78
97
  /**
79
98
  * We use unloadWithoutTempTable strategy
80
99
  */
81
100
  unload(_tableName: string, options: UnloadOptions): Promise<DownloadTableCSVData>;
82
101
  unloadFromQuery(sql: string, params: unknown[], options: UnloadOptions): Promise<DownloadTableCSVData>;
83
102
  capabilities(): DriverCapabilities;
103
+ command(query: string): Promise<void>;
104
+ insert(table: string, values: Array<Array<unknown>>): Promise<void>;
84
105
  }
85
106
  export {};
86
107
  //# sourceMappingURL=ClickHouseDriver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,UAAU,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAoB,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAiCjD,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,iCAAiC;IACzC,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kCAAmC,SAAQ,iCAAiC;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,yBAA0B,SAAQ,kCAAkC;CAC7E;AAED,qBAAa,gBAAiB,SAAQ,UAAW,YAAW,eAAe;IACzE;;OAEG;WACW,qBAAqB,IAAI,MAAM;IAI7C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAEzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAE/B;;OAEG;gBAED,MAAM,GAAE,uBAAuB,GAAG;QAChC;;WAEG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;QAEpB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;;WAGG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAkER,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC;IAkC3D,cAAc;IAIpB,QAAQ;IAMF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAInD,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAmBxD,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG;IAcvB,OAAO;IAKb,sBAAsB;cAWV,gCAAgC,CAAC,mBAAmB,EAAE,MAAM;cAU5D,gCAAgC,CAAC,eAAe,EAAE,MAAM;cAYxD,0BAA0B;cAI1B,yBAAyB;IAItB,UAAU,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIpD,MAAM,CACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EAAE,EAEjB,EAAE,aAAa,EAAE,EAAE,aAAa,GAC/B,OAAO,CAAC,wBAAwB,CAAC;IAmDvB,oBAAoB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IAgB/B,aAAa,CAAC,UAAU,EAAE,MAAM;IA0B1B,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,cAAc,CAAC,UAAU,EAAE,MAAM;IAIxC,SAAS,CAAC,eAAe,CACvB,UAAU,EAAE,MAAM,GACjB,yBAAyB,GAAG,SAAS;IAwC3B,iBAAiB;IAQ9B;;OAEG;IACU,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAYtF;;OAEG;IACU,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAYjF,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwC5G,YAAY,IAAI,kBAAkB;CAM1C"}
1
+ {"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.ClickHouseDriver = void 0;
12
12
  const shared_1 = require("@cubejs-backend/shared");
13
13
  const base_driver_1 = require("@cubejs-backend/base-driver");
14
- const generic_pool_1 = __importDefault(require("generic-pool"));
14
+ const node_stream_1 = require("node:stream");
15
+ const client_1 = require("@clickhouse/client");
15
16
  const uuid_1 = require("uuid");
16
17
  const sqlstring_1 = __importDefault(require("sqlstring"));
17
18
  const HydrationStream_1 = require("./HydrationStream");
18
- const ClickHouse = require('@cubejs-backend/apla-clickhouse');
19
19
  const ClickhouseTypeToGeneric = {
20
20
  enum: 'text',
21
21
  string: 'text',
@@ -47,7 +47,8 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
47
47
  static getDefaultConcurrency() {
48
48
  return 5;
49
49
  }
50
- pool;
50
+ // ClickHouseClient has internal pool of several sockets, no need for generic-pool
51
+ client;
51
52
  readOnlyMode;
52
53
  config;
53
54
  /**
@@ -57,84 +58,86 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
57
58
  super({
58
59
  testConnectionTimeout: config.testConnectionTimeout,
59
60
  });
60
- const dataSource = config.dataSource ||
61
- (0, shared_1.assertDataSource)('default');
61
+ const dataSource = config.dataSource ?? (0, shared_1.assertDataSource)('default');
62
+ const host = config.host ?? (0, shared_1.getEnv)('dbHost', { dataSource });
63
+ const port = config.port ?? (0, shared_1.getEnv)('dbPort', { dataSource }) ?? 8123;
64
+ const protocol = config.protocol ?? (0, shared_1.getEnv)('dbSsl', { dataSource }) ? 'https:' : 'http:';
65
+ const url = `${protocol}//${host}:${port}`;
66
+ const username = (0, shared_1.getEnv)('dbUser', { dataSource });
67
+ const password = (0, shared_1.getEnv)('dbPass', { dataSource });
68
+ const database = config.database ?? (0, shared_1.getEnv)('dbName', { dataSource }) ?? 'default';
69
+ // TODO this is a bit inconsistent with readOnly
70
+ this.readOnlyMode =
71
+ (0, shared_1.getEnv)('clickhouseReadOnly', { dataSource }) === 'true';
72
+ // Expect that getEnv('dbQueryTimeout') will always return a value
73
+ const requestTimeoutEnv = (0, shared_1.getEnv)('dbQueryTimeout', { dataSource }) * 1000;
74
+ const requestTimeout = config.requestTimeout ?? requestTimeoutEnv;
62
75
  this.config = {
63
- host: (0, shared_1.getEnv)('dbHost', { dataSource }),
64
- port: (0, shared_1.getEnv)('dbPort', { dataSource }),
65
- auth: (0, shared_1.getEnv)('dbUser', { dataSource }) ||
66
- (0, shared_1.getEnv)('dbPass', { dataSource })
67
- ? `${(0, shared_1.getEnv)('dbUser', { dataSource })}:${(0, shared_1.getEnv)('dbPass', { dataSource })}`
68
- : '',
69
- protocol: (0, shared_1.getEnv)('dbSsl', { dataSource }) ? 'https:' : 'http:',
70
- queryOptions: {
71
- database: (0, shared_1.getEnv)('dbName', { dataSource }) ||
72
- config && config.database ||
73
- 'default'
74
- },
76
+ url,
77
+ username,
78
+ password,
79
+ database,
75
80
  exportBucket: this.getExportBucket(dataSource),
76
- ...config
81
+ readOnly: !!config.readOnly,
82
+ requestTimeout,
83
+ clickhouseSettings: {
84
+ // If ClickHouse user's permissions are restricted with "readonly = 1",
85
+ // change settings queries are not allowed. Thus, "join_use_nulls" setting
86
+ // can not be changed
87
+ ...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
88
+ },
77
89
  };
78
- this.readOnlyMode =
79
- (0, shared_1.getEnv)('clickhouseReadOnly', { dataSource }) === 'true';
80
- this.pool = generic_pool_1.default.createPool({
81
- create: async () => new ClickHouse({
82
- ...this.config,
83
- queryOptions: {
84
- //
85
- //
86
- // If ClickHouse user's permissions are restricted with "readonly = 1",
87
- // change settings queries are not allowed. Thus, "join_use_nulls" setting
88
- // can not be changed
89
- //
90
- //
91
- ...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
92
- session_id: (0, uuid_1.v4)(),
93
- ...this.config.queryOptions,
94
- }
95
- }),
96
- destroy: () => Promise.resolve()
97
- }, {
98
- min: 0,
99
- max: config.maxPoolSize ||
100
- (0, shared_1.getEnv)('dbMaxPoolSize', { dataSource }) ||
101
- 8,
102
- evictionRunIntervalMillis: 10000,
103
- softIdleTimeoutMillis: 30000,
104
- idleTimeoutMillis: 30000,
105
- acquireTimeoutMillis: 20000
106
- });
90
+ const maxPoolSize = config.maxPoolSize ?? (0, shared_1.getEnv)("dbMaxPoolSize", { dataSource }) ?? 8;
91
+ this.client = this.createClient(maxPoolSize);
107
92
  }
108
- withConnection(fn) {
109
- const self = this;
110
- const connectionPromise = this.pool.acquire();
93
+ withCancel(fn) {
111
94
  const queryId = (0, uuid_1.v4)();
112
- let cancelled = false;
113
- const cancelObj = {};
114
- const promise = connectionPromise.then((connection) => {
115
- cancelObj.cancel = async () => {
116
- cancelled = true;
117
- await self.withConnection(async (conn) => {
118
- await conn.querying(`KILL QUERY WHERE query_id = '${queryId}'`);
119
- });
120
- };
121
- return fn(connection, queryId)
122
- .then(res => this.pool.release(connection).then(() => {
123
- if (cancelled) {
124
- throw new Error('Query cancelled');
95
+ const abortController = new AbortController();
96
+ const { signal } = abortController;
97
+ const promise = (async () => {
98
+ const pingResult = await this.client.ping();
99
+ if (!pingResult.success) {
100
+ // TODO replace string formatting with proper cause
101
+ // pingResult.error can be AggregateError when ClickHouse hostname resolves to multiple addresses
102
+ let errorMessage = pingResult.error.toString();
103
+ if (pingResult.error instanceof AggregateError) {
104
+ errorMessage = `Aggregate error: ${pingResult.error.message}; errors: ${pingResult.error.errors.join('; ')}`;
125
105
  }
126
- return res;
127
- }))
128
- .catch((err) => this.pool.release(connection).then(() => {
129
- if (cancelled) {
130
- throw new Error('Query cancelled');
131
- }
132
- throw err;
133
- }));
134
- });
135
- promise.cancel = () => cancelObj.cancel();
106
+ throw new Error(`Connection check failed: ${errorMessage}`);
107
+ }
108
+ signal.throwIfAborted();
109
+ // Queries sent by `fn` can hit a timeout error, would _not_ get killed, and continue running in ClickHouse
110
+ // TODO should we kill those as well?
111
+ const result = await fn(this.client, queryId, signal);
112
+ signal.throwIfAborted();
113
+ return result;
114
+ })();
115
+ promise.cancel = async () => {
116
+ abortController.abort();
117
+ // Use separate client for kill query, usual pool may be busy
118
+ const killClient = this.createClient(1);
119
+ try {
120
+ await killClient.command({
121
+ query: `KILL QUERY WHERE query_id = '${queryId}'`,
122
+ });
123
+ }
124
+ finally {
125
+ await killClient.close();
126
+ }
127
+ };
136
128
  return promise;
137
129
  }
130
+ createClient(maxPoolSize) {
131
+ return (0, client_1.createClient)({
132
+ url: this.config.url,
133
+ username: this.config.username,
134
+ password: this.config.password,
135
+ database: this.config.database,
136
+ clickhouse_settings: this.config.clickhouseSettings,
137
+ request_timeout: this.config.requestTimeout,
138
+ max_open_connections: maxPoolSize,
139
+ });
140
+ }
138
141
  async testConnection() {
139
142
  await this.query('SELECT 1', []);
140
143
  }
@@ -144,28 +147,38 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
144
147
  true;
145
148
  }
146
149
  async query(query, values) {
147
- return this.queryResponse(query, values).then((res) => this.normaliseResponse(res));
150
+ const response = await this.queryResponse(query, values);
151
+ return this.normaliseResponse(response);
148
152
  }
149
153
  queryResponse(query, values) {
150
154
  const formattedQuery = sqlstring_1.default.format(query, values);
151
- return this.withConnection((connection, queryId) => connection.querying(formattedQuery, {
152
- dataObjects: true,
153
- queryOptions: {
154
- query_id: queryId,
155
- //
156
- //
157
- // If ClickHouse user's permissions are restricted with "readonly = 1",
158
- // change settings queries are not allowed. Thus, "join_use_nulls" setting
159
- // can not be changed
160
- //
161
- //
162
- ...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
155
+ return this.withCancel(async (connection, queryId, signal) => {
156
+ try {
157
+ const format = 'JSON';
158
+ const resultSet = await connection.query({
159
+ query: formattedQuery,
160
+ query_id: queryId,
161
+ format,
162
+ clickhouse_settings: this.config.clickhouseSettings,
163
+ abort_signal: signal,
164
+ });
165
+ if (resultSet.response_headers['x-clickhouse-format'] !== format) {
166
+ throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
167
+ }
168
+ // We used format JSON, so we expect each row to be Record with column names as keys
169
+ const results = await resultSet.json();
170
+ return results;
163
171
  }
164
- }));
172
+ catch (e) {
173
+ // TODO replace string formatting with proper cause
174
+ throw new Error(`Query failed: ${e}; query id: ${queryId}`);
175
+ }
176
+ });
165
177
  }
166
178
  normaliseResponse(res) {
167
179
  if (res.data) {
168
- const meta = res.meta.reduce((state, element) => ({ [element.name]: element, ...state }), {});
180
+ const meta = (res.meta ?? []).reduce((state, element) => ({ [element.name]: element, ...state }), {});
181
+ // TODO maybe use row-based format here as well?
169
182
  res.data.forEach((row) => {
170
183
  (0, HydrationStream_1.transformRow)(row, meta);
171
184
  });
@@ -173,8 +186,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
173
186
  return res.data;
174
187
  }
175
188
  async release() {
176
- await this.pool.drain();
177
- await this.pool.clear();
189
+ await this.client.close();
178
190
  }
179
191
  informationSchemaQuery() {
180
192
  return `
@@ -183,7 +195,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
183
195
  database as table_schema,
184
196
  type as data_type
185
197
  FROM system.columns
186
- WHERE database = '${this.config.queryOptions.database}'
198
+ WHERE database = '${this.config.database}'
187
199
  `;
188
200
  }
189
201
  getTablesForSpecificSchemasQuery(schemasPlaceholders) {
@@ -213,65 +225,86 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
213
225
  return 'table';
214
226
  }
215
227
  async getSchemas() {
216
- return [{ schema_name: this.config.queryOptions.database }];
228
+ return [{ schema_name: this.config.database }];
217
229
  }
218
230
  async stream(query, values,
219
231
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
220
232
  { highWaterMark }) {
221
- // eslint-disable-next-line no-underscore-dangle
222
- const conn = await this.pool._factory.create();
233
+ // Use separate client for this long-living query
234
+ const client = this.createClient(1);
235
+ const queryId = (0, uuid_1.v4)();
223
236
  try {
224
237
  const formattedQuery = sqlstring_1.default.format(query, values);
225
- return await new Promise((resolve, reject) => {
226
- const options = {
227
- queryOptions: {
228
- query_id: (0, uuid_1.v4)(),
229
- //
230
- //
231
- // If ClickHouse user's permissions are restricted with "readonly = 1",
232
- // change settings queries are not allowed. Thus, "join_use_nulls" setting
233
- // can not be changed
234
- //
235
- //
236
- ...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
237
- }
238
- };
239
- const originalStream = conn.query(formattedQuery, options, (err, result) => {
240
- if (err) {
241
- reject(err);
242
- }
243
- else {
244
- const rowStream = new HydrationStream_1.HydrationStream(result.meta);
245
- originalStream.pipe(rowStream);
246
- resolve({
247
- rowStream,
248
- types: result.meta.map((field) => ({
249
- name: field.name,
250
- type: this.toGenericType(field.type),
251
- })),
252
- release: async () => {
253
- // eslint-disable-next-line no-underscore-dangle
254
- await this.pool._factory.destroy(conn);
255
- }
256
- });
257
- }
258
- });
238
+ const format = 'JSONCompactEachRowWithNamesAndTypes';
239
+ const resultSet = await client.query({
240
+ query: formattedQuery,
241
+ query_id: queryId,
242
+ format,
243
+ clickhouse_settings: this.config.clickhouseSettings,
259
244
  });
245
+ if (resultSet.response_headers['x-clickhouse-format'] !== format) {
246
+ throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
247
+ }
248
+ // Array<unknown> is okay, because we use fixed JSONCompactEachRowWithNamesAndTypes format
249
+ // And each row after first two will look like this: [42, "hello", [0,1]]
250
+ // https://clickhouse.com/docs/en/interfaces/formats#jsoncompacteachrowwithnamesandtypes
251
+ const resultSetStream = resultSet.stream();
252
+ const allRowsIter = (async function* allRowsIter() {
253
+ for await (const rowsBatch of resultSetStream) {
254
+ for (const row of rowsBatch) {
255
+ yield row.json();
256
+ }
257
+ }
258
+ }());
259
+ const first = await allRowsIter.next();
260
+ if (first.done) {
261
+ throw new Error('Unexpected stream end before row with names');
262
+ }
263
+ // JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
264
+ const names = first.value;
265
+ const second = await allRowsIter.next();
266
+ if (second.done) {
267
+ throw new Error('Unexpected stream end before row with types');
268
+ }
269
+ // JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
270
+ const types = second.value;
271
+ if (names.length !== types.length) {
272
+ throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
273
+ }
274
+ const dataRowsIter = (async function* () {
275
+ for await (const row of allRowsIter) {
276
+ yield (0, HydrationStream_1.transformStreamRow)(row, names, types);
277
+ }
278
+ }());
279
+ const rowStream = node_stream_1.Readable.from(dataRowsIter);
280
+ return {
281
+ rowStream,
282
+ types: names.map((name, idx) => {
283
+ const type = types[idx];
284
+ return {
285
+ name,
286
+ type: this.toGenericType(type),
287
+ };
288
+ }),
289
+ release: async () => {
290
+ await client.close();
291
+ }
292
+ };
260
293
  }
261
294
  catch (e) {
262
- // eslint-disable-next-line no-underscore-dangle
263
- await this.pool._factory.destroy(conn);
264
- throw e;
295
+ await client.close();
296
+ // TODO replace string formatting with proper cause
297
+ throw new Error(`Stream query failed: ${e}; query id: ${queryId}`);
265
298
  }
266
299
  }
267
300
  async downloadQueryResults(query, values, options) {
268
- if ((options || {}).streamImport) {
301
+ if ((options ?? {}).streamImport) {
269
302
  return this.stream(query, values, options);
270
303
  }
271
304
  const response = await this.queryResponse(query, values);
272
305
  return {
273
306
  rows: this.normaliseResponse(response),
274
- types: response.meta.map((field) => ({
307
+ types: (response.meta ?? []).map((field) => ({
275
308
  name: field.name,
276
309
  type: this.toGenericType(field.type),
277
310
  })),
@@ -301,11 +334,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
301
334
  return super.toGenericType(columnType);
302
335
  }
303
336
  async createSchemaIfNotExists(schemaName) {
304
- await this.query(`CREATE DATABASE IF NOT EXISTS ${schemaName}`, []);
337
+ await this.command(`CREATE DATABASE IF NOT EXISTS ${schemaName}`);
305
338
  }
306
339
  getTablesQuery(schemaName) {
307
340
  return this.query('SELECT name as table_name FROM system.tables WHERE database = ?', [schemaName]);
308
341
  }
342
+ async dropTable(tableName, _options) {
343
+ await this.command(`DROP TABLE ${tableName}`);
344
+ }
309
345
  getExportBucket(dataSource) {
310
346
  const supportedBucketTypes = ['s3'];
311
347
  const requiredExportBucket = {
@@ -333,7 +369,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
333
369
  }
334
370
  return exportBucket;
335
371
  }
336
- return undefined;
372
+ return null;
337
373
  }
338
374
  async isUnloadSupported() {
339
375
  if (this.config.exportBucket) {
@@ -354,6 +390,20 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
354
390
  type: this.toGenericType(column.type),
355
391
  }));
356
392
  }
393
+ // This is only for use in tests
394
+ async createTableRaw(query) {
395
+ await this.command(query);
396
+ }
397
+ async createTable(quotedTableName, columns) {
398
+ const createTableSql = this.createTableSql(quotedTableName, columns);
399
+ try {
400
+ await this.command(createTableSql);
401
+ }
402
+ catch (e) {
403
+ // TODO replace string formatting with proper cause
404
+ throw new Error(`Create table failed: ${e}`);
405
+ }
406
+ }
357
407
  /**
358
408
  * We use unloadWithoutTempTable strategy
359
409
  */
@@ -369,7 +419,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
369
419
  }
370
420
  const types = await this.queryColumnTypes(`(${sql})`, params);
371
421
  const exportPrefix = (0, uuid_1.v4)();
372
- await this.queryResponse(`
422
+ const formattedQuery = sqlstring_1.default.format(`
373
423
  INSERT INTO FUNCTION
374
424
  s3(
375
425
  'https://${this.config.exportBucket.bucketName}.s3.${this.config.exportBucket.region}.amazonaws.com/${exportPrefix}/export.csv.gz',
@@ -379,6 +429,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
379
429
  )
380
430
  ${sql}
381
431
  `, params);
432
+ await this.command(formattedQuery);
382
433
  const csvFile = await this.extractUnloadedFilesFromS3({
383
434
  credentials: {
384
435
  accessKeyId: this.config.exportBucket.keyId,
@@ -400,6 +451,28 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
400
451
  incrementalSchemaLoading: true,
401
452
  };
402
453
  }
454
+ // This is not part of a driver interface, and marked public only for testing
455
+ async command(query) {
456
+ await this.withCancel(async (connection, queryId, signal) => {
457
+ await connection.command({
458
+ query,
459
+ query_id: queryId,
460
+ abort_signal: signal,
461
+ });
462
+ });
463
+ }
464
+ // This is not part of a driver interface, and marked public only for testing
465
+ async insert(table, values) {
466
+ await this.withCancel(async (connection, queryId, signal) => {
467
+ await connection.insert({
468
+ table,
469
+ values,
470
+ format: 'JSONCompactEachRow',
471
+ query_id: queryId,
472
+ abort_signal: signal,
473
+ });
474
+ });
475
+ }
403
476
  }
404
477
  exports.ClickHouseDriver = ClickHouseDriver;
405
478
  //# sourceMappingURL=ClickHouseDriver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClickHouseDriver.js","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClickHouseDriver.js","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- /// <reference types="node" />
2
- import stream from 'stream';
3
- export declare function transformRow(row: Record<string, any>, meta: any): void;
4
- export declare class HydrationStream extends stream.Transform {
5
- constructor(meta: any);
6
- }
1
+ export declare function transformRow(row: Record<string, unknown>, meta: any): void;
2
+ export declare function transformStreamRow(row: Array<unknown>, names: Array<string>, types: Array<string>): Record<string, unknown>;
7
3
  //# sourceMappingURL=HydrationStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HydrationStream.d.ts","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":";AAAA,OAAO,MAA6B,MAAM,QAAQ,CAAC;AAOnD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,QAmB/D;AAED,qBAAa,eAAgB,SAAQ,MAAM,CAAC,SAAS;gBAChC,IAAI,EAAE,GAAG;CAW7B"}
1
+ {"version":3,"file":"HydrationStream.d.ts","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":"AA4BA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,QAKnE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY3H"}
@@ -22,51 +22,53 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.HydrationStream = exports.transformRow = void 0;
30
- const stream_1 = __importDefault(require("stream"));
26
+ exports.transformStreamRow = exports.transformRow = void 0;
31
27
  const moment = __importStar(require("moment"));
32
28
  // ClickHouse returns DateTime as strings in format "YYYY-DD-MM HH:MM:SS"
33
29
  // cube.js expects them in format "YYYY-DD-MMTHH:MM:SS.000", so translate them based on the metadata returned
34
30
  //
35
31
  // ClickHouse returns some number types as js numbers, others as js string, normalise them all to strings
32
+ function transformValue(type, value) {
33
+ if (value !== null) {
34
+ if (type.includes('DateTime64')) {
35
+ return moment.utc(value).format(moment.HTML5_FMT.DATETIME_LOCAL_MS);
36
+ }
37
+ else if (type.includes('DateTime') /** Can be DateTime or DateTime('timezone') */) {
38
+ // expect DateTime to always be string
39
+ const valueStr = value;
40
+ return `${valueStr.substring(0, 10)}T${valueStr.substring(11, 22)}.000`;
41
+ }
42
+ else if (type.includes('Date')) {
43
+ return `${value}T00:00:00.000`;
44
+ }
45
+ else if (type.includes('Int')
46
+ || type.includes('Float')
47
+ || type.includes('Decimal')) {
48
+ // convert all numbers into strings
49
+ return `${value}`;
50
+ }
51
+ }
52
+ return value;
53
+ }
36
54
  function transformRow(row, meta) {
37
55
  for (const [fieldName, value] of Object.entries(row)) {
38
- if (value !== null) {
39
- const metaForField = meta[fieldName];
40
- if (metaForField.type.includes('DateTime64')) {
41
- row[fieldName] = moment.utc(value).format(moment.HTML5_FMT.DATETIME_LOCAL_MS);
42
- }
43
- else if (metaForField.type.includes('DateTime') /** Can be DateTime or DateTime('timezone') */) {
44
- row[fieldName] = `${value.substring(0, 10)}T${value.substring(11, 22)}.000`;
45
- }
46
- else if (metaForField.type.includes('Date')) {
47
- row[fieldName] = `${value}T00:00:00.000`;
48
- }
49
- else if (metaForField.type.includes('Int')
50
- || metaForField.type.includes('Float')
51
- || metaForField.type.includes('Decimal')) {
52
- // convert all numbers into strings
53
- row[fieldName] = `${value}`;
54
- }
55
- }
56
+ const metaForField = meta[fieldName];
57
+ row[fieldName] = transformValue(metaForField.type, value);
56
58
  }
57
59
  }
58
60
  exports.transformRow = transformRow;
59
- class HydrationStream extends stream_1.default.Transform {
60
- constructor(meta) {
61
- super({
62
- objectMode: true,
63
- transform(row, encoding, callback) {
64
- transformRow(row, meta);
65
- this.push(row);
66
- callback();
67
- }
68
- });
61
+ function transformStreamRow(row, names, types) {
62
+ if (row.length !== names.length) {
63
+ throw new Error(`Unexpected row and names/types length mismatch; row ${row.length} vs names ${names.length}`);
69
64
  }
65
+ return row.reduce((rowObj, value, idx) => {
66
+ const name = names[idx];
67
+ const type = types[idx];
68
+ rowObj[name] = transformValue(type, value);
69
+ return rowObj;
70
+ // TODO do we actually want Object.create(null) safety? or is it ok to use {}
71
+ }, Object.create(null));
70
72
  }
71
- exports.HydrationStream = HydrationStream;
73
+ exports.transformStreamRow = transformStreamRow;
72
74
  //# sourceMappingURL=HydrationStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HydrationStream.js","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAmD;AACnD,+CAAiC;AAEjC,0EAA0E;AAC1E,8GAA8G;AAC9G,EAAE;AACF,0GAA0G;AAC1G,SAAgB,YAAY,CAAC,GAAwB,EAAE,IAAS;IAC9D,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpD,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;aAC/E;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,8CAA8C,EAAE;gBAChG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;aAC7E;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,KAAK,eAAe,CAAC;aAC1C;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;mBACvC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;mBACnC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EACxC;gBACA,mCAAmC;gBACnC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;aAC7B;SACF;KACF;AACH,CAAC;AAnBD,oCAmBC;AAED,MAAa,eAAgB,SAAQ,gBAAM,CAAC,SAAS;IACnD,YAAmB,IAAS;QAC1B,KAAK,CAAC;YACJ,UAAU,EAAE,IAAI;YAChB,SAAS,CAAC,GAAU,EAAE,QAAwB,EAAE,QAA2B;gBACzE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAExB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,EAAE,CAAC;YACb,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAZD,0CAYC"}
1
+ {"version":3,"file":"HydrationStream.js","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC,0EAA0E;AAC1E,8GAA8G;AAC9G,EAAE;AACF,0GAA0G;AAC1G,SAAS,cAAc,CAAC,IAAY,EAAE,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;SACrE;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,8CAA8C,EAAE;YACnF,sCAAsC;YACtC,MAAM,QAAQ,GAAG,KAAe,CAAC;YACjC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;SACzE;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,GAAG,KAAK,eAAe,CAAC;SAChC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;eAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;eACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC3B;YACA,mCAAmC;YACnC,OAAO,GAAG,KAAK,EAAE,CAAC;SACnB;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,YAAY,CAAC,GAA4B,EAAE,IAAS;IAClE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,GAAG,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC3D;AACH,CAAC;AALD,oCAKC;AAED,SAAgB,kBAAkB,CAAC,GAAmB,EAAE,KAAoB,EAAE,KAAoB;IAChG,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,uDAAuD,GAAG,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/G;IAED,OAAO,GAAG,CAAC,MAAM,CAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;QACd,6EAA6E;IAC/E,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,CAAC;AAZD,gDAYC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@cubejs-backend/clickhouse-driver",
3
3
  "description": "Cube.js ClickHouse database driver",
4
4
  "author": "Cube Dev, Inc.",
5
- "version": "1.1.6",
5
+ "version": "1.1.8",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/cube-js/cube.git",
@@ -27,10 +27,9 @@
27
27
  "integration:clickhouse": "jest dist/test"
28
28
  },
29
29
  "dependencies": {
30
- "@cubejs-backend/apla-clickhouse": "^1.7",
31
- "@cubejs-backend/base-driver": "1.1.4",
32
- "@cubejs-backend/shared": "1.1.4",
33
- "generic-pool": "^3.6.0",
30
+ "@clickhouse/client": "^1.7.0",
31
+ "@cubejs-backend/base-driver": "1.1.8",
32
+ "@cubejs-backend/shared": "1.1.8",
34
33
  "moment": "^2.24.0",
35
34
  "sqlstring": "^2.3.1",
36
35
  "uuid": "^8.3.2"
@@ -38,7 +37,7 @@
38
37
  "license": "Apache-2.0",
39
38
  "devDependencies": {
40
39
  "@cubejs-backend/linter": "^1.0.0",
41
- "@cubejs-backend/testing-shared": "1.1.6",
40
+ "@cubejs-backend/testing-shared": "1.1.8",
42
41
  "@types/jest": "^27",
43
42
  "jest": "27",
44
43
  "typescript": "~5.2.2"
@@ -52,5 +51,5 @@
52
51
  "eslintConfig": {
53
52
  "extends": "../cubejs-linter"
54
53
  },
55
- "gitHead": "471e10cb533d1c79b362513d02295d06dcb2653f"
54
+ "gitHead": "2b4bc9efeee2dc43515822738f23c6c5e85e4461"
56
55
  }