pathwaycom/pathway · error · ValueError
Column(s) {reserved_property_columns!r} use a name reserved
Error message
Column(s) {reserved_property_columns!r} use a name reserved by Weaviate ('id' and 'vector' cannot be object properties). Rename the column(s), or pass one as the primary_key / vector argument. What it means
Weaviate reserves the object-level keys `id` and `vector` and rejects them as property names. Pathway encodes the primary key into the UUID and sends the vector separately, so those two column names are legal only for the columns designated as primary_key / vector arguments; any other column named `id` or `vector` would be rejected by Weaviate at runtime. The connector enumerates table.schema.column_names() up front and raises this ValueError listing the offending reserved columns.
Source
Thrown at python/pathway/io/weaviate/__init__.py:143
f"e.g. vector=table.{vector._name}."
)
pk = primary_key._name if primary_key is not None else None
vector_field = vector._name if vector is not None else None
# Weaviate reserves "id" and "vector" as object-level keys and rejects them as
# property names. The primary key (encoded in the UUID) and the vector column
# are never sent as properties, so they may freely use these names; any other
# column that does collides and is reported up front.
reserved_property_columns = [
column_name
for column_name in table.schema.column_names()
if column_name in ("id", "vector")
and column_name != pk
and column_name != vector_field
]
if reserved_property_columns:
raise ValueError(
f"Column(s) {reserved_property_columns!r} use a name reserved by "
f"Weaviate ('id' and 'vector' cannot be object properties). Rename "
f"the column(s), or pass one as the primary_key / vector argument."
)
scheme = "https" if http_secure else "http"
url = f"{scheme}://{http_host}:{http_port}"
data_storage = api.DataStorage(
storage_type="weaviate",
weaviate_params=api.WeaviateParams(
url=url,
collection_name=collection_name,
pk_field=pk,
vector_field=vector_field,
api_key=api_key,
headers=headers,
batch_size=batch_size,View on GitHub (pinned to fa2f74a464)
Solutions
- Rename the offending column before writing: t = t.select(**{('prop_' + c if c in ('id','vector') else c): pw.this[c] for c in t.schema.columns()}).
- Drop it if redundant: t = t.without(pw.this.id).
- Designate the reserved-named column as the primary_key (or vector) argument if it is indeed the key/vector, which makes the name legal.
Example fix
# before
t = pw.debug.table_from_markdown('uuid | id | text')
pw.io.weaviate.write(t, collection_name="Docs", primary_key=t.uuid)
# after
t = t.rename_columns(source_id=pw.this.id)
pw.io.weaviate.write(t, collection_name="Docs", primary_key=t.uuid) Defensive patterns
Strategy: validation
Validate before calling
def check_weaviate_reserved(table, pk=None, vector=None):
hits = [
c for c in table.schema.column_names()
if c in ("id", "vector") and c != pk and c != vector
]
if hits:
raise ValueError(f"reserved property names present: {hits}")
return True Prevention
- Prefix external `id`/`vector` fields at ingest (source_id, raw_vector) when the destination is Weaviate.
- Designate the natural `id` column as the primary_key argument so the reserved name is used legally.
When it happens
Trigger: Calling pw.io.weaviate.write(table, ...) where the schema contains a column named `id` or `vector` that is NOT the column passed as primary_key or vector — e.g. primary_key=t.uuid with a separate t.id column still present, or an unused t.vector column.
Common situations: Source data (CSV/JSON) that already has an `id` field while the user designates a different UUID key; embedding pipelines that store a raw `vector` column alongside the designated vector argument; reusing a generic schema across multiple sinks.
Related errors
- primary_key column {primary_key._name!r} does not belong to
- vector column {vector._name!r} does not belong to the provid
- Column(s) {collisions} collide with the 'time' and 'diff' me
- Failed to install dependencies
- Column {pseudocolumn} has to contain integers only.
AI-assisted analysis of pathwaycom/pathway@fa2f74a464 (2026-08-15).
Data as JSON: /api/errors/0ee2669e9ca7a270.
Report an issue: GitHub.