@DisplayName("TestSQL: INSERT OVERWRITE static mode")
  @ParameterizedTest(name = "{index} {0} {1} {2} SELECT {3}")
  @MethodSource
  public void testStatic(
      TableFormat format,
      PrimaryKeySpec keySpec,
      String ptFilter,
      String sourceProject,
      Function<Record, Boolean> deleteFilter,
      Function<Record, Record> sourceTrans) {
    spark().conf().set(OVERWRITE_MODE_KEY, STATIC);
    initTargetTable(keySpec, PT_SPEC);

    sql(
        "INSERT OVERWRITE "
            + target()
            + " "
            + ptFilter
            + " SELECT "
            + sourceProject
            + " FROM "
            + source());
    table.refresh();

    List<Record> expects =
        target.stream().filter(r -> !deleteFilter.apply(r)).collect(Collectors.toList());

    source.stream().map(sourceTrans).forEach(expects::add);

    List<Record> actual = TestTableUtil.tableRecords(table);
    DataComparator.build(expects, actual).ignoreOrder("pt", "id").assertRecordsEqual();

    assertFileLayout(format);
  }
1. dynamic insert overwrite 2. static insert overwrite 3. for un-partitioned table 3. duplicate
check for insert overwrite 4. optimize write is work for insert overwrite
amoro-format-mixed/amoro-mixed-spark/v3.5/amoro-mixed-spark-3.5/src/test/java/org/apache/amoro/spark/test/suites/sql/TestInsertOverwriteSQL.java