{"record":{"id":"d14058449325b2f5","repo":"pathwaycom/pathway","slug":"schemaregistrysettings-requires-at-least-one-entry","errorCode":null,"errorMessage":"SchemaRegistrySettings requires at least one entry in 'urls'; got an empty list.","messagePattern":"SchemaRegistrySettings requires at least one entry in 'urls'; got an empty list\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/pathway/internals/_io_helpers.py","lineNumber":280,"sourceCode":"    \"\"\"\n\n    urls: list[str]\n    token_authorization: str | None = None\n    username: str | None = None\n    password: str | None = None\n    headers: list[SchemaRegistryHeader] | None = None\n    proxy: str | None = None\n    timeout: datetime.timedelta | None = None\n\n    def __post_init__(self):\n        if not isinstance(self.urls, (list, tuple)):\n            raise TypeError(\n                f\"SchemaRegistrySettings.urls must be a list of strings, \"\n                f\"got {type(self.urls).__name__}. Wrap a single URL in a \"\n                f\"list: urls=['http://...'].\"\n            )\n        if not self.urls:\n            raise ValueError(\n                \"SchemaRegistrySettings requires at least one entry in 'urls'; \"\n                \"got an empty list.\"\n            )\n        for i, url in enumerate(self.urls):\n            if not isinstance(url, str) or not url:\n                raise ValueError(\n                    f\"SchemaRegistrySettings.urls[{i}] must be a non-empty \"\n                    f\"string; got {url!r}.\"\n                )\n        for field_name in (\"token_authorization\", \"username\", \"password\", \"proxy\"):\n            value = getattr(self, field_name)\n            if value is not None and not isinstance(value, str):\n                raise TypeError(\n                    f\"SchemaRegistrySettings.{field_name} must be a str, \"\n                    f\"got {type(value).__name__}.\"\n                )\n        if self.password is not None and self.username is None:\n            raise ValueError(","sourceCodeStart":262,"sourceCodeEnd":298,"githubUrl":"https://github.com/pathwaycom/pathway/blob/fa2f74a4649b7c5908690cf60137263d8d80de5f/python/pathway/internals/_io_helpers.py#L262-L298","documentation":"The Delta table optimizer tracks compaction activity against a specific column (its engine rule), and Delta optimization can only act on partitioned data. Therefore the tracked column must appear in partition_columns, otherwise the optimizer would track nothing useful.","triggerScenarios":"Calling pw.io.deltalake.write(table, uri, partition_columns=[t.a], table_optimizer=SomeOptimizer(tracked_column=t.b)) where the optimizer's tracked column is not among partition_columns (or partition_columns is None/empty).","commonSituations":"User enables an optimizer (e.g. one tracking a timestamp column) but partitions by a different business column, or forgets partitioning entirely while adding the optimizer to speed up reads.","solutions":["Add the optimizer's tracked column to partition_columns, e.g. partition_columns=[t.event_time, ...].","If partitioning by that column is unacceptable (cardinality too high), configure the optimizer to track an existing partition column instead.","Drop table_optimizer if no partition-based optimization is intended."],"exampleFix":"# before\npw.io.deltalake.write(t, uri, partition_columns=[t.tenant], table_optimizer=pw.io.deltalake.DeltalakeCompactionOptimizer(tracked_column=t.event_time))\n\n# after\npw.io.deltalake.write(t, uri, partition_columns=[t.tenant, t.event_time], table_optimizer=pw.io.deltalake.DeltalakeCompactionOptimizer(tracked_column=t.event_time))","handlingStrategy":"validation","validationCode":"if table_optimizer is not None:\n    tracked = table_optimizer.tracked_column.name\n    names = [c._name for c in partition_columns or []]\n    assert tracked in names, (\n        f\"optimizer tracks '{tracked}' but partition_columns={names}\"\n    )\npw.io.deltalake.write(t, uri, partition_columns=partition_columns,\n                      table_optimizer=table_optimizer)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Choose partition_columns and the optimizer's tracked column together, typically the same time column.","Avoid enabling optimizers on unpartitioned writes; compaction only helps partitioned data."],"tags":["pathway","deltalake","optimizer","partitioning","validation"],"backgroundTag":null,"analyzedSha":"fa2f74a4649b7c5908690cf60137263d8d80de5f","analyzedAt":"2026-08-15T01:48:17.006Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}