{"record":{"id":"700b5e9491099d63","repo":"apache/beam","slug":"table-type-table-gettype-not-supported","errorCode":null,"errorMessage":"Table type: ${table.getType()} not supported!","messagePattern":"Table type: (.+?) not supported!","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/store/InMemoryMetaStore.java","lineNumber":97,"sourceCode":"\n  @Override\n  public BeamSqlTable buildBeamSqlTable(Table table) {\n    TableProvider provider = getProvider(table.getType());\n\n    return provider.buildBeamSqlTable(table);\n  }\n\n  protected void validateTableType(Table table) {\n    if (providers.containsKey(table.getType().toLowerCase())) {\n      return;\n    }\n    // check if there is a nested metastore that supports this table\n    @Nullable InMemoryMetaStore nestedMemoryMetastore =\n        (InMemoryMetaStore) providers.get(getTableType());\n    if (nestedMemoryMetastore != null) {\n      nestedMemoryMetastore.validateTableType(table);\n    } else {\n      throw new IllegalArgumentException(\"Table type: \" + table.getType() + \" not supported!\");\n    }\n  }\n\n  @Override\n  public void registerProvider(TableProvider provider) {\n    String type = provider.getTableType().toLowerCase();\n    if (providers.containsKey(type)) {\n      throw new IllegalArgumentException(\"Provider is already registered for table type: \" + type);\n    }\n\n    initTablesFromProvider(provider);\n    this.providers.put(type, provider);\n  }\n\n  private void initTablesFromProvider(TableProvider provider) {\n    Map<String, Table> tables = provider.getTables();\n    for (String tableName : tables.keySet()) {\n      if (this.tables.containsKey(tableName)) {","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/store/InMemoryMetaStore.java#L79-L115","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nInMemoryMetaStore metaStore = new InMemoryMetaStore();\nmetaStore.createTable(textTable); // type 'text' unsupported\n// after\nInMemoryMetaStore metaStore = new InMemoryMetaStore();\nmetaStore.registerProvider(new TextTableProvider());\nmetaStore.createTable(textTable);","handlingStrategy":"validation","validationCode":"// ensure providers registered before any createTable\nmetaStore.registerProvider(new TextTableProvider());\n// then create tables","typeGuard":null,"tryCatchPattern":"try {\n  metaStore.createTable(table);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().contains(\"not supported\")) {\n    // register the missing provider and retry once\n  }\n}","preventionTips":["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()."],"tags":["beam-sql","metastore","provider-registration"],"backgroundTag":"unsupported-operation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}