use of com.linkedin.pinot.core.common.BlockMetadata in project pinot by linkedin.
the class RealtimeTableDataManagerTest method testSetup.
public void testSetup() throws Exception {
final HLRealtimeSegmentDataManager manager = new HLRealtimeSegmentDataManager(realtimeSegmentZKMetadata, tableConfig, instanceZKMetadata, null, tableDataManagerConfig.getDataDir(), ReadMode.valueOf(tableDataManagerConfig.getReadMode()), getTestSchema(), new ServerMetrics(new MetricsRegistry()));
final long start = System.currentTimeMillis();
TimerService.timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (System.currentTimeMillis() - start >= (SEGMENT_CONSUMING_TIME)) {
keepOnRunning = false;
}
}
}, 1000, 1000 * 60 * 1);
TimerService.timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long start = System.currentTimeMillis();
long sum = 0;
try {
RealtimeSegment segment = (RealtimeSegment) manager.getSegment();
RealtimeColumnDataSource mDs = (RealtimeColumnDataSource) segment.getDataSource("count");
BlockValSet valSet = mDs.nextBlock().getBlockValueSet();
BlockSingleValIterator valIt = (BlockSingleValIterator) valSet.iterator();
int val = valIt.nextIntVal();
while (val != Constants.EOF) {
val = valIt.nextIntVal();
sum += val;
}
} catch (Exception e) {
LOGGER.info("count column exception");
e.printStackTrace();
}
long stop = System.currentTimeMillis();
LOGGER.info("time to scan metric col count : " + (stop - start) + " sum : " + sum);
}
}, 20000, 1000 * 5);
TimerService.timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long start = System.currentTimeMillis();
long sum = 0;
try {
RealtimeSegment segment = (RealtimeSegment) manager.getSegment();
RealtimeColumnDataSource mDs = (RealtimeColumnDataSource) segment.getDataSource("viewerId");
BlockValSet valSet = mDs.nextBlock().getBlockValueSet();
BlockSingleValIterator valIt = (BlockSingleValIterator) valSet.iterator();
int val = valIt.nextIntVal();
while (val != Constants.EOF) {
val = valIt.nextIntVal();
sum += val;
}
} catch (Exception e) {
LOGGER.info("viewerId column exception");
e.printStackTrace();
}
long stop = System.currentTimeMillis();
LOGGER.info("time to scan SV dimension col viewerId : " + (stop - start) + " sum : " + sum);
}
}, 20000, 1000 * 5);
TimerService.timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long start = System.currentTimeMillis();
long sum = 0;
try {
RealtimeSegment segment = (RealtimeSegment) manager.getSegment();
RealtimeColumnDataSource mDs = (RealtimeColumnDataSource) segment.getDataSource("daysSinceEpoch");
BlockValSet valSet = mDs.nextBlock().getBlockValueSet();
BlockSingleValIterator valIt = (BlockSingleValIterator) valSet.iterator();
int val = valIt.nextIntVal();
while (val != Constants.EOF) {
val = valIt.nextIntVal();
sum += val;
}
} catch (Exception e) {
LOGGER.info("daysSinceEpoch column exception");
e.printStackTrace();
}
long stop = System.currentTimeMillis();
LOGGER.info("time to scan SV time col daysSinceEpoch : " + (stop - start) + " sum : " + sum);
}
}, 20000, 1000 * 5);
TimerService.timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long start = System.currentTimeMillis();
long sum = 0;
float sumOfLengths = 0F;
float counter = 0F;
try {
RealtimeSegment segment = (RealtimeSegment) manager.getSegment();
RealtimeColumnDataSource mDs = (RealtimeColumnDataSource) segment.getDataSource("viewerCompanies");
Block b = mDs.nextBlock();
BlockValSet valSet = b.getBlockValueSet();
BlockMultiValIterator valIt = (BlockMultiValIterator) valSet.iterator();
BlockMetadata m = b.getMetadata();
int maxVams = m.getMaxNumberOfMultiValues();
while (valIt.hasNext()) {
int[] vals = new int[maxVams];
int len = valIt.nextIntVal(vals);
for (int i = 0; i < len; i++) {
sum += vals[i];
}
sumOfLengths += len;
counter++;
}
} catch (Exception e) {
LOGGER.info("daysSinceEpoch column exception");
e.printStackTrace();
}
long stop = System.currentTimeMillis();
LOGGER.info("time to scan MV col viewerCompanies : " + (stop - start) + " sum : " + sum + " average len : " + (sumOfLengths / counter));
}
}, 20000, 1000 * 5);
while (keepOnRunning) {
// Wait for keepOnRunning to be set to false
}
}
use of com.linkedin.pinot.core.common.BlockMetadata in project pinot by linkedin.
the class NoDictionaryMultiColumnGroupKeyGenerator method generateKeysForBlock.
@Override
public void generateKeysForBlock(TransformBlock transformBlock, int[] docIdToGroupKey) {
int numGroupByColumns = _groupByColumns.length;
int numDocs = transformBlock.getNumDocs();
Object[] values = new Object[numGroupByColumns];
boolean[] hasDictionary = new boolean[numGroupByColumns];
FieldSpec.DataType[] dataTypes = new FieldSpec.DataType[numGroupByColumns];
for (int i = 0; i < numGroupByColumns; i++) {
BlockValSet blockValSet = transformBlock.getBlockValueSet(_groupByColumns[i]);
dataTypes[i] = blockValSet.getValueType();
BlockMetadata blockMetadata = transformBlock.getBlockMetadata(_groupByColumns[i]);
if (blockMetadata.hasDictionary()) {
hasDictionary[i] = true;
values[i] = blockValSet.getDictionaryIds();
} else {
hasDictionary[i] = false;
values[i] = getValuesFromBlockValSet(blockValSet, dataTypes[i]);
}
}
for (int i = 0; i < numDocs; i++) {
int[] keys = new int[numGroupByColumns];
for (int j = 0; j < numGroupByColumns; j++) {
if (hasDictionary[j]) {
int[] dictIds = (int[]) values[j];
keys[j] = dictIds[i];
} else {
switch(dataTypes[j]) {
case INT:
int[] intValues = (int[]) values[j];
keys[j] = _onTheFlyDictionaries[j].put(intValues[i]);
break;
case LONG:
long[] longValues = (long[]) values[j];
keys[j] = _onTheFlyDictionaries[j].put(longValues[i]);
break;
case FLOAT:
float[] floatValues = (float[]) values[j];
keys[j] = _onTheFlyDictionaries[j].put(floatValues[i]);
break;
case DOUBLE:
double[] doubleValues = (double[]) values[j];
keys[j] = _onTheFlyDictionaries[j].put(doubleValues[i]);
break;
case STRING:
String[] stringValues = (String[]) values[j];
keys[j] = _onTheFlyDictionaries[j].put(stringValues[i]);
break;
default:
throw new IllegalArgumentException("Illegal data type for no-dictionary key generator: " + dataTypes[j]);
}
}
}
docIdToGroupKey[i] = getGroupIdForKey(new FixedIntArray(keys));
}
}
use of com.linkedin.pinot.core.common.BlockMetadata in project pinot by linkedin.
the class RealtimeFileBasedReaderTest method testDataSourceWithoutPredicateForSingleValueTimeColumns.
private void testDataSourceWithoutPredicateForSingleValueTimeColumns() {
for (FieldSpec spec : schema.getAllFieldSpecs()) {
if (spec.isSingleValueField() && spec.getFieldType() == FieldType.TIME) {
DataSource offlineDS = offlineSegment.getDataSource(spec.getName());
DataSource realtimeDS = realtimeSegment.getDataSource(spec.getName());
Block offlineBlock = offlineDS.nextBlock();
Block realtimeBlock = realtimeDS.nextBlock();
BlockMetadata offlineMetadata = offlineBlock.getMetadata();
BlockMetadata realtimeMetadata = realtimeBlock.getMetadata();
BlockSingleValIterator offlineValIterator = (BlockSingleValIterator) offlineBlock.getBlockValueSet().iterator();
BlockSingleValIterator realtimeValIterator = (BlockSingleValIterator) realtimeBlock.getBlockValueSet().iterator();
Assert.assertEquals(offlineSegment.getSegmentMetadata().getTotalDocs(), realtimeSegment.getAggregateDocumentCount());
while (realtimeValIterator.hasNext()) {
int offlineDicId = offlineValIterator.nextIntVal();
int realtimeDicId = realtimeValIterator.nextIntVal();
Assert.assertEquals(offlineMetadata.getDictionary().get(offlineDicId), realtimeMetadata.getDictionary().get(realtimeDicId));
}
Assert.assertEquals(offlineValIterator.hasNext(), realtimeValIterator.hasNext());
}
}
}
use of com.linkedin.pinot.core.common.BlockMetadata in project pinot by linkedin.
the class RealtimeFileBasedReaderTest method testDataSourceWithoutPredicateForSingleValueMetricColumns.
private void testDataSourceWithoutPredicateForSingleValueMetricColumns() {
for (FieldSpec spec : schema.getAllFieldSpecs()) {
if (spec.isSingleValueField() && spec.getFieldType() == FieldType.METRIC) {
DataSource offlineDS = offlineSegment.getDataSource(spec.getName());
DataSource realtimeDS = realtimeSegment.getDataSource(spec.getName());
Block offlineBlock = offlineDS.nextBlock();
Block realtimeBlock = realtimeDS.nextBlock();
BlockMetadata offlineMetadata = offlineBlock.getMetadata();
BlockMetadata realtimeMetadata = realtimeBlock.getMetadata();
BlockSingleValIterator offlineValIterator = (BlockSingleValIterator) offlineBlock.getBlockValueSet().iterator();
BlockSingleValIterator realtimeValIterator = (BlockSingleValIterator) realtimeBlock.getBlockValueSet().iterator();
Assert.assertEquals(offlineSegment.getSegmentMetadata().getTotalDocs(), realtimeSegment.getAggregateDocumentCount());
while (realtimeValIterator.hasNext()) {
int offlineDicId = offlineValIterator.nextIntVal();
int realtimeDicId = realtimeValIterator.nextIntVal();
Object value;
if (realtimeMetadata.hasDictionary()) {
value = realtimeMetadata.getDictionary().get(realtimeDicId);
} else {
value = realtimeDicId;
}
Assert.assertEquals(offlineMetadata.getDictionary().get(offlineDicId), value);
}
Assert.assertEquals(offlineValIterator.hasNext(), realtimeValIterator.hasNext());
}
}
}
use of com.linkedin.pinot.core.common.BlockMetadata in project pinot by linkedin.
the class RealtimeFileBasedReaderTest method testDataSourceWithoutPredicateForSingleValueDimensionColumns.
private void testDataSourceWithoutPredicateForSingleValueDimensionColumns() {
for (FieldSpec spec : schema.getAllFieldSpecs()) {
if (spec.isSingleValueField() && spec.getFieldType() == FieldType.DIMENSION) {
DataSource offlineDS = offlineSegment.getDataSource(spec.getName());
DataSource realtimeDS = realtimeSegment.getDataSource(spec.getName());
Block offlineBlock = offlineDS.nextBlock();
Block realtimeBlock = realtimeDS.nextBlock();
BlockMetadata offlineMetadata = offlineBlock.getMetadata();
BlockMetadata realtimeMetadata = realtimeBlock.getMetadata();
BlockSingleValIterator offlineValIterator = (BlockSingleValIterator) offlineBlock.getBlockValueSet().iterator();
BlockSingleValIterator realtimeValIterator = (BlockSingleValIterator) realtimeBlock.getBlockValueSet().iterator();
Assert.assertEquals(offlineSegment.getSegmentMetadata().getTotalDocs(), realtimeSegment.getAggregateDocumentCount());
while (realtimeValIterator.hasNext()) {
int offlineDicId = offlineValIterator.nextIntVal();
int realtimeDicId = realtimeValIterator.nextIntVal();
try {
Assert.assertEquals(offlineMetadata.getDictionary().get(offlineDicId), realtimeMetadata.getDictionary().get(realtimeDicId));
} catch (AssertionError e) {
LOGGER.info("column : {}", spec.getName());
LOGGER.info("realtimeDicId : {}, rawValue : {}", realtimeDicId, realtimeMetadata.getDictionary().get(realtimeDicId));
LOGGER.info("offlineDicId : {}, rawValue : {}", offlineDicId, offlineMetadata.getDictionary().get(offlineDicId));
throw e;
}
}
Assert.assertEquals(offlineValIterator.hasNext(), realtimeValIterator.hasNext());
}
}
}
Aggregations