Files
2026-07-13 13:05:14 +08:00

79 lines
2.6 KiB
Python

from __future__ import annotations
from typing import TYPE_CHECKING
import pyarrow as pa
import pytest
if TYPE_CHECKING:
import pathlib
from rerun.catalog import CatalogClient
from e2e_redap_tests.conftest import EntryFactory, PrefilledCatalog
@pytest.mark.local_only
def test_create_table(entry_factory: EntryFactory, tmp_path: pathlib.Path) -> None:
table_name = "created_table"
original_schema = pa.schema([("int64", pa.int64()), ("float32", pa.float32()), ("utf8", pa.utf8())])
table_entry = entry_factory.create_table(table_name, original_schema, tmp_path.absolute().as_uri())
df = table_entry.reader()
returned_schema = df.schema().remove_metadata()
assert returned_schema == original_schema
@pytest.mark.local_only
def test_create_table_from_dataset(prefilled_catalog: PrefilledCatalog, tmp_path: pathlib.Path) -> None:
table_name = "dataset_to_table"
df = prefilled_catalog.prefilled_dataset.reader(index="time_1")
original_schema = df.schema()
table_entry = prefilled_catalog.factory.create_table(table_name, original_schema, tmp_path.absolute().as_uri())
df = table_entry.reader()
# Due to https://github.com/lance-format/lance/issues/2304 we cannot
# directly compare the returned schema. Verify we at least
# get back the same columns and metadata
returned_schema = df.schema()
for field in returned_schema:
assert original_schema.field(field.name) is not None
for field in original_schema:
assert returned_schema.field(field.name) is not None
for returned_field in returned_schema:
original_field = original_schema.field(returned_field.name)
assert returned_field.metadata == original_field.metadata
def test_create_table_in_custom_schema(catalog_client: CatalogClient) -> None:
table_name = "my_catalog.my_schema.created_table"
original_schema = pa.schema([("int64", pa.int64()), ("float32", pa.float32()), ("utf8", pa.utf8())])
table_entry = catalog_client.create_table(table_name, original_schema)
try:
df = catalog_client.ctx.catalog("my_catalog").schema("my_schema").table("created_table")
returned_schema = df.schema.remove_metadata()
assert returned_schema == original_schema
finally:
table_entry.delete()
def test_create_table_invalid_name(entry_factory: EntryFactory) -> None:
table_name = "created-table"
schema = pa.schema([("int64", pa.int64()), ("float32", pa.float32()), ("utf8", pa.utf8())])
with pytest.raises(
ValueError,
match="sql parser error: Unexpected token in identifier: -",
):
_ = entry_factory.create_table(table_name, schema)