code: public static Pair<Set<String>, Set<String>>
      getSnapshotableTableNamesFromInMemoryJar(InMemoryJarfile jarfile) {
          Set<String> fullTableNames = new HashSet<>();
          Set<String> optionalTableNames = new HashSet<>();
          Catalog catalog = new Catalog();
          catalog.execute(getSerializedCatalogStringFromJar(jarfile));
          Database db = catalog.getClusters().get("cluster").getDatabases().get("database");
          Pair<List<Table>, Set<String>> ret;
  
          ret = getSnapshotableTables(db, true);
          ret.getFirst().forEach(table -> fullTableNames.add(table.getTypeName()));
          optionalTableNames.addAll(ret.getSecond());
  
          ret = getSnapshotableTables(db, false);
          ret.getFirst().forEach(table -> fullTableNames.add(table.getTypeName()));
          optionalTableNames.addAll(ret.getSecond());
  
          return new Pair<Set<String>, Set<String>>(fullTableNames, optionalTableNames);
      }
docs: Get all snapshot-able table names from an in-memory catalog jar file.
  A snapshot-able table is one that's neither an export table nor an implicitly partitioned view.
  @param jarfile a in-memory catalog jar file
  @return A pair of two string sets.</br>
  The first set contains a complete list of names of snapshot-able tables.</br>
  The second set contains a list of names of optional
  <strong>single persistent table views</strong> without which the snapshot
  is still considered as complete (ENG-11578, ENG-14145).