apache/beam · error · UnsupportedOperationException

Cannot write to SHOW CATALOGS

Error message

Cannot write to SHOW CATALOGS

What it means

SystemTables' SHOW CATALOGS pseudo-table is read-only by design: its buildIOWriter is a sentinel guard that always throws because catalog metadata views in Beam SQL cannot be written to. Any INSERT/UPDATE targeting SHOW CATALOGS reaches this throw.

Solutions

  1. Do not write to metadata views; query SHOW CATALOGS only.
  2. To change the catalog set, use catalog management operations (CREATE/DROP CATALOG) instead of writing to the system table.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/SystemTables.java:86 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/SystemTables.java:86

    }

    @Override
    public PCollection<Row> buildIOReader(PBegin begin) {
      Collection<Catalog> catalogs =
          currentOnly
              ? ImmutableList.of(catalogManager.currentCatalog())
              : catalogManager.catalogs();
      List<Row> rows =
          catalogs.stream()
              .map(cat -> Row.withSchema(SCHEMA).addValues(cat.name(), cat.type()).build())
              .collect(Collectors.toList());

      return begin.apply(Create.of(rows).withRowSchema(SCHEMA));
    }

    @Override
    public POutput buildIOWriter(PCollection<Row> input) {
      throw new UnsupportedOperationException("Cannot write to SHOW CATALOGS");
    }

    @Override
    public PCollection.IsBounded isBounded() {
      return PCollection.IsBounded.BOUNDED;
    }

    @Override
    public Schema getSchema() {
      return SCHEMA;
    }
  }

  public static class DatabasesMetaTable extends BaseBeamTable {
    private final Catalog catalog;
    private final boolean currentOnly;
    private static final Schema SCHEMA = Schema.builder().addStringField("NAME").build();

View on GitHub (pinned to 12126d8942)