{"record":{"id":"a56878c4afbd5859","repo":"apache/seatunnel","slug":"fluss-source-does-not-support-partitioned-tables-y","errorCode":null,"errorMessage":"Fluss source does not support partitioned tables yet: %s.%s","messagePattern":"Fluss source does not support partitioned tables yet: (.+?)\\.(.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-fluss/src/main/java/org/apache/seatunnel/connectors/seatunnel/fluss/source/FlussSourceConfig.java","lineNumber":74,"sourceCode":"        this.database = readonlyConfig.get(FlussSourceOptions.DATABASE);\n        this.table = readonlyConfig.get(FlussSourceOptions.TABLE);\n        this.pollTimeoutMs = readonlyConfig.get(FlussSourceOptions.POLL_TIMEOUT_MS);\n        this.startMode = readonlyConfig.get(FlussSourceOptions.START_MODE);\n        TableInfo tableInfo = loadTableInfo();\n        this.catalogTable = toCatalogTable(tableInfo);\n        this.flussRowType = tableInfo.getRowType();\n    }\n\n    private TableInfo loadTableInfo() {\n        try (FlussAdminClient adminClient =\n                new FlussAdminClient(buildFlussConfig(), getTablePath().getFullName())) {\n            return adminClient.getTableInfo(getTablePath());\n        }\n    }\n\n    private CatalogTable toCatalogTable(TableInfo tableInfo) {\n        if (tableInfo.isPartitioned()) {\n            throw new UnsupportedOperationException(\n                    String.format(\n                            \"Fluss source does not support partitioned tables yet: %s.%s\",\n                            database, table));\n        }\n        RowType rowType = tableInfo.getRowType();\n        TableSchema.Builder schemaBuilder = TableSchema.builder();\n        for (DataField field : rowType.getFields()) {\n            DataType fieldType = field.getType();\n            schemaBuilder.column(\n                    PhysicalColumn.of(\n                            field.getName(),\n                            FlussTypeConverter.toSeaTunnelType(field.getName(), fieldType),\n                            FlussTypeConverter.columnLength(fieldType),\n                            FlussTypeConverter.columnScale(fieldType),\n                            fieldType.isNullable(),\n                            null,\n                            field.getDescription().orElse(null)));\n        }","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-fluss/src/main/java/org/apache/seatunnel/connectors/seatunnel/fluss/source/FlussSourceConfig.java#L56-L92","documentation":"The Fluss source connector throws this UnsupportedOperationException during catalog table construction when the target Fluss table is partitioned. Partitioned table reading is not yet implemented in the connector, so it fails fast with the database and table name rather than returning incomplete schema metadata.","triggerScenarios":"FlussSourceConfig.toCatalogTable() calls tableInfo.isPartitioned() on the TableInfo fetched via AdminClient.getTableInfo(getTablePath()); any partitioned Fluss table used as a source triggers the throw during source initialization.","commonSituations":"A developer points a SeaTunnel Fluss source at a table that was created with PARTITION BY (e.g. date-partitioned log tables) and the job fails during startup before any data is read.","solutions":["Use a non-partitioned Fluss table as the source, e.g. a materialized/denormalized copy of the partitioned table","Read from a specific non-partitioned log table or replica that holds the data","Implement/extend the connector to support partitioned tables (handle PartitionInfo in toCatalogTable and split assignment)","Check the Fluss connector release notes for partitioned-table support before upgrading"],"exampleFix":"// before\nsource {\n  Fluss {\n    database = \"mydb\"\n    table = \"events_partitioned\"\n  }\n}\n// after\nsource {\n  Fluss {\n    database = \"mydb\"\n    table = \"events\"   // non-partitioned table\n  }\n}","handlingStrategy":"validation","validationCode":"TableInfo info = adminClient.getTableInfo(TablePath.of(database, table));\nif (info.isPartitioned()) {\n  throw new IllegalArgumentException(\n    \"Configure a non-partitioned Fluss table; partitioned tables are unsupported: \" + database + \".\" + table);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check tableInfo.isPartitioned() before configuring the Fluss source","Maintain non-partitioned mirror tables for SeaTunnel reads","Audit Fluss table DDL (PARTITION BY clauses) before wiring up the connector"],"tags":["unsupported-feature","fluss","partitioned-table","source"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}