diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java index 4ce1e3cd1d7c08..3a4e8ff9cb59b3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java @@ -28,6 +28,7 @@ import org.apache.doris.common.FeNameFormat; import org.apache.doris.common.UserException; import org.apache.doris.common.util.PrintableMap; +import org.apache.doris.datasource.property.PropertyConverter; import org.apache.doris.mysql.privilege.PrivPredicate; import org.apache.doris.qe.ConnectContext; @@ -46,7 +47,7 @@ public class CreateStorageVaultStmt extends DdlStmt implements NotFallbackInPars private final boolean ifNotExists; private final String vaultName; - private final ImmutableMap properties; + private ImmutableMap properties; private boolean setAsDefault; private int pathVersion = 0; private int numShard = 0; @@ -145,6 +146,14 @@ public void analyze(Analyzer analyzer) throws UserException { } setAsDefault = Boolean.parseBoolean(properties.getOrDefault(SET_AS_DEFAULT, "false")); setStorageVaultType(StorageVault.StorageVaultType.fromString(type)); + + if (vaultType == StorageVault.StorageVaultType.S3 + && !properties.containsKey(PropertyConverter.USE_PATH_STYLE)) { + properties = ImmutableMap.builder() + .putAll(properties) + .put(PropertyConverter.USE_PATH_STYLE, "true") + .build(); + } } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/StorageVault.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/StorageVault.java index 0584d10dc327d2..f71560c012ee22 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/StorageVault.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/StorageVault.java @@ -22,7 +22,6 @@ import org.apache.doris.cloud.proto.Cloud; import org.apache.doris.common.DdlException; import org.apache.doris.common.UserException; -import org.apache.doris.datasource.property.PropertyConverter; import org.apache.doris.qe.ShowResultSetMetaData; import com.google.common.base.Preconditions; @@ -147,10 +146,6 @@ public void setId(String id) { vault.modifyProperties(stmt.getProperties()); break; case S3: - if (!stmt.getProperties().containsKey(PropertyConverter.USE_PATH_STYLE)) { - stmt.getProperties().put(PropertyConverter.USE_PATH_STYLE, "true"); - } - CreateResourceStmt resourceStmt = new CreateResourceStmt(false, ifNotExists, name, stmt.getProperties()); resourceStmt.analyzeResourceType(); diff --git a/regression-test/suites/vault_p0/create/test_create_vault.groovy b/regression-test/suites/vault_p0/create/test_create_vault.groovy index 502782a6cc1a36..c0128291f82f33 100644 --- a/regression-test/suites/vault_p0/create/test_create_vault.groovy +++ b/regression-test/suites/vault_p0/create/test_create_vault.groovy @@ -233,6 +233,21 @@ suite("test_create_vault", "nonConcurrent") { ); """ + sql """ + CREATE STORAGE VAULT IF NOT EXISTS ${s3VaultName} + PROPERTIES ( + "type"="S3", + "s3.endpoint"="${getS3Endpoint()}", + "s3.region" = "${getS3Region()}", + "s3.access_key" = "${getS3AK()}", + "s3.secret_key" = "${getS3SK()}", + "s3.root.path" = "${s3VaultName}", + "s3.bucket" = "${getS3BucketName()}", + "s3.external_endpoint" = "", + "provider" = "${getS3Provider()}" + ); + """ + sql """ CREATE TABLE ${s3VaultName} ( C_CUSTKEY INTEGER NOT NULL,