@Test public void testParallelTruncateAnalyzeStats() throws Exception { String tableName = "mm_table"; List<ColumnStatisticsObj> stats; IMetaStoreClient msClient = prepareParallelTest(tableName, 0); String[] queries = { String.format("truncate table %s", tableName), String.format("analyze table %s compute statistics for columns", tableName) }; runParallelQueries(queries); // Verify stats are either invalid, or valid and correct. stats = getTxnTableStats(msClient, tableName); boolean hasStats = 0 != stats.size(); if (hasStats) { verifyLongStats(0, 0, 0, stats); } // Stats should be valid after analyze. runStatementOnDriver(String.format("analyze table %s compute statistics for columns", tableName)); verifyLongStats(0, 0, 0, getTxnTableStats(msClient, tableName)); }
@Test public void testParallelInsertAnalyzeStats() throws Exception { String tableName = "mm_table"; List<ColumnStatisticsObj> stats; IMetaStoreClient msClient = prepareParallelTest(tableName, 0); String[] queries = { String.format("insert into %s (a) values (999)", tableName), String.format("analyze table %s compute statistics for columns", tableName) }; runParallelQueries(queries); // Verify stats are either invalid, or valid and correct. stats = getTxnTableStats(msClient, tableName); boolean hasStats = 0 != stats.size(); if (hasStats) { verifyLongStats(2, 0, 999, stats); } runStatementOnDriver(String.format("insert into %s (a) values (1000)", tableName)); if (!hasStats) { // Stats should still be invalid if they were invalid. stats = getTxnTableStats(msClient, tableName); Assert.assertEquals(0, stats.size()); } // Stats should be valid after analyze. runStatementOnDriver(String.format("analyze table %s compute statistics for columns", tableName)); verifyLongStats(3, 0, 1000, getTxnTableStats(msClient, tableName)); }
@Test public void testParallelInsertStats() throws Exception { final int TASK_COUNT = 4; String tableName = "mm_table"; List<ColumnStatisticsObj> stats; IMetaStoreClient msClient = prepareParallelTest(tableName, 0); String[] queries = new String[TASK_COUNT]; for (int i = 0; i < queries.length; ++i) { queries[i] = String.format("insert into %s (a) values (" + i + ")", tableName); } runParallelQueries(queries); // Verify stats are either invalid, or valid and correct. stats = getTxnTableStats(msClient, tableName); boolean hasStats = 0 != stats.size(); if (hasStats) { verifyLongStats(TASK_COUNT, 0, TASK_COUNT - 1, stats); } runStatementOnDriver(String.format("insert into %s (a) values (" + TASK_COUNT + ")", tableName)); if (!hasStats) { // Stats should still be invalid if they were invalid. stats = getTxnTableStats(msClient, tableName); Assert.assertEquals(0, stats.size()); } // Stats should be valid after analyze. runStatementOnDriver(String.format("analyze table %s compute statistics for columns", tableName)); verifyLongStats(TASK_COUNT + 1, 0, TASK_COUNT, getTxnTableStats(msClient, tableName)); }