@Override public void createDatabase(Database database) { if (!database.getLocation().isPresent() && 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); glueClient.createDatabase(new CreateDatabaseRequest().withDatabaseInput(databaseInput)); } catch (AlreadyExistsException e) { throw new SchemaAlreadyExistsException(database.getDatabaseName()); } catch (AmazonServiceException e) { throw new PrestoException(HIVE_METASTORE_ERROR, e); } if (database.getLocation().isPresent()) { HiveWriteUtils.createDirectory(hdfsContext, hdfsEnvironment, new Path(database.getLocation().get())); } }
public static org.apache.hadoop.hive.metastore.api.Database toMetastoreApiDatabase(Database database) { org.apache.hadoop.hive.metastore.api.Database result = new org.apache.hadoop.hive.metastore.api.Database(); result.setName(database.getDatabaseName()); database.getLocation().ifPresent(result::setLocationUri); result.setOwnerName(database.getOwnerName()); result.setOwnerType(toMetastoreApiPrincipalType(database.getOwnerType())); database.getComment().ifPresent(result::setDescription); result.setParameters(database.getParameters()); return result; }
public Database build() { return new Database( databaseName, location, ownerName, ownerType, comment, parameters); } }
public DatabaseMetadata(Database database) { this.ownerName = database.getOwnerName(); this.ownerType = database.getOwnerType(); this.comment = database.getComment(); this.parameters = database.getParameters(); }
public static DatabaseInput convertDatabase(Database database) { DatabaseInput input = new DatabaseInput(); input.setName(database.getDatabaseName()); input.setParameters(database.getParameters()); database.getComment().ifPresent(input::setDescription); database.getLocation().ifPresent(input::setLocationUri); return input; }
public static Database convertDatabase(com.amazonaws.services.glue.model.Database glueDb) { return Database.builder() .setDatabaseName(glueDb.getName()) .setLocation(Optional.ofNullable(glueDb.getLocationUri())) .setComment(Optional.ofNullable(glueDb.getDescription())) .setParameters(firstNonNull(glueDb.getParameters(), ImmutableMap.of())) .setOwnerName(PUBLIC_OWNER) .setOwnerType(PrincipalType.ROLE) .build(); }
private boolean isDatabaseOwner(String user, String databaseName) { // all users are "owners" of the default database if (DEFAULT_DATABASE_NAME.equalsIgnoreCase(databaseName)) { return true; } Optional<Database> databaseMetadata = getDatabase(databaseName); if (!databaseMetadata.isPresent()) { return false; } Database database = databaseMetadata.get(); // a database can be owned by a user or role if (database.getOwnerType() == USER && user.equals(database.getOwnerName())) { return true; } if (database.getOwnerType() == ROLE && getRoles(user).contains(database.getOwnerName())) { return true; } return false; }
@Override public synchronized void createDatabase(Database database) { requireNonNull(database, "database is null"); if (database.getLocation().isPresent()) { throw new PrestoException(HIVE_METASTORE_ERROR, "Database can not be created with a location set"); } verifyDatabaseNotExists(database.getDatabaseName()); Path databaseMetadataDirectory = getDatabaseMetadataDirectory(database.getDatabaseName()); writeSchemaFile("database", databaseMetadataDirectory, databaseCodec, new DatabaseMetadata(database), false); }
@Test public void testDatabaseNullParameters() { testDb.setParameters(null); assertNotNull(GlueToPrestoConverter.convertDatabase(testDb).getParameters()); }
@Override public void createDatabase(Database database) { try { delegate.createDatabase(database); } finally { invalidateDatabase(database.getDatabaseName()); } }
public static Path getTableDefaultLocation(HdfsContext context, SemiTransactionalHiveMetastore metastore, HdfsEnvironment hdfsEnvironment, String schemaName, String tableName) { Optional<String> location = getDatabase(metastore, schemaName).getLocation(); if (!location.isPresent() || location.get().isEmpty()) { throw new PrestoException(HIVE_DATABASE_LOCATION_ERROR, format("Database '%s' location is not set", schemaName)); } Path databasePath = new Path(location.get()); if (!isS3FileSystem(context, hdfsEnvironment, databasePath)) { if (!pathExists(context, hdfsEnvironment, databasePath)) { throw new PrestoException(HIVE_DATABASE_LOCATION_ERROR, format("Database '%s' location does not exist: %s", schemaName, databasePath)); } if (!isDirectory(context, hdfsEnvironment, databasePath)) { throw new PrestoException(HIVE_DATABASE_LOCATION_ERROR, format("Database '%s' location is not a directory: %s", schemaName, databasePath)); } } return new Path(databasePath, tableName); }
@Test public void testConvertDatabase() { DatabaseInput dbInput = GlueInputConverter.convertDatabase(testDb); assertEquals(dbInput.getName(), testDb.getDatabaseName()); assertEquals(dbInput.getDescription(), testDb.getComment().get()); assertEquals(dbInput.getLocationUri(), testDb.getLocation().get()); assertEquals(dbInput.getParameters(), testDb.getParameters()); }
public Database toDatabase(String databaseName, String location) { return Database.builder() .setDatabaseName(databaseName) .setLocation(Optional.of(location)) .setOwnerName(ownerName) .setOwnerType(ownerType) .setParameters(parameters) .build(); } }
@Test public void testDatabaseNullParameters() { testDb.setParameters(null); assertNotNull(GlueToPrestoConverter.convertDatabase(testDb).getParameters()); }
@Test public void testConvertDatabase() { com.facebook.presto.hive.metastore.Database prestoDb = GlueToPrestoConverter.convertDatabase(testDb); assertEquals(prestoDb.getDatabaseName(), testDb.getName()); assertEquals(prestoDb.getLocation().get(), testDb.getLocationUri()); assertEquals(prestoDb.getComment().get(), testDb.getDescription()); assertEquals(prestoDb.getParameters(), testDb.getParameters()); assertEquals(prestoDb.getOwnerName(), PUBLIC_OWNER); assertEquals(prestoDb.getOwnerType(), PrincipalType.ROLE); }
@Test public void testConvertDatabase() { DatabaseInput dbInput = GlueInputConverter.convertDatabase(testDb); assertEquals(dbInput.getName(), testDb.getDatabaseName()); assertEquals(dbInput.getDescription(), testDb.getComment().get()); assertEquals(dbInput.getLocationUri(), testDb.getLocation().get()); assertEquals(dbInput.getParameters(), testDb.getParameters()); }
@Override public Optional<Database> getDatabase(String databaseName) { return super.getDatabase(databaseName) .map(database -> Database.builder(database) .setLocation(Optional.of(basePath.toString())) .build()); }
@Test public void testConvertDatabase() { com.facebook.presto.hive.metastore.Database prestoDb = GlueToPrestoConverter.convertDatabase(testDb); assertEquals(prestoDb.getDatabaseName(), testDb.getName()); assertEquals(prestoDb.getLocation().get(), testDb.getLocationUri()); assertEquals(prestoDb.getComment().get(), testDb.getDescription()); assertEquals(prestoDb.getParameters(), testDb.getParameters()); assertEquals(prestoDb.getOwnerName(), PUBLIC_OWNER); assertEquals(prestoDb.getOwnerType(), PrincipalType.ROLE); }
@Override public void createSchema(ConnectorSession session, String schemaName, Map<String, Object> properties) { Optional<String> location = HiveSchemaProperties.getLocation(properties).map(locationUri -> { try { hdfsEnvironment.getFileSystem(new HdfsContext(session, schemaName), new Path(locationUri)); } catch (IOException e) { throw new PrestoException(INVALID_SCHEMA_PROPERTY, "Invalid location URI: " + locationUri, e); } return locationUri; }); Database database = Database.builder() .setDatabaseName(schemaName) .setLocation(location) .setOwnerType(USER) .setOwnerName(session.getUser()) .build(); metastore.createDatabase(database); }
public static com.facebook.presto.hive.metastore.Database getPrestoTestDatabase() { return com.facebook.presto.hive.metastore.Database.builder() .setDatabaseName("test-db" + generateRandom()) .setComment(Optional.of("database desc")) .setLocation(Optional.of("/db")) .setParameters(ImmutableMap.of()) .setOwnerName("PUBLIC") .setOwnerType(PrincipalType.ROLE).build(); }