@Override
  public MixedTable loadTable(TableIdentifier tableIdentifier) {
    TableNameResolve tableNameResolve = new TableNameResolve(tableIdentifier.getTableName());
    if (tableNameResolve.withSuffix()) {
      TableIdentifier newTableIdentifier =
          TableIdentifier.of(
              tableIdentifier.getCatalog(),
              tableIdentifier.getDatabase(),
              tableNameResolve.getTableName());
      MixedTable mixedTable = mixedFormatCatalog.loadTable(newTableIdentifier);
      if (mixedTable.isUnkeyedTable()) {
        throw new IllegalArgumentException(
            "table "
                + newTableIdentifier
                + " is not keyed table can not use "
                + "change or base suffix");
      }
      KeyedTable keyedTable = mixedTable.asKeyedTable();
      if (tableNameResolve.isBase()) {
        return keyedTable.baseTable();
      } else {
        return new ChangeTableWithExternalSchemas((BasicUnkeyedTable) keyedTable.changeTable());
      }
    }
    return mixedFormatCatalog.loadTable(tableIdentifier);
  }
A wrapper of {@link MixedFormatCatalog} to resolve sub table, such as
"tableName#change","tableName#base"
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/MixedFormatCatalogSupportTableSuffix.java