apache/beam · error · IllegalStateException

No TableProvider registered for table type

Error message

No TableProvider registered for table type: ${type}

What it means

InMemoryMetaStore.getProvider resolves the TableProvider responsible for a given table type, including delegating to nested InMemoryMetaStores. If nothing is registered for the type (after nested lookup), it throws IllegalStateException. Called by createTable, dropTable, alterTable, and partitioning checks.

Solutions

  1. Register the required provider, e.g. metaStore.registerProvider(new TextTableProvider());
  2. Add the matching beam-sql extension dependency (e.g. beam-sdks-java-extensions-sql) providing that provider class.
  3. Correct the table TYPE string to match a registered provider.

Example fix

// before
metaStore.createTable(pubsubTable); // no provider for 'pubsub'
// after
metaStore.registerProvider(new PubsubTableProvider());
metaStore.createTable(pubsubTable);
Defensive patterns

Strategy: validation

Validate before calling

// verify provider availability before operations
Objects.requireNonNull(metaStore.getTable(tableName), "table must exist");
// ensure the provider for its type was registered at startup

Try / catch

try {
  metaStore.createTable(table);
} catch (IllegalStateException e) {
  if (e.getMessage().startsWith("No TableProvider registered")) {
    // register missing provider and retry
  }
}

Prevention

When it happens

Trigger: Performing any operation (create/drop/alter table, supportsPartitioning) on a table whose getType() has no registered provider, or relying on a nested metastore that lacks the type.

Common situations: DDL referencing provider types like 'bigquery' or 'pubsub' without registering the corresponding extension provider; tests reusing a metastore that only registered TextTableProvider.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/833a9d4018561ec7. 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:152

   * Fetches a {@link TableProvider} for this type. This provider can exist in the current {@link
   * InMemoryMetaStore} or a nested {@link InMemoryMetaStore}.
   *
   * @param type
   * @return
   */
  public TableProvider getProvider(String type) {
    @Nullable TableProvider provider = providers.get(type.toLowerCase());
    if (provider != null) {
      return provider;
    }

    // check nested InMemoryMetaStore
    provider = providers.get(getTableType());
    if (provider != null && (provider instanceof InMemoryMetaStore)) {
      return ((InMemoryMetaStore) provider).getProvider(type);
    }

    throw new IllegalStateException("No TableProvider registered for table type: " + type);
  }

  @Override
  public AlterTableOps alterTable(String name) {
    if (!tables.containsKey(name)) {
      throw new IllegalArgumentException("No such table: " + name);
    }

    Table table = tables.get(name);
    return getProvider(table.getType()).alterTable(name);
  }
}

View on GitHub (pinned to 12126d8942)