use of com.facebook.presto.verifier.framework.Column in project presto by prestodb.
the class RowColumnValidator method generateChecksumColumns.
@Override
public List<SingleColumn> generateChecksumColumns(Column column) {
checkColumnType(column);
ImmutableList.Builder<SingleColumn> columnsBuilder = ImmutableList.builder();
List<Field> fields = getFields(column);
for (int i = 0; i < fields.size(); i++) {
Field field = fields.get(i);
Column fieldColumn = getFieldAsColumn(column, field, i);
List<SingleColumn> fieldColumns = columnValidators.get(fieldColumn.getCategory()).get().generateChecksumColumns(fieldColumn);
columnsBuilder.addAll(fieldColumns);
}
return columnsBuilder.build();
}
use of com.facebook.presto.verifier.framework.Column in project presto by prestodb.
the class RowColumnValidator method validate.
@Override
public List<ColumnMatchResult<?>> validate(Column column, ChecksumResult controlResult, ChecksumResult testResult) {
checkColumnType(column);
ImmutableList.Builder<ColumnMatchResult<?>> resultsBuilder = ImmutableList.builder();
List<Field> fields = getFields(column);
for (int i = 0; i < fields.size(); i++) {
Column fieldColumn = getFieldAsColumn(column, fields.get(i), i);
resultsBuilder.addAll(columnValidators.get(fieldColumn.getCategory()).get().validate(fieldColumn, controlResult, testResult));
}
return resultsBuilder.build();
}
use of com.facebook.presto.verifier.framework.Column in project presto by prestodb.
the class ChecksumValidator method generateChecksumQuery.
public Query generateChecksumQuery(QualifiedName tableName, List<Column> columns) {
ImmutableList.Builder<SelectItem> selectItems = ImmutableList.builder();
selectItems.add(new SingleColumn(new FunctionCall(QualifiedName.of("count"), ImmutableList.of())));
for (Column column : columns) {
selectItems.addAll(columnValidators.get(column.getCategory()).get().generateChecksumColumns(column));
}
return simpleQuery(new Select(false, selectItems.build()), new Table(tableName));
}
use of com.facebook.presto.verifier.framework.Column in project presto by prestodb.
the class TestChecksumValidator method testArray.
@Test
public void testArray() {
List<Column> columns = ImmutableList.of(INT_ARRAY_COLUMN, MAP_ARRAY_COLUMN);
ChecksumResult controlChecksum = new ChecksumResult(5, ImmutableMap.<String, Object>builder().put("int_array$checksum", new SqlVarbinary(new byte[] { 0xa })).put("int_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xb })).put("int_array$cardinality_sum", 1L).put("map_array$checksum", new SqlVarbinary(new byte[] { 0xc })).put("map_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xd })).put("map_array$cardinality_sum", 2L).build());
// Matched
assertTrue(checksumValidator.getMismatchedColumns(columns, controlChecksum, controlChecksum).isEmpty());
// Mismatched different elements
ChecksumResult testChecksum = new ChecksumResult(5, ImmutableMap.<String, Object>builder().put("int_array$checksum", new SqlVarbinary(new byte[] { 0x1a })).put("int_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xb })).put("int_array$cardinality_sum", 1L).put("map_array$checksum", new SqlVarbinary(new byte[] { 0x1c })).put("map_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xd })).put("map_array$cardinality_sum", 2L).build());
assertMismatchedColumns(columns, controlChecksum, testChecksum, INT_ARRAY_COLUMN, MAP_ARRAY_COLUMN);
// Mismatched different cardinality checksum
testChecksum = new ChecksumResult(5, ImmutableMap.<String, Object>builder().put("int_array$checksum", new SqlVarbinary(new byte[] { 0xa })).put("int_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0x1b })).put("int_array$cardinality_sum", 1L).put("map_array$checksum", new SqlVarbinary(new byte[] { 0xc })).put("map_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0x1d })).put("map_array$cardinality_sum", 2L).build());
assertMismatchedColumns(columns, controlChecksum, testChecksum, INT_ARRAY_COLUMN, MAP_ARRAY_COLUMN);
// Mismatched different cardinality sum
testChecksum = new ChecksumResult(5, ImmutableMap.<String, Object>builder().put("int_array$checksum", new SqlVarbinary(new byte[] { 0xa })).put("int_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xb })).put("int_array$cardinality_sum", 3L).put("map_array$checksum", new SqlVarbinary(new byte[] { 0xc })).put("map_array$cardinality_checksum", new SqlVarbinary(new byte[] { 0xd })).put("map_array$cardinality_sum", 4L).build());
assertMismatchedColumns(columns, controlChecksum, testChecksum, INT_ARRAY_COLUMN, MAP_ARRAY_COLUMN);
}
use of com.facebook.presto.verifier.framework.Column in project presto by prestodb.
the class TestChecksumValidator method testRow.
@Test
public void testRow() {
List<Column> columns = ImmutableList.of(ROW_COLUMN);
ChecksumResult controlChecksum = new ChecksumResult(ROW_COLUMN_CHECKSUMS.size(), ROW_COLUMN_CHECKSUMS);
assertTrue(checksumValidator.getMismatchedColumns(columns, controlChecksum, controlChecksum).isEmpty());
// Mismatched different elements
ChecksumResult testChecksum = new ChecksumResult(ROW_COLUMN_CHECKSUMS.size(), merge(ROW_COLUMN_CHECKSUMS, ImmutableMap.<String, Object>builder().put("row.i$checksum", new SqlVarbinary(new byte[] { 0x1a })).put("row.r.b$checksum", new SqlVarbinary(new byte[] { 0x1d })).build()));
Column aFieldColumn = Column.create("row.i", new DereferenceExpression(ROW_COLUMN.getExpression(), new Identifier("i")), INTEGER);
Column rbFieldColumn = Column.create("row.r.b", new DereferenceExpression(new DereferenceExpression(ROW_COLUMN.getExpression(), new Identifier("r")), new Identifier("b")), BIGINT);
assertMismatchedColumns(columns, controlChecksum, testChecksum, aFieldColumn, rbFieldColumn);
}
Aggregations