Search in sources :

Example 1 with Column

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();
}
Also used : Field(com.facebook.presto.common.type.RowType.Field) Column(com.facebook.presto.verifier.framework.Column) SingleColumn(com.facebook.presto.sql.tree.SingleColumn) ImmutableList(com.google.common.collect.ImmutableList) SingleColumn(com.facebook.presto.sql.tree.SingleColumn)

Example 2 with Column

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();
}
Also used : Field(com.facebook.presto.common.type.RowType.Field) Column(com.facebook.presto.verifier.framework.Column) SingleColumn(com.facebook.presto.sql.tree.SingleColumn) ImmutableList(com.google.common.collect.ImmutableList)

Example 3 with Column

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));
}
Also used : Table(com.facebook.presto.sql.tree.Table) Column(com.facebook.presto.verifier.framework.Column) SingleColumn(com.facebook.presto.sql.tree.SingleColumn) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) ImmutableList(com.google.common.collect.ImmutableList) SelectItem(com.facebook.presto.sql.tree.SelectItem) Select(com.facebook.presto.sql.tree.Select) SingleColumn(com.facebook.presto.sql.tree.SingleColumn) FunctionCall(com.facebook.presto.sql.tree.FunctionCall)

Example 4 with Column

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);
}
Also used : Column(com.facebook.presto.verifier.framework.Column) SqlVarbinary(com.facebook.presto.common.type.SqlVarbinary) Test(org.testng.annotations.Test)

Example 5 with 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);
}
Also used : DereferenceExpression(com.facebook.presto.sql.tree.DereferenceExpression) Identifier(com.facebook.presto.sql.tree.Identifier) VerifierUtil.delimitedIdentifier(com.facebook.presto.verifier.framework.VerifierUtil.delimitedIdentifier) Column(com.facebook.presto.verifier.framework.Column) SqlVarbinary(com.facebook.presto.common.type.SqlVarbinary) Test(org.testng.annotations.Test)

Aggregations

Column (com.facebook.presto.verifier.framework.Column)7 SqlVarbinary (com.facebook.presto.common.type.SqlVarbinary)4 Test (org.testng.annotations.Test)4 SingleColumn (com.facebook.presto.sql.tree.SingleColumn)3 ImmutableList (com.google.common.collect.ImmutableList)3 Field (com.facebook.presto.common.type.RowType.Field)2 DereferenceExpression (com.facebook.presto.sql.tree.DereferenceExpression)1 FunctionCall (com.facebook.presto.sql.tree.FunctionCall)1 Identifier (com.facebook.presto.sql.tree.Identifier)1 Select (com.facebook.presto.sql.tree.Select)1 SelectItem (com.facebook.presto.sql.tree.SelectItem)1 Table (com.facebook.presto.sql.tree.Table)1 VerifierUtil.delimitedIdentifier (com.facebook.presto.verifier.framework.VerifierUtil.delimitedIdentifier)1 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)1