From 92dbec1f95d43364e331205c3fd085543bfec686 Mon Sep 17 00:00:00 2001 From: Ryan Green Date: Mon, 17 Nov 2025 13:18:20 -0330 Subject: [PATCH] fix: convert schema metadata to strings for JsonArrowSchema (#2786) Fixes pydantic validation errors when creating materialized views with namespace. ``` > return JsonArrowSchema(fields=fields, metadata=schema.metadata) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E pydantic_core._pydantic_core.ValidationError: 4 validation errors for JsonArrowSchema E metadata.b'geneva::view::query' E Input should be a valid string [type=string_type, input_value=b'{"base":{"vector_column...t-image:latest\\"}"}}]}', input_type=bytes] E For further information visit https://errors.pydantic.dev/2.12/v/string_type ``` --- python/python/lancedb/namespace.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/python/python/lancedb/namespace.py b/python/python/lancedb/namespace.py index 2085c90a..0825a3cc 100644 --- a/python/python/lancedb/namespace.py +++ b/python/python/lancedb/namespace.py @@ -99,7 +99,14 @@ def _convert_pyarrow_schema_to_json(schema: pa.Schema) -> JsonArrowSchema: ) fields.append(json_field) - return JsonArrowSchema(fields=fields, metadata=schema.metadata) + # decode binary metadata to strings for JSON + meta = None + if schema.metadata: + meta = { + k.decode("utf-8"): v.decode("utf-8") for k, v in schema.metadata.items() + } + + return JsonArrowSchema(fields=fields, metadata=meta) class LanceNamespaceStorageOptionsProvider(StorageOptionsProvider):