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
- Register a provider for that type: metaStore.registerProvider(new TextTableProvider());
- Correct the table's TYPE in the DDL to a registered provider type.
- 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
- Register all needed providers immediately after constructing the metastore.
- Keep table TYPE strings aligned with provider getTableType() values.
- Add a startup assertion that each used type resolves via getProvider().
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
- Duplicate table name
- Duplicate table: from provider
- No such table
- No such table
- No TableProvider registered for table type
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)