vals3.add("p21"); cleanUp(dbName, tblName, null); createDb(dbName); add_partition(client, tbl, vals, "part1"); add_partition(client, tbl, vals2, "part2"); add_partition(client, tbl, vals3, "part3"); checkFilter(client, dbName, tblName, "p2 = \"p21\"", 2); checkFilter(client, dbName, tblName, "p2 < \"p23\"", 3); checkFilter(client, dbName, tblName, "p2 > \"p21\"", 1); checkFilter(client, dbName, tblName, "p2 >= \"p21\"", 3); checkFilter(client, dbName, tblName, "p2 <= \"p21\"", 2); checkFilter(client, dbName, tblName, "p2 <> \"p12\"", 3); checkFilter(client, dbName, tblName, "p2 != \"p12\"", 3); checkFilter(client, dbName, tblName, "p2 like \"p2.*\"", 3); checkFilter(client, dbName, tblName, "p2 like \"p.*2\"", 1); checkFilter(client, dbName, tblName, "p2 !< 'dd'", 0); fail("Invalid operator not detected"); } catch (MetaException e) { cleanUp(dbName, tblName, null);
protected List<Partition> setupProjectionTestTable() throws Throwable { //String catName = "catName"; String dbName = "compdb"; String tblName = "comptbl"; String typeName = "Person"; //String catName = "catName"; Map<String, String> dummyparams = new HashMap<>(); dummyparams.put("key1", "val1"); dummyparams.put("excludeKey1", "excludeVal1"); dummyparams.put("excludeKey2", "excludeVal2"); cleanUp(dbName, tblName, typeName); List<List<String>> values = new ArrayList<>(); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); List<Partition> createdPartitions = createMultiPartitionTableSchema(dbName, tblName, typeName, values); Table tbl = client.getTable(dbName, tblName); // add some dummy parameters to one of the partitions to confirm the fetching logic is working Partition newPartition = createdPartitions.remove(0); //Map<String, String> sdParams = new HashMap<>(); //dummyparams.put("sdkey1", "sdval1"); newPartition.setParameters(dummyparams); //newPartition.getSd().setParameters(sdParams); client.alter_partition(dbName, tblName, newPartition); createdPartitions.add(0, newPartition); return createdPartitions; }
silentDropDatabase(dbName); add_partition(client, tbl, Lists.newArrayList("p11", "p21", "31"), "part1"); add_partition(client, tbl, Lists.newArrayList("p11", "p22", "32"), "part2"); add_partition(client, tbl, Lists.newArrayList("p12", "p21", "31"), "part3"); add_partition(client, tbl, Lists.newArrayList("p12", "p23", "32"), "part4"); add_partition(client, tbl, Lists.newArrayList("p13", "p24", "31"), "part5"); add_partition(client, tbl, Lists.newArrayList("p13", "p25", "-33"), "part6"); checkFilter(client, dbName, tblName, "p1 = \"p11\"", 2); checkFilter(client, dbName, tblName, "p1 = \"p12\"", 2); checkFilter(client, dbName, tblName, "p2 = \"p21\"", 2); checkFilter(client, dbName, tblName, "p2 = \"p23\"", 1); checkFilter(client, dbName, tblName, "p3 = 31", 3); checkFilter(client, dbName, tblName, "p3 = 33", 0); checkFilter(client, dbName, tblName, "p3 = -33", 1); checkFilter(client, dbName, tblName, "p1 = \"p11\" and p2=\"p22\"", 1); checkFilter(client, dbName, tblName, "p1 = \"p11\" or p2=\"p23\"", 3); checkFilter(client, dbName, tblName, "p1 = \"p11\" or p1=\"p12\"", 4); checkFilter(client, dbName, tblName, "p1 = \"p11\" or p1=\"p12\"", 4); checkFilter(client, dbName, tblName, "p1 = \"p11\" or p1=\"p12\"", 4); checkFilter(client, dbName, tblName, "p1 = \"p11\" and p3 = 31", 1); checkFilter(client, dbName, tblName, "p3 = -33 or p1 = \"p12\"", 3); checkFilter(client, dbName, tblName, "p1 != \"p11\"", 4); checkFilter(client, dbName, tblName, "p2 != \"p23\"", 5); checkFilter(client, dbName, tblName, "p2 != \"p33\"", 6); checkFilter(client, dbName, tblName, "p3 != 32", 4); checkFilter(client, dbName, tblName, "p3 != 8589934592", 6);
cleanUp(dbName, null, null); createDb(dbName); createFunction(dbName, funcName, className, owner, ownerType, createTime, funcType, resList); throw e; } finally { silentDropDatabase(dbName);
String tblName = "comptbl"; String typeName = "Person"; List<String> vals = makeVals("2008-07-01 14:13:12", "14"); List<String> vals2 = makeVals("2008-07-01 14:13:12", "15"); List<String> vals3 = makeVals("2008-07-02 14:13:12", "15"); List<String> vals4 = makeVals("2008-07-03 14:13:12", "151"); silentDropDatabase(dbName); new DatabaseBuilder() .setName(dbName) Partition part = makePartitionObject(dbName, tblName, vals, tbl, "/part1"); Partition part2 = makePartitionObject(dbName, tblName, vals2, tbl, "/part2"); Partition part3 = makePartitionObject(dbName, tblName, vals3, tbl, "/part3"); Partition part4 = makePartitionObject(dbName, tblName, vals4, tbl, "/part4"); adjust(client, part, dbName, tblName, isThriftClient); adjust(client, part2, dbName, tblName, isThriftClient); adjust(client, part3, dbName, tblName, isThriftClient); assertTrue("Partitions are not same", part.equals(part_get)); List<String> vals6 = makeVals("2016-02-22 00:00:00", "16"); Partition part6 = makePartitionObject(dbName, tblName, vals6, tbl, "/part5"); part6.getSd().setCols(null); LOG.info("Creating partition will null field schema"); List<String> mvals1 = makeVals("2008-07-04 14:13:12", "14641"); List<String> mvals2 = makeVals("2008-07-04 14:13:12", "14642"); List<String> mvals3 = makeVals("2008-07-04 14:13:12", "14643");
cleanUp(dbName, tblName, null); createDb(dbName); updateTableNameInDB(tblName, renameTblName); throw e; } finally { silentDropDatabase(dbName);
/** * Test table objects can be retrieved in batches */ @Test public void testGetTableObjects() throws Exception { String dbName = "db"; List<String> tableNames = Arrays.asList("table1", "table2", "table3", "table4", "table5"); // Setup silentDropDatabase(dbName); new DatabaseBuilder() .setName(dbName) .create(client, conf); for (String tableName : tableNames) { createTable(dbName, tableName); } createMaterializedView(dbName, "mv1", Sets.newHashSet("db.table1", "db.table2")); // Test List<Table> tableObjs = client.getTableObjectsByName(dbName, tableNames); // Verify assertEquals(tableNames.size(), tableObjs.size()); for(Table table : tableObjs) { assertTrue(tableNames.contains(table.getTableName().toLowerCase())); } // Cleanup client.dropDatabase(dbName, true, true, true); }
cleanUp(dbName, tblName, typeName); new DatabaseBuilder() .setName(dbName) .create(client, conf); createTableForTestFilter(dbName,tblName, tblOwner, lastAccessed, true); cleanUp(dbName, tblName, typeName); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values); throw e; } finally { cleanUp(dbName, tblName, typeName);
/** * Test changing owner and owner type of a database */ @Test public void testDBOwnerChange() throws TException { final String dbName = "alterDbOwner"; final String user1 = "user1"; final String user2 = "user2"; final String role1 = "role1"; silentDropDatabase(dbName); Database db = new DatabaseBuilder() .setName(dbName) .setOwnerName(user1) .setOwnerType(PrincipalType.USER) .create(client, conf); checkDbOwnerType(dbName, user1, PrincipalType.USER); db.setOwnerName(user2); client.alterDatabase(dbName, db); checkDbOwnerType(dbName, user2, PrincipalType.USER); db.setOwnerName(role1); db.setOwnerType(PrincipalType.ROLE); client.alterDatabase(dbName, db); checkDbOwnerType(dbName, role1, PrincipalType.ROLE); }
private List<Partition> createMultiPartitionTableSchema(String catName, String dbName, String tblName, String typeName, List<List<String>> values) throws Throwable { createDb(dbName); Map<String, String> fields = new HashMap<>(); fields.put("name", ColumnType.STRING_TYPE_NAME); fields.put("income", ColumnType.INT_TYPE_NAME); Table tbl = new TableBuilder() .setDbName(dbName) .setTableName(tblName) .setCatName(catName) .addCol("name", ColumnType.STRING_TYPE_NAME) .addCol("income", ColumnType.INT_TYPE_NAME) .addPartCol("ds", ColumnType.STRING_TYPE_NAME) .addPartCol("hr", ColumnType.STRING_TYPE_NAME) .create(client, conf); if (isThriftClient) { // the createTable() above does not update the location in the 'tbl' // object when the client is a thrift client and the code below relies // on the location being present in the 'tbl' object - so get the table // from the metastore tbl = client.getTable(dbName, tblName); } return createPartitions(dbName, tbl, values); }
private List<Partition> createMultiPartitionTableSchema(String dbName, String tblName, String typeName, List<List<String>> values) throws Throwable { return createMultiPartitionTableSchema(null, dbName, tblName, typeName, values); } private List<Partition> createMultiPartitionTableSchema(String catName, String dbName, String tblName,
cleanUp(dbName, null, null); for (Function f : client.getAllFunctions().getFunctions()) { client.dropFunction(f.getDbName(), f.getFunctionName()); createDb(dbName); createFunction(dbName, funcName + "_" + i, className, owner, ownerType, createTime, funcType, null); throw e; } finally { silentDropDatabase(dbName);
silentDropDatabase(dbName1); silentDropDatabase(dbName2); createTable(dbName1, tableName1); Database db2 = new Database(); db2.setName(dbName2); client.createDatabase(db2); createTable(dbName2, tableName2); createMaterializedView(dbName2, mvName, Sets.newHashSet("db1.table1", "db2.table2"));
vals3.add("p13"); silentDropDatabase(dbName); add_partition(client, tbl, vals, "part1"); add_partition(client, tbl, vals2, "part2"); add_partition(client, tbl, vals3, "part3"); checkFilter(client, dbName, tblName, "p1 = \"p12\"", 1); checkFilter(client, dbName, tblName, "p1 < \"p12\"", 1); checkFilter(client, dbName, tblName, "p1 > \"p12\"", 1); checkFilter(client, dbName, tblName, "p1 >= \"p12\"", 2); checkFilter(client, dbName, tblName, "p1 <= \"p12\"", 2); checkFilter(client, dbName, tblName, "p1 <> \"p12\"", 2); checkFilter(client, dbName, tblName, "p1 like \"p1.*\"", 3); checkFilter(client, dbName, tblName, "p1 like \"p.*2\"", 1);
@Test public void testDropTable() throws Throwable { // create a table with multiple partitions String dbName = "compdb"; String tblName = "comptbl"; String typeName = "Person"; cleanUp(dbName, tblName, typeName); List<List<String>> values = new ArrayList<>(); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values); client.dropTable(dbName, tblName); client.dropType(typeName); boolean exceptionThrown = false; try { client.getTable(dbName, tblName); } catch(Exception e) { assertEquals("table should not have existed", NoSuchObjectException.class, e.getClass()); exceptionThrown = true; } assertTrue("Table " + tblName + " should have been dropped ", exceptionThrown); }
@Test public void testListPartitionNames() throws Throwable { // create a table with multiple partitions String dbName = "compdb"; String tblName = "comptbl"; String typeName = "Person"; cleanUp(dbName, tblName, typeName); List<List<String>> values = new ArrayList<>(); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values); List<String> partitions = client.listPartitionNames(dbName, tblName, (short)-1); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() + " partitions", values.size(), partitions.size()); partitions = client.listPartitionNames(dbName, tblName, (short)(values.size()/2)); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() / 2 + " partitions",values.size() / 2, partitions.size()); partitions = client.listPartitionNames(dbName, tblName, (short) (values.size() * 2)); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() + " partitions",values.size(), partitions.size()); cleanUp(dbName, tblName, typeName); }
@Test public void testListPartitions() throws Throwable { // create a table with multiple partitions String dbName = "compdb"; String tblName = "comptbl"; String typeName = "Person"; cleanUp(dbName, tblName, typeName); List<List<String>> values = new ArrayList<>(); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values); List<Partition> partitions = client.listPartitions(dbName, tblName, (short)-1); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() + " partitions", values.size(), partitions.size()); partitions = client.listPartitions(dbName, tblName, (short)(values.size()/2)); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() / 2 + " partitions",values.size() / 2, partitions.size()); partitions = client.listPartitions(dbName, tblName, (short) (values.size() * 2)); assertNotNull("should have returned partitions", partitions); assertEquals(" should have returned " + values.size() + " partitions",values.size(), partitions.size()); cleanUp(dbName, tblName, typeName); }
String typeName = "Person"; cleanUp(dbName, tblName, typeName); values.add(makeVals("2008-07-01 14:13:12", Integer.toString(i))); createMultiPartitionTableSchema(dbName, tblName, typeName, values);
int lastAccessed = 12083; cleanUp(dbName,tblName,typeName); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values);
String typeName = "Person"; cleanUp(dbName, tblName, typeName); values.add(makeVals("2008-07-01 14:13:12", "14")); values.add(makeVals("2008-07-01 14:13:12", "15")); values.add(makeVals("2008-07-02 14:13:12", "15")); values.add(makeVals("2008-07-03 14:13:12", "151")); createMultiPartitionTableSchema(dbName, tblName, typeName, values); Table tbl = client.getTable(dbName, tblName); List<FieldSchema> cols = tbl.getSd().getCols();