@Override public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions ) { return ConcurrentUtils.getImmediateFuture(); } }
/** * 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 ); }
@Override public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { return ConcurrentUtils.getImmediateFuture(); }
ConcurrentUtils.waitForCompletion( futures );
@Override @Async public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> tables ) { return ConcurrentUtils.getImmediateFuture(); }
/** * 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 ); }
@Override @Async public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { return ConcurrentUtils.getImmediateFuture(); }
@Override @Async public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions ) { return ConcurrentUtils.getImmediateFuture(); } }
@Override @Async public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions ) { return ConcurrentUtils.getImmediateFuture(); } }
@Override @Async public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { return ConcurrentUtils.getImmediateFuture(); }
@Override @Async public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { return ConcurrentUtils.getImmediateFuture(); }
@Override @Async public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { return ConcurrentUtils.getImmediateFuture(); }
@Override @Async public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions ) { return ConcurrentUtils.getImmediateFuture(); } }
@Override @Async public Future<?> vacuumTablesAsync( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions ) { taskLoop: while ( true ) { AnalyticsTablePartition partition = partitions.poll(); if ( partition == null ) { break taskLoop; } final String sql = statementBuilder.getVacuum( partition.getTempTableName() ); log.debug( "Vacuum SQL: " + sql ); jdbcTemplate.execute( sql ); } return ConcurrentUtils.getImmediateFuture(); }
@Override @Async public Future<?> applyAggregationLevels( ConcurrentLinkedQueue<AnalyticsTablePartition> partitions, Collection<String> dataElements, int aggregationLevel ) { taskLoop: while ( true ) { AnalyticsTablePartition partition = partitions.poll(); if ( partition == null ) { break taskLoop; } StringBuilder sql = new StringBuilder( "update " + partition.getTempTableName() + " set " ); for ( int i = 0; i < aggregationLevel; i++ ) { int level = i + 1; String column = quote( DataQueryParams.LEVEL_PREFIX + level ); sql.append( column + " = null," ); } sql.deleteCharAt( sql.length() - ",".length() ); sql.append( " where level > " + aggregationLevel ); sql.append( " and dx in (" + getQuotedCommaDelimitedString( dataElements ) + ")" ); log.debug( "Aggregation level SQL: " + sql.toString() ); jdbcTemplate.execute( sql.toString() ); } return ConcurrentUtils.getImmediateFuture(); }