/** * Returns statistics on this table as a tabular result set. Used for the SHOW TABLE STATS * statement. The schema of the returned TResultSet is set inside this method. */ public TResultSet getTableStats() { TResultSet result = new TResultSet(); TResultSetMetadata resultSchema = new TResultSetMetadata(); result.setSchema(resultSchema); resultSchema.addToColumns(new TColumn("Region Location", ColumnType.STRING.toThrift())); resultSchema.addToColumns(new TColumn("Start RowKey", ColumnType.STRING.toThrift())); resultSchema.addToColumns(new TColumn("Est. #Rows", ColumnType.BIGINT.toThrift())); resultSchema.addToColumns(new TColumn("Size", ColumnType.STRING.toThrift())); // TODO: Consider fancier stats maintenance techniques for speeding up this process. // Currently, we list all regions and perform a mini-scan of each of them to // estimate the number of rows, the data size, etc., which is rather expensive. try { long totalNumRows = 0; long totalHdfsSize = 0; List<HRegionLocation> regions = HBaseTable.getRegionsInRange( hTable_, HConstants.EMPTY_END_ROW, HConstants.EMPTY_START_ROW); for (HRegionLocation region : regions) { TResultRowBuilder rowBuilder = new TResultRowBuilder(); HRegionInfo regionInfo = region.getRegionInfo(); Pair<Long, Long> estRowStats = getEstimatedRowStats(regionInfo.getStartKey(), regionInfo.getEndKey()); long numRows = estRowStats.first.longValue(); long hdfsSize = getHdfsSize(regionInfo); totalNumRows += numRows; totalHdfsSize += hdfsSize; // Add the region location, start rowkey, number of rows and raw Hdfs size. rowBuilder .add(String.valueOf(region.getHostname())) .add(Bytes.toString(regionInfo.getStartKey())) .add(numRows) .addBytes(hdfsSize); result.addToRows(rowBuilder.get()); } // Total num rows and raw Hdfs size. if (regions.size() > 1) { TResultRowBuilder rowBuilder = new TResultRowBuilder(); rowBuilder.add("Total").add("").add(totalNumRows).addBytes(totalHdfsSize); result.addToRows(rowBuilder.get()); } } catch (IOException e) { throw new RuntimeException(e); } return result; }
private void checkHBaseTableCols( Db db, String hiveTableName, String hbaseTableName, String[] hiveColNames, String[] colFamilies, String[] colQualifiers, ColumnType[] colTypes) throws TableLoadingException { checkTableCols(db, hiveTableName, 1, hiveColNames, colTypes); HBaseTable tbl = (HBaseTable) db.getTable(hiveTableName); assertEquals(tbl.getHBaseTableName(), hbaseTableName); List<Column> cols = tbl.getColumns(); assertEquals(colFamilies.length, colTypes.length); assertEquals(colQualifiers.length, colTypes.length); Iterator<Column> it = cols.iterator(); int i = 0; while (it.hasNext()) { HBaseColumn col = (HBaseColumn) it.next(); assertEquals(col.getColumnFamily(), colFamilies[i]); assertEquals(col.getColumnQualifier(), colQualifiers[i]); ++i; } }