/** * Populates the given analytics tables. * * @param tables the list of {@link AnalyticsTable}. */ private void populateTables( AnalyticsTableUpdateParams params, List<AnalyticsTable> tables ) { List<AnalyticsTablePartition> partitions = PartitionUtils.getTablePartitions( tables ); int taskNo = Math.min( getProcessNo(), partitions.size() ); log.info( "Populate table task number: " + taskNo ); ConcurrentLinkedQueue<AnalyticsTablePartition> partitionQ = new ConcurrentLinkedQueue<>( partitions ); List<Future<?>> futures = new ArrayList<>(); for ( int i = 0; i < taskNo; i++ ) { futures.add( tableManager.populateTablesAsync( params, partitionQ ) ); } ConcurrentUtils.waitForCompletion( futures ); }
/** * Vacuums the given analytics tables. * * @param tables the list of {@link AnalyticsTable}. */ private void vacuumTables( List<AnalyticsTable> tables ) { List<AnalyticsTablePartition> partitions = PartitionUtils.getTablePartitions( tables ); ConcurrentLinkedQueue<AnalyticsTablePartition> partitionQ = new ConcurrentLinkedQueue<>( partitions ); List<Future<?>> futures = new ArrayList<>(); for ( int i = 0; i < getProcessNo(); i++ ) { tableManager.vacuumTablesAsync( partitionQ ); } ConcurrentUtils.waitForCompletion( futures ); }
ConcurrentUtils.waitForCompletion( futures );
/** * Creates indexes on the given analytics tables. * * @param tables the list of {@link AnalyticsTable}. */ private void createIndexes( List<AnalyticsTable> tables ) { List<AnalyticsTablePartition> partitions = PartitionUtils.getTablePartitions( tables ); ConcurrentLinkedQueue<AnalyticsIndex> indexes = new ConcurrentLinkedQueue<>(); for ( AnalyticsTablePartition partition : partitions ) { List<AnalyticsTableColumn> columns = partition.getMasterTable().getDimensionColumns(); for ( AnalyticsTableColumn col : columns ) { if ( !col.isSkipIndex() ) { List<String> indexColumns = col.hasIndexColumns() ? col.getIndexColumns() : Lists.newArrayList( col.getName() ); indexes.add( new AnalyticsIndex( partition.getTempTableName(), indexColumns, col.getIndexType() ) ); } } } log.info( "No of analytics table indexes: " + indexes.size() ); List<Future<?>> futures = new ArrayList<>(); for ( int i = 0; i < getProcessNo(); i++ ) { futures.add( tableManager.createIndexesAsync( indexes ) ); } ConcurrentUtils.waitForCompletion( futures ); }