Skip to content

Commit 84211b2

Browse files
authored
feat(duckdb-driver): Allow to specify memory_limit as env variable (#6982)
1 parent e64116d commit 84211b2

File tree

2 files changed

+43
-29
lines changed

2 files changed

+43
-29
lines changed

packages/cubejs-backend-shared/src/env.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,6 +1409,16 @@ const variables: Record<string, (...args: any) => any> = {
14091409
]
14101410
),
14111411

1412+
duckdbMemoryLimit: ({
1413+
dataSource
1414+
}: {
1415+
dataSource: string,
1416+
}) => (
1417+
process.env[
1418+
keyByDataSource('CUBEJS_DB_DUCKDB_MEMORY_LIMIT', dataSource)
1419+
]
1420+
),
1421+
14121422
/**
14131423
* Presto catalog.
14141424
*/

packages/cubejs-duckdb-driver/src/DuckDBDriver.ts

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,6 @@ export class DuckDBDriver extends BaseDriver implements DriverInterface {
3232

3333
const db = new Database(token ? `md:?motherduck_token=${token}` : ':memory:');
3434
const conn = db.connect();
35-
36-
const s3InitQuries = [
37-
{
38-
key: 's3_region',
39-
value: getEnv('duckdbS3Region', this.config),
40-
},
41-
{
42-
key: 's3_endpoint',
43-
value: getEnv('duckdbS3Endpoint', this.config),
44-
},
45-
{
46-
key: 's3_access_key_id',
47-
value: getEnv('duckdbS3AccessKeyId', this.config),
48-
},
49-
{
50-
key: 's3_secret_access_key',
51-
value: getEnv('duckdbS3SecretAccessKeyId', this.config),
52-
},
53-
];
5435

5536
try {
5637
await this.handleQuery(conn, 'INSTALL httpfs', []);
@@ -77,19 +58,42 @@ export class DuckDBDriver extends BaseDriver implements DriverInterface {
7758
// DuckDB will lose connection_ref on connection on error, this will lead to broken conn object
7859
throw e;
7960
}
80-
81-
try {
82-
for (const { key, value } of s3InitQuries) {
83-
if (value) {
61+
62+
const configuration = [
63+
{
64+
key: 's3_region',
65+
value: getEnv('duckdbS3Region', this.config),
66+
},
67+
{
68+
key: 's3_endpoint',
69+
value: getEnv('duckdbS3Endpoint', this.config),
70+
},
71+
{
72+
key: 's3_access_key_id',
73+
value: getEnv('duckdbS3AccessKeyId', this.config),
74+
},
75+
{
76+
key: 's3_secret_access_key',
77+
value: getEnv('duckdbS3SecretAccessKeyId', this.config),
78+
},
79+
{
80+
key: 'memory_limit',
81+
value: getEnv('duckdbMemoryLimit', this.config),
82+
},
83+
];
84+
85+
for (const { key, value } of configuration) {
86+
if (value) {
87+
try {
8488
await this.handleQuery(conn, `SET ${key}='${value}'`, []);
89+
} catch (e) {
90+
if (this.logger) {
91+
console.error(`DuckDB - error on configuration, key: ${key}`, {
92+
e
93+
});
94+
}
8595
}
8696
}
87-
} catch (e) {
88-
if (this.logger) {
89-
console.error('DuckDB - error on s3 configuration', {
90-
e
91-
});
92-
}
9397
}
9498

9599
if (this.config.initSql) {

0 commit comments

Comments
 (0)