@Test
  public void testSchemaEvolutionOnVectorizedReads() throws Exception {
    // Currently only ORC, but in the future this should run against each fileformat with vectorized read support.
    Assume.assumeTrue("Vectorized reads only.", isVectorized);

    Schema orderSchema = new Schema(
        optional(1, "order_id", Types.IntegerType.get()),
        optional(2, "customer_first_name", Types.StringType.get()),
        optional(3, "customer_last_name", Types.StringType.get()),
        optional(4, "quantity", Types.IntegerType.get()),
        optional(5, "price", Types.IntegerType.get()),
        optional(6, "item", Types.StringType.get())
    );

    List<Record> records = TestHelper.RecordsBuilder.newInstance(orderSchema)
        .add(1, "Doctor", "Strange", 100, 3, "apple")
        .add(2, "Tony", "Stark", 150, 2, "apple")
        .add(3, "Tony", "Stark", 200, 6, "orange")
        .add(4, "Steve", "Rogers", 100, 8, "banana")
        .add(5, "Doctor", "Strange", 800, 7, "orange")
        .add(6, "Thor", "Odinson", 650, 3, "apple")
        .build();

    testTables.createTable(shell, "orders", orderSchema, fileFormat, records);

    // Reorder columns and rename one column
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN " +
        "customer_first_name customer_first_name string AFTER customer_last_name");
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN " +
        "quantity quantity int AFTER price");
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN " +
        "item fruit string");
    List<Object[]> result = shell.executeStatement("SELECT customer_first_name, customer_last_name, SUM(quantity) " +
        "FROM orders where price >= 3 group by customer_first_name, customer_last_name order by customer_first_name");

    assertQueryResult(result, 4,
        "Doctor", "Strange", 900L,
        "Steve", "Rogers", 100L,
        "Thor", "Odinson", 650L,
        "Tony", "Stark", 200L);


    // Adding a new column (will end up as last col of the schema)
    shell.executeStatement("ALTER TABLE orders ADD COLUMNS (nickname string)");
    shell.executeStatement("INSERT INTO orders VALUES (7, 'Romanoff', 'Natasha', 3, 250, 'apple', 'Black Widow')");
    result = shell.executeStatement("SELECT customer_first_name, customer_last_name, nickname, SUM(quantity) " +
        " FROM orders where price >= 3 group by customer_first_name, customer_last_name, nickname " +
        " order by customer_first_name");
    assertQueryResult(result, 5,
        "Doctor", "Strange", null, 900L,
        "Natasha", "Romanoff", "Black Widow", 250L,
        "Steve", "Rogers", null, 100L,
        "Thor", "Odinson", null, 650L,
        "Tony", "Stark", null, 200L);

    // Re-order newly added column (move it away from being the last column)
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN fruit fruit string AFTER nickname");
    result = shell.executeStatement("SELECT customer_first_name, customer_last_name, nickname, fruit, SUM(quantity) " +
        " FROM orders where price >= 3 and fruit < 'o' group by customer_first_name, customer_last_name, nickname, " +
        "fruit order by customer_first_name");
    assertQueryResult(result, 4,
        "Doctor", "Strange", null, "apple", 100L,
        "Natasha", "Romanoff", "Black Widow", "apple", 250L,
        "Steve", "Rogers", null, "banana", 100L,
        "Thor", "Odinson", null, "apple", 650L);

    // Rename newly added column (+ reading with different file includes)
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN nickname nick string");
    result = shell.executeStatement("SELECT customer_first_name, nick, SUM(quantity) " +
        " FROM orders where fruit < 'o'and nick IS NOT NULL group by customer_first_name, nick");
    assertQueryResult(result, 1, "Natasha", "Black Widow", 250L);

    // Re-order between different types
    shell.executeStatement("ALTER TABLE orders CHANGE COLUMN order_id order_id int AFTER customer_first_name");
    result = shell.executeStatement("SELECT customer_first_name, nick, SUM(quantity), MIN(order_id) " +
        " FROM orders where fruit < 'o'and nick IS NOT NULL group by customer_first_name, nick");
    assertQueryResult(result, 1, "Natasha", "Black Widow", 250L, 7);

    // Drop columns via REPLACE COLUMNS
    shell.executeStatement("ALTER TABLE orders REPLACE COLUMNS (" +
        "customer_last_name string, order_id int, quantity int, nick string, fruit string)");

    result = shell.executeStatement("DESCRIBE orders");
    assertQueryResult(result, 5,
        "customer_last_name", "string", "",
        "order_id", "int", "",
        "quantity", "int", "",
        "nick", "string", "",
        "fruit", "string", "");
    result = shell.executeStatement("SELECT * FROM orders ORDER BY order_id");
    assertQueryResult(result, 7,
        "Strange", 1, 100, null, "apple",
        "Stark", 2, 150, null, "apple",
        "Stark", 3, 200, null, "orange",
        "Rogers", 4, 100, null, "banana",
        "Strange", 5, 800, null, "orange",
        "Odinson", 6, 650, null, "apple",
        "Romanoff", 7, 250, "Black Widow", "apple");

  }
Tests that schema changes of Iceberg backed Hive tables are correctly reflected in subsequent select statements.
Verification is done from both ends:
 - when ALTER TABLE statements were initiated from Hive
 - when schema changes were originally done on the Iceberg table
iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergSchemaEvolution.java