apache/beam · error · java.lang.UnsupportedOperationException

SideInputTable is a read-only metadata adapter and does not…

Error message

SideInputTable is a read-only metadata adapter and does not support statisticsFiles.

What it means

SideInputTable.statisticsFiles() throws UnsupportedOperationException: table statistics files are not serialized into the side-input adapter, so listing them is unsupported. Statistics-based planning must use a catalog-backed table.

Solutions

  1. Do not rely on statistics with SideInputTable; reads are planned from the serialized data files/metadata.
  2. Load the catalog-backed table when statistics are required.
  3. Skip statistics code paths for SideInputTable instances.

Example fix

// before
List<StatisticsFile> stats = sideInputTable.statisticsFiles();

// after
List<StatisticsFile> stats = catalog.loadTable(identifier).statisticsFiles();
Defensive patterns

Strategy: type-guard

Type guard

boolean hasStatistics = !(table instanceof SideInputTable);

Try / catch

try {
  List<StatisticsFile> stats = table.statisticsFiles();
} catch (UnsupportedOperationException e) {
  if (!e.getMessage().contains("statisticsFiles")) throw e;
  // proceed without statistics
}

Prevention

When it happens

Trigger: Calling table.statisticsFiles() on a SideInputTable, e.g. from planner or optimizer code that consults statistics.

Common situations: Query-planning or file-skipping logic reused for side-input tables; generic Table-interface consumers.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/d380ee19029e839b. Report an issue: GitHub.

Appendix: source

Thrown at sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/SideInputTable.java:213

    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support snapshots.");
  }

  @Override
  public List<HistoryEntry> history() {
    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support snapshots.");
  }

  @Override
  public Map<String, SnapshotRef> refs() {
    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support snapshot refs.");
  }

  @Override
  public List<StatisticsFile> statisticsFiles() {
    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support statisticsFiles.");
  }

  @Override
  public List<PartitionStatisticsFile> partitionStatisticsFiles() {
    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support partitionStatisticsFiles.");
  }

  @Override
  public TableScan newScan() {
    throw new UnsupportedOperationException(
        "SideInputTable is a read-only metadata adapter and does not support scans directly.");
  }

  @Override
  public IncrementalAppendScan newIncrementalAppendScan() {
    throw new UnsupportedOperationException(

View on GitHub (pinned to 12126d8942)