apache/beam · error · IllegalArgumentException

Table type: not supported!

Error message

Table type: ${table.getType()} not supported!

What it means

InMemoryMetaStore.validateTableType checks that some registered provider (or a nested InMemoryMetaStore) supports the table's type string. If no provider is registered for that type, it throws IllegalArgumentException. It runs on every createTable so unsupported table types fail fast.

Solutions

  1. Register a provider for that type: metaStore.registerProvider(new TextTableProvider());
  2. Correct the table's TYPE in the DDL to a registered provider type.
  3. Ensure the same InMemoryMetaStore instance is used for registration and DDL execution.

Example fix

// before
InMemoryMetaStore metaStore = new InMemoryMetaStore();
metaStore.createTable(textTable); // type 'text' unsupported
// after
InMemoryMetaStore metaStore = new InMemoryMetaStore();
metaStore.registerProvider(new TextTableProvider());
metaStore.createTable(textTable);
Defensive patterns

Strategy: validation

Validate before calling

// ensure providers registered before any createTable
metaStore.registerProvider(new TextTableProvider());
// then create tables

Try / catch

try {
  metaStore.createTable(table);
} catch (IllegalArgumentException e) {
  if (e.getMessage().contains("not supported")) {
    // register the missing provider and retry once
  }
}

Prevention

When it happens

Trigger: createTable with a Table whose getType() has no matching registered provider — e.g. type 'bigquery' when only the text provider was registered, or providers registered on a different metastore instance than the one executing DDL.

Common situations: Forgetting to call registerProvider(new TextTableProvider()) before creating text tables; type-string case mismatch (registration lowercases, so lookups work, but unsupported custom types fail); splitting metastores between modules.

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/700b5e9491099d63. Report an issue: GitHub.

Appendix: source

Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/store/InMemoryMetaStore.java:97

  @Override
  public BeamSqlTable buildBeamSqlTable(Table table) {
    TableProvider provider = getProvider(table.getType());

    return provider.buildBeamSqlTable(table);
  }

  protected void validateTableType(Table table) {
    if (providers.containsKey(table.getType().toLowerCase())) {
      return;
    }
    // check if there is a nested metastore that supports this table
    @Nullable InMemoryMetaStore nestedMemoryMetastore =
        (InMemoryMetaStore) providers.get(getTableType());
    if (nestedMemoryMetastore != null) {
      nestedMemoryMetastore.validateTableType(table);
    } else {
      throw new IllegalArgumentException("Table type: " + table.getType() + " not supported!");
    }
  }

  @Override
  public void registerProvider(TableProvider provider) {
    String type = provider.getTableType().toLowerCase();
    if (providers.containsKey(type)) {
      throw new IllegalArgumentException("Provider is already registered for table type: " + type);
    }

    initTablesFromProvider(provider);
    this.providers.put(type, provider);
  }

  private void initTablesFromProvider(TableProvider provider) {
    Map<String, Table> tables = provider.getTables();
    for (String tableName : tables.keySet()) {
      if (this.tables.containsKey(tableName)) {

View on GitHub (pinned to 12126d8942)