apache/beam · error · UnsupportedOperationException

Cannot write to SHOW DATABASES

Error message

Cannot write to SHOW DATABASES

What it means

The SHOW DATABASES system table is read-only: its buildIOWriter is a fixed guard that throws whenever a write is attempted against the databases metadata view. It reflects that Beam SQL metadata tables never accept writes.

Solutions

  1. Treat SHOW DATABASES as query-only and remove any DML targeting it.
  2. Create or drop databases via catalog API operations rather than writing to the metadata 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:129 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/b94eb2d4844de20b. Report an issue: GitHub.

Appendix: source

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

    public PCollection<Row> buildIOReader(PBegin begin) {
      Collection<String> databases;
      if (currentOnly) {
        @Nullable String currentDb = catalog.currentDatabase();
        databases = currentDb != null ? Collections.singleton(currentDb) : Collections.emptyList();
      } else {
        databases = catalog.databases();
      }
      List<Row> rows =
          databases.stream()
              .map(db -> Row.withSchema(SCHEMA).addValues(db).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 DATABASES");
    }

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

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

  public static class TablesMetaTable extends BaseBeamTable {
    private final Catalog catalog;
    private final String dbName;
    private static final Schema SCHEMA =
        Schema.builder().addStringField("NAME").addStringField("TYPE").build();

View on GitHub (pinned to 12126d8942)