Skip to content

Commit 627f7a8

Browse files
KSDaemonmarianore-muttdata
authored andcommitted
fix(databricks-jdbc-driver): Allow paths in s3/azure export buckets (cube-js#9365)
* fix(databricks-jdbc-driver): Allow paths in s3/azure export buckets * Add tests for s3 export with prefix * Add tests for azure export with prefix * minor improvement
1 parent 7995da2 commit 627f7a8

File tree

8 files changed

+28238
-2
lines changed

8 files changed

+28238
-2
lines changed

.github/workflows/drivers-tests.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ jobs:
207207
clickhouse-export-bucket-s3
208208
databricks-jdbc
209209
databricks-jdbc-export-bucket-s3
210+
databricks-jdbc-export-bucket-s3-prefix
210211
databricks-jdbc-export-bucket-azure
212+
databricks-jdbc-export-bucket-azure-prefix
211213
redshift
212214
redshift-export-bucket-s3
213215
snowflake
@@ -231,7 +233,9 @@ jobs:
231233
- clickhouse-export-bucket-s3
232234
- databricks-jdbc
233235
- databricks-jdbc-export-bucket-s3
236+
- databricks-jdbc-export-bucket-s3-prefix
234237
- databricks-jdbc-export-bucket-azure
238+
- databricks-jdbc-export-bucket-azure-prefix
235239
- mssql
236240
- mysql
237241
- postgres

packages/cubejs-databricks-jdbc-driver/src/DatabricksDriver.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,9 @@ export class DatabricksDriver extends JDBCDriver {
703703
// wasbs://[email protected]
704704
// The extractors in BaseDriver expect just clean bucket name
705705
const url = new URL(this.config.exportBucket || '');
706+
const prefix = url.pathname.slice(1);
707+
const delimiter = (prefix && !prefix.endsWith('/')) ? '/' : '';
708+
const objectSearchPrefix = `${prefix}${delimiter}${tableName}`;
706709

707710
if (this.config.bucketType === 'azure') {
708711
const {
@@ -716,7 +719,7 @@ export class DatabricksDriver extends JDBCDriver {
716719
// Databricks uses different bucket address form, so we need to transform it
717720
// to the one understandable by extractFilesFromAzure implementation
718721
`${url.host}/${url.username}`,
719-
tableName,
722+
objectSearchPrefix,
720723
);
721724
} else if (this.config.bucketType === 's3') {
722725
return this.extractUnloadedFilesFromS3(
@@ -728,7 +731,7 @@ export class DatabricksDriver extends JDBCDriver {
728731
region: this.config.awsRegion || '',
729732
},
730733
url.host,
731-
tableName,
734+
objectSearchPrefix,
732735
);
733736
} else {
734737
throw new Error(`Unsupported export bucket type: ${

packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
}
1212
}
1313
},
14+
"export-bucket-s3-prefix": {
15+
"cube": {
16+
"environment": {
17+
"CUBEJS_DB_EXPORT_BUCKET_TYPE": "s3",
18+
"CUBEJS_DB_EXPORT_BUCKET": "s3://databricks-drivers-tests-preaggs/testing_prefix/for_export_buckets/",
19+
"CUBEJS_DB_EXPORT_BUCKET_AWS_KEY": "${DRIVERS_TESTS_CUBEJS_DB_EXPORT_BUCKET_AWS_KEY}",
20+
"CUBEJS_DB_EXPORT_BUCKET_AWS_SECRET": "${DRIVERS_TESTS_CUBEJS_DB_EXPORT_BUCKET_AWS_SECRET}",
21+
"CUBEJS_DB_EXPORT_BUCKET_AWS_REGION": "us-east-1"
22+
}
23+
}
24+
},
1425
"export-bucket-azure": {
1526
"cube": {
1627
"environment": {
@@ -19,6 +30,15 @@
1930
"CUBEJS_DB_EXPORT_BUCKET_AZURE_KEY": "${DRIVERS_TESTS_CUBEJS_DB_EXPORT_BUCKET_AZURE_KEY}"
2031
}
2132
}
33+
},
34+
"export-bucket-azure-prefix": {
35+
"cube": {
36+
"environment": {
37+
"CUBEJS_DB_EXPORT_BUCKET_TYPE": "azure",
38+
"CUBEJS_DB_EXPORT_BUCKET": "abfss://databricks-drivers-tests-preaggs@coreteamdevtest.dfs.core.windows.net/testing_prefix/for_export_buckets",
39+
"CUBEJS_DB_EXPORT_BUCKET_AZURE_KEY": "${DRIVERS_TESTS_CUBEJS_DB_EXPORT_BUCKET_AZURE_KEY}"
40+
}
41+
}
2242
}
2343
},
2444
"cube": {

packages/cubejs-testing-drivers/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
"databricks-jdbc-core": "yarn test-driver -i dist/test/databricks-jdbc-core.test.js",
3030
"databricks-jdbc-full": "yarn test-driver -i dist/test/databricks-jdbc-full.test.js",
3131
"databricks-jdbc-export-bucket-s3-full": "yarn test-driver -i dist/test/databricks-jdbc-export-bucket-s3-full.test.js",
32+
"databricks-jdbc-export-bucket-s3-prefix-full": "yarn test-driver -i dist/test/databricks-jdbc-export-bucket-s3-prefix-full.test.js",
3233
"databricks-jdbc-export-bucket-azure-full": "yarn test-driver -i dist/test/databricks-jdbc-export-bucket-azure-full.test.js",
34+
"databricks-jdbc-export-bucket-azure-prefix-full": "yarn test-driver -i dist/test/databricks-jdbc-export-bucket-azure-prefix-full.test.js",
3335
"mssql-driver": "yarn test-driver -i dist/test/mssql-driver.test.js",
3436
"mssql-core": "yarn test-driver -i dist/test/mssql-core.test.js",
3537
"mssql-full": "yarn test-driver -i dist/test/mssql-full.test.js",

0 commit comments

Comments
 (0)