@cubejs-backend/clickhouse-driver 1.1.5 → 1.1.7
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.
- package/dist/src/ClickHouseDriver.d.ts +51 -30
- package/dist/src/ClickHouseDriver.d.ts.map +1 -1
- package/dist/src/ClickHouseDriver.js +197 -136
- package/dist/src/ClickHouseDriver.js.map +1 -1
- package/dist/src/HydrationStream.d.ts +2 -6
- package/dist/src/HydrationStream.d.ts.map +1 -1
- package/dist/src/HydrationStream.js +36 -34
- package/dist/src/HydrationStream.js.map +1 -1
- package/package.json +6 -7
|
@@ -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 {
|
|
8
|
-
|
|
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
|
-
|
|
12
|
+
username?: string;
|
|
13
|
+
password?: string;
|
|
12
14
|
protocol?: string;
|
|
13
15
|
database?: string;
|
|
14
16
|
readOnly?: boolean;
|
|
15
|
-
|
|
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
|
|
24
|
-
secretKey
|
|
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
|
|
62
|
+
protected readonly client: ClickHouseClient;
|
|
34
63
|
protected readonly readOnlyMode: boolean;
|
|
35
|
-
protected readonly config:
|
|
64
|
+
protected readonly config: ClickHouseDriverConfig;
|
|
36
65
|
/**
|
|
37
66
|
* Class constructor.
|
|
38
67
|
*/
|
|
39
|
-
constructor(config?: ClickHouseDriverOptions
|
|
40
|
-
|
|
41
|
-
|
|
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<
|
|
58
|
-
protected queryResponse(query: string, values: unknown[]):
|
|
59
|
-
protected normaliseResponse(res:
|
|
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<
|
|
72
|
-
|
|
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;
|
|
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
|
|
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,77 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
57
58
|
super({
|
|
58
59
|
testConnectionTimeout: config.testConnectionTimeout,
|
|
59
60
|
});
|
|
60
|
-
const dataSource = config.dataSource
|
|
61
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
109
|
-
const self = this;
|
|
110
|
-
const connectionPromise = this.pool.acquire();
|
|
93
|
+
withCancel(fn) {
|
|
111
94
|
const queryId = (0, uuid_1.v4)();
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
const promise =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
95
|
+
const abortController = new AbortController();
|
|
96
|
+
const { signal } = abortController;
|
|
97
|
+
const promise = (async () => {
|
|
98
|
+
await this.client.ping();
|
|
99
|
+
signal.throwIfAborted();
|
|
100
|
+
// Queries sent by `fn` can hit a timeout error, would _not_ get killed, and continue running in ClickHouse
|
|
101
|
+
// TODO should we kill those as well?
|
|
102
|
+
const result = await fn(this.client, queryId, signal);
|
|
103
|
+
signal.throwIfAborted();
|
|
104
|
+
return result;
|
|
105
|
+
})();
|
|
106
|
+
promise.cancel = async () => {
|
|
107
|
+
abortController.abort();
|
|
108
|
+
// Use separate client for kill query, usual pool may be busy
|
|
109
|
+
const killClient = this.createClient(1);
|
|
110
|
+
try {
|
|
111
|
+
await killClient.command({
|
|
112
|
+
query: `KILL QUERY WHERE query_id = '${queryId}'`,
|
|
119
113
|
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
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();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await killClient.close();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
136
119
|
return promise;
|
|
137
120
|
}
|
|
121
|
+
createClient(maxPoolSize) {
|
|
122
|
+
return (0, client_1.createClient)({
|
|
123
|
+
url: this.config.url,
|
|
124
|
+
username: this.config.username,
|
|
125
|
+
password: this.config.password,
|
|
126
|
+
database: this.config.database,
|
|
127
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
128
|
+
request_timeout: this.config.requestTimeout,
|
|
129
|
+
max_open_connections: maxPoolSize,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
138
132
|
async testConnection() {
|
|
139
133
|
await this.query('SELECT 1', []);
|
|
140
134
|
}
|
|
@@ -144,28 +138,37 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
144
138
|
true;
|
|
145
139
|
}
|
|
146
140
|
async query(query, values) {
|
|
147
|
-
|
|
141
|
+
const response = await this.queryResponse(query, values);
|
|
142
|
+
return this.normaliseResponse(response);
|
|
148
143
|
}
|
|
149
144
|
queryResponse(query, values) {
|
|
150
145
|
const formattedQuery = sqlstring_1.default.format(query, values);
|
|
151
|
-
return this.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
146
|
+
return this.withCancel(async (connection, queryId, signal) => {
|
|
147
|
+
try {
|
|
148
|
+
const format = 'JSON';
|
|
149
|
+
const resultSet = await connection.query({
|
|
150
|
+
query: formattedQuery,
|
|
151
|
+
query_id: queryId,
|
|
152
|
+
format,
|
|
153
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
154
|
+
abort_signal: signal,
|
|
155
|
+
});
|
|
156
|
+
if (resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
157
|
+
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
158
|
+
}
|
|
159
|
+
// We used format JSON, so we expect each row to be Record with column names as keys
|
|
160
|
+
const results = await resultSet.json();
|
|
161
|
+
return results;
|
|
163
162
|
}
|
|
164
|
-
|
|
163
|
+
catch (e) {
|
|
164
|
+
throw new Error(`Query failed; query id: ${queryId}, SQL: ${query}`, { cause: e });
|
|
165
|
+
}
|
|
166
|
+
});
|
|
165
167
|
}
|
|
166
168
|
normaliseResponse(res) {
|
|
167
169
|
if (res.data) {
|
|
168
|
-
const meta = res.meta.reduce((state, element) => ({ [element.name]: element, ...state }), {});
|
|
170
|
+
const meta = (res.meta ?? []).reduce((state, element) => ({ [element.name]: element, ...state }), {});
|
|
171
|
+
// TODO maybe use row-based format here as well?
|
|
169
172
|
res.data.forEach((row) => {
|
|
170
173
|
(0, HydrationStream_1.transformRow)(row, meta);
|
|
171
174
|
});
|
|
@@ -173,8 +176,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
173
176
|
return res.data;
|
|
174
177
|
}
|
|
175
178
|
async release() {
|
|
176
|
-
await this.
|
|
177
|
-
await this.pool.clear();
|
|
179
|
+
await this.client.close();
|
|
178
180
|
}
|
|
179
181
|
informationSchemaQuery() {
|
|
180
182
|
return `
|
|
@@ -183,7 +185,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
183
185
|
database as table_schema,
|
|
184
186
|
type as data_type
|
|
185
187
|
FROM system.columns
|
|
186
|
-
WHERE database = '${this.config.
|
|
188
|
+
WHERE database = '${this.config.database}'
|
|
187
189
|
`;
|
|
188
190
|
}
|
|
189
191
|
getTablesForSpecificSchemasQuery(schemasPlaceholders) {
|
|
@@ -213,65 +215,85 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
213
215
|
return 'table';
|
|
214
216
|
}
|
|
215
217
|
async getSchemas() {
|
|
216
|
-
return [{ schema_name: this.config.
|
|
218
|
+
return [{ schema_name: this.config.database }];
|
|
217
219
|
}
|
|
218
220
|
async stream(query, values,
|
|
219
221
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
220
222
|
{ highWaterMark }) {
|
|
221
|
-
//
|
|
222
|
-
const
|
|
223
|
+
// Use separate client for this long-living query
|
|
224
|
+
const client = this.createClient(1);
|
|
225
|
+
const queryId = (0, uuid_1.v4)();
|
|
223
226
|
try {
|
|
224
227
|
const formattedQuery = sqlstring_1.default.format(query, values);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
});
|
|
228
|
+
const format = 'JSONCompactEachRowWithNamesAndTypes';
|
|
229
|
+
const resultSet = await client.query({
|
|
230
|
+
query: formattedQuery,
|
|
231
|
+
query_id: queryId,
|
|
232
|
+
format,
|
|
233
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
259
234
|
});
|
|
235
|
+
if (resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
236
|
+
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
237
|
+
}
|
|
238
|
+
// Array<unknown> is okay, because we use fixed JSONCompactEachRowWithNamesAndTypes format
|
|
239
|
+
// And each row after first two will look like this: [42, "hello", [0,1]]
|
|
240
|
+
// https://clickhouse.com/docs/en/interfaces/formats#jsoncompacteachrowwithnamesandtypes
|
|
241
|
+
const resultSetStream = resultSet.stream();
|
|
242
|
+
const allRowsIter = (async function* allRowsIter() {
|
|
243
|
+
for await (const rowsBatch of resultSetStream) {
|
|
244
|
+
for (const row of rowsBatch) {
|
|
245
|
+
yield row.json();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}());
|
|
249
|
+
const first = await allRowsIter.next();
|
|
250
|
+
if (first.done) {
|
|
251
|
+
throw new Error('Unexpected stream end before row with names');
|
|
252
|
+
}
|
|
253
|
+
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
254
|
+
const names = first.value;
|
|
255
|
+
const second = await allRowsIter.next();
|
|
256
|
+
if (second.done) {
|
|
257
|
+
throw new Error('Unexpected stream end before row with types');
|
|
258
|
+
}
|
|
259
|
+
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
260
|
+
const types = second.value;
|
|
261
|
+
if (names.length !== types.length) {
|
|
262
|
+
throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
|
|
263
|
+
}
|
|
264
|
+
const dataRowsIter = (async function* () {
|
|
265
|
+
for await (const row of allRowsIter) {
|
|
266
|
+
yield (0, HydrationStream_1.transformStreamRow)(row, names, types);
|
|
267
|
+
}
|
|
268
|
+
}());
|
|
269
|
+
const rowStream = node_stream_1.Readable.from(dataRowsIter);
|
|
270
|
+
return {
|
|
271
|
+
rowStream,
|
|
272
|
+
types: names.map((name, idx) => {
|
|
273
|
+
const type = types[idx];
|
|
274
|
+
return {
|
|
275
|
+
name,
|
|
276
|
+
type: this.toGenericType(type),
|
|
277
|
+
};
|
|
278
|
+
}),
|
|
279
|
+
release: async () => {
|
|
280
|
+
await client.close();
|
|
281
|
+
}
|
|
282
|
+
};
|
|
260
283
|
}
|
|
261
284
|
catch (e) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
throw e;
|
|
285
|
+
await client.close();
|
|
286
|
+
throw new Error(`Stream query failed; query id: ${queryId}, SQL: ${query}`, { cause: e });
|
|
265
287
|
}
|
|
266
288
|
}
|
|
267
289
|
async downloadQueryResults(query, values, options) {
|
|
268
|
-
if ((options
|
|
290
|
+
if ((options ?? {}).streamImport) {
|
|
269
291
|
return this.stream(query, values, options);
|
|
270
292
|
}
|
|
271
293
|
const response = await this.queryResponse(query, values);
|
|
272
294
|
return {
|
|
273
295
|
rows: this.normaliseResponse(response),
|
|
274
|
-
types: response.meta.map((field) => ({
|
|
296
|
+
types: (response.meta ?? []).map((field) => ({
|
|
275
297
|
name: field.name,
|
|
276
298
|
type: this.toGenericType(field.type),
|
|
277
299
|
})),
|
|
@@ -301,11 +323,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
301
323
|
return super.toGenericType(columnType);
|
|
302
324
|
}
|
|
303
325
|
async createSchemaIfNotExists(schemaName) {
|
|
304
|
-
await this.
|
|
326
|
+
await this.command(`CREATE DATABASE IF NOT EXISTS ${schemaName}`);
|
|
305
327
|
}
|
|
306
328
|
getTablesQuery(schemaName) {
|
|
307
329
|
return this.query('SELECT name as table_name FROM system.tables WHERE database = ?', [schemaName]);
|
|
308
330
|
}
|
|
331
|
+
async dropTable(tableName, _options) {
|
|
332
|
+
await this.command(`DROP TABLE ${tableName}`);
|
|
333
|
+
}
|
|
309
334
|
getExportBucket(dataSource) {
|
|
310
335
|
const supportedBucketTypes = ['s3'];
|
|
311
336
|
const requiredExportBucket = {
|
|
@@ -333,7 +358,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
333
358
|
}
|
|
334
359
|
return exportBucket;
|
|
335
360
|
}
|
|
336
|
-
return
|
|
361
|
+
return null;
|
|
337
362
|
}
|
|
338
363
|
async isUnloadSupported() {
|
|
339
364
|
if (this.config.exportBucket) {
|
|
@@ -354,6 +379,19 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
354
379
|
type: this.toGenericType(column.type),
|
|
355
380
|
}));
|
|
356
381
|
}
|
|
382
|
+
// This is only for use in tests
|
|
383
|
+
async createTableRaw(query) {
|
|
384
|
+
await this.command(query);
|
|
385
|
+
}
|
|
386
|
+
async createTable(quotedTableName, columns) {
|
|
387
|
+
const createTableSql = this.createTableSql(quotedTableName, columns);
|
|
388
|
+
try {
|
|
389
|
+
await this.command(createTableSql);
|
|
390
|
+
}
|
|
391
|
+
catch (e) {
|
|
392
|
+
throw new Error(`Error during create table: ${createTableSql}`, { cause: e });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
357
395
|
/**
|
|
358
396
|
* We use unloadWithoutTempTable strategy
|
|
359
397
|
*/
|
|
@@ -369,7 +407,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
369
407
|
}
|
|
370
408
|
const types = await this.queryColumnTypes(`(${sql})`, params);
|
|
371
409
|
const exportPrefix = (0, uuid_1.v4)();
|
|
372
|
-
|
|
410
|
+
const formattedQuery = sqlstring_1.default.format(`
|
|
373
411
|
INSERT INTO FUNCTION
|
|
374
412
|
s3(
|
|
375
413
|
'https://${this.config.exportBucket.bucketName}.s3.${this.config.exportBucket.region}.amazonaws.com/${exportPrefix}/export.csv.gz',
|
|
@@ -379,6 +417,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
379
417
|
)
|
|
380
418
|
${sql}
|
|
381
419
|
`, params);
|
|
420
|
+
await this.command(formattedQuery);
|
|
382
421
|
const csvFile = await this.extractUnloadedFilesFromS3({
|
|
383
422
|
credentials: {
|
|
384
423
|
accessKeyId: this.config.exportBucket.keyId,
|
|
@@ -400,6 +439,28 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
400
439
|
incrementalSchemaLoading: true,
|
|
401
440
|
};
|
|
402
441
|
}
|
|
442
|
+
// This is not part of a driver interface, and marked public only for testing
|
|
443
|
+
async command(query) {
|
|
444
|
+
await this.withCancel(async (connection, queryId, signal) => {
|
|
445
|
+
await connection.command({
|
|
446
|
+
query,
|
|
447
|
+
query_id: queryId,
|
|
448
|
+
abort_signal: signal,
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
// This is not part of a driver interface, and marked public only for testing
|
|
453
|
+
async insert(table, values) {
|
|
454
|
+
await this.withCancel(async (connection, queryId, signal) => {
|
|
455
|
+
await connection.insert({
|
|
456
|
+
table,
|
|
457
|
+
values,
|
|
458
|
+
format: 'JSONCompactEachRow',
|
|
459
|
+
query_id: queryId,
|
|
460
|
+
abort_signal: signal,
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
}
|
|
403
464
|
}
|
|
404
465
|
exports.ClickHouseDriver = ClickHouseDriver;
|
|
405
466
|
//# 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
|
-
|
|
2
|
-
|
|
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":"
|
|
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.
|
|
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
|
-
|
|
39
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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.
|
|
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":"
|
|
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.
|
|
5
|
+
"version": "1.1.7",
|
|
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
|
-
"@
|
|
31
|
-
"@cubejs-backend/base-driver": "1.1.
|
|
32
|
-
"@cubejs-backend/shared": "1.1.
|
|
33
|
-
"generic-pool": "^3.6.0",
|
|
30
|
+
"@clickhouse/client": "^1.7.0",
|
|
31
|
+
"@cubejs-backend/base-driver": "1.1.7",
|
|
32
|
+
"@cubejs-backend/shared": "1.1.7",
|
|
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.
|
|
40
|
+
"@cubejs-backend/testing-shared": "1.1.7",
|
|
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": "
|
|
54
|
+
"gitHead": "591a38394bd22d468b8aaf5bd0468459417042c8"
|
|
56
55
|
}
|