{"record":{"id":"996a3f73146d7a13","repo":"risingwavelabs/risingwave","slug":"alter-table-set-source-rate-limit-is-not-supported","errorCode":null,"errorMessage":"ALTER TABLE SET SOURCE RATE LIMIT is not supported for iceberg table: {}.{}","messagePattern":"ALTER TABLE SET SOURCE RATE LIMIT is not supported for iceberg table: (.+?)\\.(.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/frontend/src/handler/mod.rs","lineNumber":1797,"sourceCode":"        }\n        AlterTableOperation::SetBackfillParallelism { .. } => {\n            bail!(\n                \"ALTER TABLE SET BACKFILL PARALLELISM is not supported for iceberg table: {}.{}\",\n                schema_name,\n                table_name\n            );\n        }\n        AlterTableOperation::RefreshSchema => {\n            bail!(\n                \"ALTER TABLE REFRESH SCHEMA is not supported for iceberg table: {}.{}\",\n                schema_name,\n                table_name\n            );\n        }\n        AlterTableOperation::AlterRateLimit(rate_limit)\n            if rate_limit.rate_limit_type == AlterRateLimitType::Source =>\n        {\n            bail!(\n                \"ALTER TABLE SET SOURCE RATE LIMIT is not supported for iceberg table: {}.{}\",\n                schema_name,\n                table_name\n            );\n        }\n        AlterTableOperation::AlterWatermark { .. } => {\n            bail!(\n                \"ALTER TABLE ALTER WATERMARK is not supported for iceberg table: {}.{}\",\n                schema_name,\n                table_name\n            );\n        }\n        _ => {}\n    }\n    Ok(())\n}\n","sourceCodeStart":1779,"sourceCodeEnd":1814,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/frontend/src/handler/mod.rs#L1779-L1814","documentation":"Setting a source rate limit (`ALTER TABLE ... ALTER ... RATE LIMIT` with rate_limit_type = Source) is rejected for Iceberg-backed tables. Rate limiting applies to sources pulling from external systems; Iceberg table sources do not support this tuning knob.","triggerScenarios":"Executing `ALTER TABLE <iceberg_table> ALTER <col?> SET/RESET SOURCE RATE LIMIT ...` where rate_limit.rate_limit_type == Source on an Iceberg-backed table.","commonSituations":"Throttling ingestion from a busy source; cost-control runbooks that set source rate limits across all tables.","solutions":["Do not set source rate limits on Iceberg tables; remove the statement from the runbook.","Control read throughput on the Iceberg/catalog side instead.","Recreate the table/source with the desired rate limit configured at creation if the connector supports it."],"exampleFix":"// before\nALTER TABLE iceberg_t ALTER SOURCE SET RATE LIMIT = 100;\n// after\n-- rate limiting unsupported for iceberg tables; omit the statement","handlingStrategy":"validation","validationCode":"-- Skip source rate limit changes for iceberg tables\nSELECT relation_kind FROM rw_catalog.rw_relations WHERE name = 't';\n-- only apply rate limits to supported source types","typeGuard":"fn is_source_rate_limit(op: &AlterTableOperation) -> bool {\n    matches!(op, AlterTableOperation::AlterRateLimit(r)\n        if r.rate_limit_type == AlterRateLimitType::Source)\n}","tryCatchPattern":"match client.alter_table_rate_limit(table, limit).await {\n    Err(e) if e.message().contains(\"SET SOURCE RATE LIMIT is not supported for iceberg\") => {\n        // control throughput on the Iceberg/catalog side instead\n    }\n    other => other?,\n}","preventionTips":["Do not include Iceberg tables in source-rate-limit automation.","Throttle Iceberg ingestion via external tooling if needed.","Check relation type before rate-limit ALTERs."],"tags":["sql","iceberg","rate-limit","unsupported-operation"],"backgroundTag":"operation-not-supported","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}