Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Reason given by maintainers: deprecated

continuo-python-runtime-trino

Trino (Iceberg connector) runtime-adapter library for Continuo python nodes. Implements continuo_validation_contract.port.RuntimeAdapter (from the published continuo-validation-contract package) and registers itself under entry-point group continuo_runtime.adapters as trino.

Connection env: TRINO_HOST, TRINO_CATALOG (required); TRINO_PORT (default 8080), TRINO_USER (default continuo), TRINO_HTTP_SCHEME (default http), TRINO_PASSWORD (optional; requires TRINO_HTTP_SCHEME=https). Mirrors continuo_validation_trino.adapter.TrinoAdapter.from_env exactly.

No multi-statement transactions

Unlike the postgres runtime adapter, Trino/Iceberg has no multi-statement transactions, so load() cannot be a single atomic TRUNCATE+INSERT. Two atomic-replace primitives were verified live (Trino 483 + Iceberg REST catalog) before choosing one — see the full writeup in continuo_python_runtime_trino/adapter.py's module docstring:

  • CREATE OR REPLACE TABLE t AS SELECT * FROM stage is a single Iceberg metadata commit but silently drops NOT NULL constraints on the replaced table (verified live: a NULL insert into a "NOT NULL" column succeeds afterwards, and this connector/version does not support re-adding NOT NULL via ALTER TABLE ... ALTER COLUMN ... SET NOT NULL). Rejected for this reason.
  • CREATE TABLE stage (LIKE target INCLUDING PROPERTIES) at a fresh sibling Iceberg location + populate + a two-statement ALTER TABLE ... RENAME TO swap preserves the target's exact columns, NOT NULL constraints, partitioning, format, and other connector properties (verified live). This is what load() uses.

The swap's exact atomicity guarantee: nothing under the target name is touched until every row has been inserted into staging, so a failure before the swap begins (e.g. a NOT-NULL-violating row) leaves the prior target contents untouched. The two-statement rename swap itself is not single-statement atomic — there is a brief window between the two renames during which the target name refers to neither table. load() makes a best-effort recovery attempt (rename the private old relation back) if the second rename raises, and best-effort drops only a private staging relation created by that load. If recovery itself fails, the logged private old relation remains available for manual recovery because it contains the original target data.

load() assumes a single writer per table: Continuo's scheduler runs at most one Job per node at a time. Concurrent load() calls against the same table are unsupported because their target renames would race. Each load uses UUID-named private swap relations, so distinct targets cannot collide with each other or with legitimate user tables.

NOT NULL is supported here

Verified live against Trino 483 + the Iceberg REST catalog: NOT NULL column constraints in CREATE TABLE are supported and enforced by INSERT (CONSTRAINT_VIOLATION on a NULL value). ensure_table() emits NOT NULL for nullable=False columns, same as the postgres adapter.

Type-name mapping

The contract's SQL-type grammar (copied verbatim from the postgres adapter, same regex) admits spellings Trino does not recognize as type names: TEXT, DOUBLE PRECISION, NUMERIC(p,s). These are mapped to Trino's own spellings (VARCHAR, DOUBLE, DECIMAL(p,s)) after the grammar guard has already rejected anything injection-shaped. Every other grammar token is valid Trino DDL unchanged.

Identifier quoting

The trino DBAPI has no psycopg2-style sql.Identifier. Catalog, schema, table, and column names are double-quoted by hand, with every embedded double quote doubled. This preserves legal delimited identifiers such as sales-prod, order id, and has"quote without allowing names to escape their quotes.

Verification tier: unit tests are mock-free pure-logic tests (type-grammar validation, type-name mapping, identifier quoting, location derivation, Arrow table construction from rows); DDL/swap behavior (schema/table creation, load-owned swap relations, property and NOT NULL preservation, failure cleanup) is verified against a live Trino 483 + Iceberg REST stack in tests/test_integration_runtime_trino.py.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

continuo_python_runtime_trino-0.1.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

continuo_python_runtime_trino-0.1.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file continuo_python_runtime_trino-0.1.0.tar.gz.

File metadata

File hashes

Hashes for continuo_python_runtime_trino-0.1.0.tar.gz
Algorithm Hash digest
SHA256 36545a0fa42fae3a2b2838b0987d68badd72dd0b214b78922d659c0fa44857a5
MD5 10c0d3e7e8926578276d417d072839f9
BLAKE2b-256 fb7940807e867f2f52b8d2229fba0c7de57dbd54aa55593f2992d2413df047cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for continuo_python_runtime_trino-0.1.0.tar.gz:

Publisher: publish-pypi.yml on carolsimone/continuo-python-runtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file continuo_python_runtime_trino-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for continuo_python_runtime_trino-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1e37015bae7b0cd712d9b3d5119c8934cde1859b76443320fa23667104927c5
MD5 1a9da14532eb3b73523a33ce58aad036
BLAKE2b-256 741828689396edff2ba224eefc5540a99a9cd1c840766ce5a4ee9a7f1edabd1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for continuo_python_runtime_trino-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on carolsimone/continuo-python-runtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page