Code review comment: Logging a warning here might be confusion, maybe just comment that this is expected as the db already exists when running this before the 2nd test...? Though, nothing critical ....

Code under review:
public void prepareDatabase() throws SQLException {
    pipelineRead.getOptions().setStableUniqueNames(CheckEnabled.OFF);
    DataSource dbDs = DatabaseTestHelper.getDataSourceForContainer(getDb(dbms));
    try {
      DatabaseTestHelper.createTable(
          dbDs,
          TABLE_NAME,
          Lists.newArrayList(
              KV.of("id", "INTEGER"),
              KV.of("name", "VARCHAR(50)"),
              KV.of("specialDate", "TIMESTAMP")));
    } catch (SQLException e) {
      LOG.warn("Exception occurred when preparing database {}", dbms, e);
      return;
    } catch (Exception e) {
      throw e;
    }

    final String dbmsLocal = dbms;
    pipelineWrite
        .apply(GenerateSequence.from(0).to(NUM_ROWS))
        .apply(MapElements.via(new MapRowDataFn()))
        .apply(
            JdbcIO.<RowData>write()
                .withTable(TABLE_NAME)
                .withDataSourceProviderFn(
                    voide -> DatabaseTestHelper.getDataSourceForContainer(getDb(dbmsLocal))));
    PipelineResult res = pipelineWrite.run();
    res.metrics()
        .allMetrics()
        .getDistributions()
        .forEach(
            dist -> {
              if (dist.getName().getName().contains("intsDistribution")) {
                LOG.info(
                    "Metric: {} | Min: {} | Max: {}",
                    dist.getName().getName(),
                    dist.getCommitted().getMin(),
                    dist.getCommitted().getMax());
              } else if (dist.getName().getName().contains("intsDistribution")) {
                LOG.info(
                    "Metric: {} | Min: {} | Max: {}",
                    dist.getName().getName(),
                    new DateTime(Instant.EPOCH.plus(Duration.millis(dist.getCommitted().getMin()))),
                    new DateTime(
                        Instant.EPOCH.plus(Duration.millis(dist.getCommitted().getMax()))));
              }
            });
    res.waitUntilFinish();
  }

Line commented on: LOG.warn("Exception occurred when preparing database {}", dbms, e);

Revised code:
public void prepareDatabase() throws SQLException {
    pipelineRead.getOptions().setStableUniqueNames(CheckEnabled.OFF);
    DataSource dbDs = DatabaseTestHelper.getDataSourceForContainer(getDb(dbms));
    try {
      DatabaseTestHelper.createTable(
          dbDs,
          TABLE_NAME,
          Lists.newArrayList(
              KV.of("id", "INTEGER"),
              KV.of("name", "VARCHAR(50)"),
              KV.of("specialDate", "TIMESTAMP")));
    } catch (SQLException e) {
      LOG.info(
          "Exception occurred when preparing database {}. "
              + "This is expected, and the test should pass.",
          dbms,
          e);
      return;
    } catch (Exception e) {
      throw e;
    }

    final String dbmsLocal = dbms;
    pipelineWrite
        .apply(GenerateSequence.from(0).to(NUM_ROWS))
        .apply(MapElements.via(new MapRowDataFn()))
        .apply(
            JdbcIO.<RowData>write()
                .withTable(TABLE_NAME)
                .withDataSourceProviderFn(
                    voide -> DatabaseTestHelper.getDataSourceForContainer(getDb(dbmsLocal))));
    PipelineResult res = pipelineWrite.run();
    res.metrics()
        .allMetrics()
        .getDistributions()
        .forEach(
            dist -> {
              if (dist.getName().getName().contains("intsDistribution")) {
                LOG.info(
                    "Metric: {} | Min: {} | Max: {}",
                    dist.getName().getName(),
                    dist.getCommitted().getMin(),
                    dist.getCommitted().getMax());
              } else if (dist.getName().getName().contains("intsDistribution")) {
                LOG.info(
                    "Metric: {} | Min: {} | Max: {}",
                    dist.getName().getName(),
                    new DateTime(Instant.EPOCH.plus(Duration.millis(dist.getCommitted().getMin()))),
                    new DateTime(
                        Instant.EPOCH.plus(Duration.millis(dist.getCommitted().getMax()))));
              }
            });
    res.waitUntilFinish();
  }