public MixedTable loadTable(Table base, org.apache.amoro.table.TableIdentifier tableIdentifier) {
    AuthenticatedFileIO io =
        AuthenticatedFileIOs.buildAdaptIcebergFileIO(this.tableMetaStore, base.io());
    PrimaryKeySpec keySpec =
        TablePropertyUtil.parsePrimaryKeySpec(base.schema(), base.properties());
    if (!keySpec.primaryKeyExisted()) {
      return new BasicUnkeyedTable(
          tableIdentifier, useMixedTableOperation(base, io), io, catalogProperties);
    }
    Table changeIcebergTable = loadChangeStore(base);
    BaseTable baseStore =
        new BasicKeyedTable.BaseInternalTable(
            tableIdentifier, useMixedTableOperation(base, io), io, catalogProperties);
    ChangeTable changeStore =
        new BasicKeyedTable.ChangeInternalTable(
            tableIdentifier, useMixedTableOperation(changeIcebergTable, io), io, catalogProperties);
    return new BasicKeyedTable(keySpec, baseStore, changeStore);
  }
load a mixed-format table.

@param base - base store
@param tableIdentifier mixed-format table identifier.
@return mixed format table instance.
amoro-format-iceberg/src/main/java/org/apache/amoro/mixed/MixedTables.java