use of org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint in project hive by apache.
the class Hive method getTableConstraints.
public TableConstraintsInfo getTableConstraints(String dbName, String tblName, boolean fetchReliable, boolean fetchEnabled, long tableId) throws HiveException {
PerfLogger perfLogger = SessionState.getPerfLogger();
perfLogger.perfLogBegin(CLASS_NAME, PerfLogger.HIVE_GET_TABLE_CONSTRAINTS);
try {
ValidWriteIdList validWriteIdList = getValidWriteIdList(dbName, tblName);
AllTableConstraintsRequest request = new AllTableConstraintsRequest(dbName, tblName, getDefaultCatalog(conf));
request.setValidWriteIdList(validWriteIdList != null ? validWriteIdList.writeToString() : null);
request.setTableId(tableId);
SQLAllTableConstraints tableConstraints = getMSC().getAllTableConstraints(request);
if (fetchReliable && tableConstraints != null) {
if (CollectionUtils.isNotEmpty(tableConstraints.getPrimaryKeys())) {
tableConstraints.setPrimaryKeys(tableConstraints.getPrimaryKeys().stream().filter(SQLPrimaryKey::isRely_cstr).collect(Collectors.toList()));
}
if (CollectionUtils.isNotEmpty(tableConstraints.getForeignKeys())) {
tableConstraints.setForeignKeys(tableConstraints.getForeignKeys().stream().filter(SQLForeignKey::isRely_cstr).collect(Collectors.toList()));
}
if (CollectionUtils.isNotEmpty(tableConstraints.getUniqueConstraints())) {
tableConstraints.setUniqueConstraints(tableConstraints.getUniqueConstraints().stream().filter(SQLUniqueConstraint::isRely_cstr).collect(Collectors.toList()));
}
if (CollectionUtils.isNotEmpty(tableConstraints.getNotNullConstraints())) {
tableConstraints.setNotNullConstraints(tableConstraints.getNotNullConstraints().stream().filter(SQLNotNullConstraint::isRely_cstr).collect(Collectors.toList()));
}
}
if (fetchEnabled && tableConstraints != null) {
if (CollectionUtils.isNotEmpty(tableConstraints.getCheckConstraints())) {
tableConstraints.setCheckConstraints(tableConstraints.getCheckConstraints().stream().filter(SQLCheckConstraint::isEnable_cstr).collect(Collectors.toList()));
}
if (CollectionUtils.isNotEmpty(tableConstraints.getDefaultConstraints())) {
tableConstraints.setDefaultConstraints(tableConstraints.getDefaultConstraints().stream().filter(SQLDefaultConstraint::isEnable_cstr).collect(Collectors.toList()));
}
}
return new TableConstraintsInfo(new PrimaryKeyInfo(tableConstraints.getPrimaryKeys(), tblName, dbName), new ForeignKeyInfo(tableConstraints.getForeignKeys(), tblName, dbName), new UniqueConstraint(tableConstraints.getUniqueConstraints(), tblName, dbName), new DefaultConstraint(tableConstraints.getDefaultConstraints(), tblName, dbName), new CheckConstraint(tableConstraints.getCheckConstraints()), new NotNullConstraint(tableConstraints.getNotNullConstraints(), tblName, dbName));
} catch (Exception e) {
throw new HiveException(e);
} finally {
perfLogger.perfLogEnd(CLASS_NAME, PerfLogger.HIVE_GET_TABLE_CONSTRAINTS, "HS2-cache");
}
}
use of org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint in project hive by apache.
the class DbNotificationListener method onAddNotNullConstraint.
/**
* @param addNotNullConstraintEvent add not null constraint event
* @throws MetaException
*/
@Override
public void onAddNotNullConstraint(AddNotNullConstraintEvent addNotNullConstraintEvent) throws MetaException {
List<SQLNotNullConstraint> cols = addNotNullConstraintEvent.getNotNullConstraintCols();
if (cols.size() > 0) {
AddNotNullConstraintMessage msg = MessageBuilder.getInstance().buildAddNotNullConstraintMessage(addNotNullConstraintEvent.getNotNullConstraintCols());
NotificationEvent event = new NotificationEvent(0, now(), EventType.ADD_NOTNULLCONSTRAINT.toString(), msgEncoder.getSerializer().serialize(msg));
event.setCatName(cols.get(0).isSetCatName() ? cols.get(0).getCatName() : DEFAULT_CATALOG_NAME);
event.setDbName(cols.get(0).getTable_db());
event.setTableName(cols.get(0).getTable_name());
process(event, addNotNullConstraintEvent);
}
}
use of org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint in project hive by apache.
the class TestGetAllTableConstraints method allConstraintsPresent.
/**
* Test to verify all constraint are present in table
* @throws TException
*/
@Test
public void allConstraintsPresent() throws TException {
Table table = testTables[0];
Table parentTable = testTables[1];
SQLAllTableConstraints expected = new SQLAllTableConstraints();
// Set col1 as primary key Constraint in default catalog and database
List<SQLPrimaryKey> pk = new SQLPrimaryKeyBuilder().onTable(table).addColumn("col1").setConstraintName("col1_pk").build(metaStore.getConf());
client.addPrimaryKey(pk);
expected.setPrimaryKeys(pk);
// Set col2 with Unique Constraint in default catalog and database
String uniqueConstraintName = "col2_unique";
List<SQLUniqueConstraint> uc = new SQLUniqueConstraintBuilder().onTable(table).addColumn("col2").setConstraintName("col2_unique").build(metaStore.getConf());
client.addUniqueConstraint(uc);
expected.setUniqueConstraints(uc);
// Set col3 with default Constraint in default catalog and database
List<SQLDefaultConstraint> dv = new SQLDefaultConstraintBuilder().onTable(table).addColumn("col3").setConstraintName("col3_default").setDefaultVal(false).build(metaStore.getConf());
client.addDefaultConstraint(dv);
expected.setDefaultConstraints(dv);
// Set col3 with not null constraint in default catalog and database;
List<SQLNotNullConstraint> nn = new SQLNotNullConstraintBuilder().onTable(table).addColumn("col3").setConstraintName("col3_not_null").build(metaStore.getConf());
client.addNotNullConstraint(nn);
expected.setNotNullConstraints(nn);
// Set col2 with not check constraint in default catalog and database;
List<SQLCheckConstraint> cc = new SQLCheckConstraintBuilder().onTable(table).addColumn("col2").setConstraintName("col2_check").setCheckExpression("= 5").build(metaStore.getConf());
client.addCheckConstraint(cc);
expected.setCheckConstraints(cc);
// Set col1 of parent table to PK and Set Col4 of table to FK
List<SQLPrimaryKey> parentPk = new SQLPrimaryKeyBuilder().onTable(parentTable).addColumn("col1").setConstraintName("parentpk").build(metaStore.getConf());
client.addPrimaryKey(parentPk);
String fkConstraintName = "fk";
List<SQLForeignKey> fk = new SQLForeignKeyBuilder().fromPrimaryKey(parentPk).onTable(table).setConstraintName(fkConstraintName).addColumn("col4").build(metaStore.getConf());
client.addForeignKey(fk);
expected.setForeignKeys(fk);
// Fetch all constraints for the table in default catalog and database
AllTableConstraintsRequest request = new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
SQLAllTableConstraints actual = client.getAllTableConstraints(request);
Assert.assertEquals(expected, actual);
}
use of org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint in project hive by apache.
the class TestNotNullConstraint method doubleAddNotNullConstraint.
@Test
public void doubleAddNotNullConstraint() throws TException {
Table table = testTables[0];
// Make sure get on a table with no key returns empty list
NotNullConstraintsRequest rqst = new NotNullConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
List<SQLNotNullConstraint> fetched = client.getNotNullConstraints(rqst);
Assert.assertTrue(fetched.isEmpty());
// Single column unnamed primary key in default catalog and database
List<SQLNotNullConstraint> nn = new SQLNotNullConstraintBuilder().onTable(table).addColumn("col1").build(metaStore.getConf());
client.addNotNullConstraint(nn);
try {
nn = new SQLNotNullConstraintBuilder().onTable(table).addColumn("col2").build(metaStore.getConf());
client.addNotNullConstraint(nn);
Assert.fail();
} catch (InvalidObjectException | TApplicationException e) {
// NOP
}
}
use of org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint in project hive by apache.
the class TestNotNullConstraint method getNoSuchTable.
@Test
public void getNoSuchTable() throws TException {
NotNullConstraintsRequest rqst = new NotNullConstraintsRequest(DEFAULT_CATALOG_NAME, DEFAULT_DATABASE_NAME, "nosuch");
List<SQLNotNullConstraint> nn = client.getNotNullConstraints(rqst);
Assert.assertTrue(nn.isEmpty());
}
Aggregations