Search in sources :

Example 1 with SchemaAlreadyExistsException

use of io.trino.plugin.hive.SchemaAlreadyExistsException in project trino by trinodb.

the class GlueHiveMetastore method createDatabase.

@Override
public void createDatabase(Database database) {
    if (database.getLocation().isEmpty() && defaultDir.isPresent()) {
        String databaseLocation = new Path(defaultDir.get(), database.getDatabaseName()).toString();
        database = Database.builder(database).setLocation(Optional.of(databaseLocation)).build();
    }
    try {
        DatabaseInput databaseInput = GlueInputConverter.convertDatabase(database);
        stats.getCreateDatabase().call(() -> glueClient.createDatabase(new CreateDatabaseRequest().withCatalogId(catalogId).withDatabaseInput(databaseInput)));
    } catch (AlreadyExistsException e) {
        throw new SchemaAlreadyExistsException(database.getDatabaseName());
    } catch (AmazonServiceException e) {
        throw new TrinoException(HIVE_METASTORE_ERROR, e);
    }
    if (database.getLocation().isPresent()) {
        HiveWriteUtils.createDirectory(hdfsContext, hdfsEnvironment, new Path(database.getLocation().get()));
    }
}
Also used : Path(org.apache.hadoop.fs.Path) CreateDatabaseRequest(com.amazonaws.services.glue.model.CreateDatabaseRequest) AlreadyExistsException(com.amazonaws.services.glue.model.AlreadyExistsException) SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) TableAlreadyExistsException(io.trino.plugin.hive.TableAlreadyExistsException) SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) AmazonServiceException(com.amazonaws.AmazonServiceException) TrinoException(io.trino.spi.TrinoException) DatabaseInput(com.amazonaws.services.glue.model.DatabaseInput)

Example 2 with SchemaAlreadyExistsException

use of io.trino.plugin.hive.SchemaAlreadyExistsException in project trino by trinodb.

the class InMemoryThriftMetastore method alterDatabase.

@Override
public synchronized void alterDatabase(HiveIdentity identity, String databaseName, Database newDatabase) {
    String newDatabaseName = newDatabase.getName();
    if (databaseName.equals(newDatabaseName)) {
        if (databases.replace(databaseName, newDatabase) == null) {
            throw new SchemaNotFoundException(databaseName);
        }
        return;
    }
    Database database = databases.get(databaseName);
    if (database == null) {
        throw new SchemaNotFoundException(databaseName);
    }
    if (databases.putIfAbsent(newDatabaseName, database) != null) {
        throw new SchemaAlreadyExistsException(newDatabaseName);
    }
    databases.remove(databaseName);
    rewriteKeys(relations, name -> new SchemaTableName(newDatabaseName, name.getTableName()));
    rewriteKeys(views, name -> new SchemaTableName(newDatabaseName, name.getTableName()));
    rewriteKeys(partitions, name -> name.withSchemaName(newDatabaseName));
    rewriteKeys(tablePrivileges, name -> name.withDatabase(newDatabaseName));
}
Also used : SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) Database(org.apache.hadoop.hive.metastore.api.Database) SchemaNotFoundException(io.trino.spi.connector.SchemaNotFoundException) SchemaTableName(io.trino.spi.connector.SchemaTableName)

Example 3 with SchemaAlreadyExistsException

use of io.trino.plugin.hive.SchemaAlreadyExistsException in project trino by trinodb.

the class InMemoryThriftMetastore method createDatabase.

@Override
public synchronized void createDatabase(HiveIdentity identity, Database database) {
    requireNonNull(database, "database is null");
    File directory;
    if (database.getLocationUri() != null) {
        directory = new File(URI.create(database.getLocationUri()));
    } else {
        // use Hive default naming convention
        directory = new File(baseDirectory, database.getName() + ".db");
        database = database.deepCopy();
        database.setLocationUri(directory.toURI().toString());
    }
    checkArgument(!directory.exists(), "Database directory already exists");
    checkArgument(isParentDir(directory, baseDirectory), "Database directory must be inside of the metastore base directory");
    checkArgument(directory.mkdirs(), "Could not create database directory");
    if (databases.putIfAbsent(database.getName(), database) != null) {
        throw new SchemaAlreadyExistsException(database.getName());
    }
}
Also used : SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) File(java.io.File)

Example 4 with SchemaAlreadyExistsException

use of io.trino.plugin.hive.SchemaAlreadyExistsException in project trino by trinodb.

the class TrinoGlueCatalog method createNamespace.

@Override
public void createNamespace(ConnectorSession session, String namespace, Map<String, Object> properties, TrinoPrincipal owner) {
    checkArgument(owner.getType() == PrincipalType.USER, "Owner type must be USER");
    checkArgument(owner.getName().equals(session.getUser()), "Explicit schema owner is not supported");
    try {
        stats.getCreateDatabase().call(() -> glueClient.createDatabase(new CreateDatabaseRequest().withDatabaseInput(createDatabaseInput(namespace, properties))));
    } catch (AlreadyExistsException e) {
        throw new SchemaAlreadyExistsException(namespace);
    } catch (AmazonServiceException e) {
        throw new TrinoException(ICEBERG_CATALOG_ERROR, e);
    }
}
Also used : CreateDatabaseRequest(com.amazonaws.services.glue.model.CreateDatabaseRequest) AlreadyExistsException(com.amazonaws.services.glue.model.AlreadyExistsException) SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) SchemaAlreadyExistsException(io.trino.plugin.hive.SchemaAlreadyExistsException) AmazonServiceException(com.amazonaws.AmazonServiceException) TrinoException(io.trino.spi.TrinoException)

Aggregations

SchemaAlreadyExistsException (io.trino.plugin.hive.SchemaAlreadyExistsException)4 AmazonServiceException (com.amazonaws.AmazonServiceException)2 AlreadyExistsException (com.amazonaws.services.glue.model.AlreadyExistsException)2 CreateDatabaseRequest (com.amazonaws.services.glue.model.CreateDatabaseRequest)2 TrinoException (io.trino.spi.TrinoException)2 DatabaseInput (com.amazonaws.services.glue.model.DatabaseInput)1 TableAlreadyExistsException (io.trino.plugin.hive.TableAlreadyExistsException)1 SchemaNotFoundException (io.trino.spi.connector.SchemaNotFoundException)1 SchemaTableName (io.trino.spi.connector.SchemaTableName)1 File (java.io.File)1 Path (org.apache.hadoop.fs.Path)1 Database (org.apache.hadoop.hive.metastore.api.Database)1