blob: 495a8bf5f098668fd4b37592fba756507f64272b [file]
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
-- ============================================
-- 1. Connect to the texera_db database
-- ============================================
\c texera_db
SET search_path TO texera_db;
-- ============================================
-- 2. Add the operator_port_cache table
-- ============================================
BEGIN;
-- Caches a materialized output port result so it can be reused across executions.
-- A row is identified by (workflow_id, global_port_id, cache_key_hash), where
-- cache_key_hash is a SHA-256 hash of the upstream sub-DAG that produces the port (its
-- operators, their parameters and exec info, schemas, and wiring). cache_key_hash is the
-- lookup key; cache_key_json is the JSON the hash was computed from, kept so a hash match
-- can be confirmed against the full content (collision safety). A different upstream
-- computation (for example an operator parameter or version change) produces a different
-- cache_key_hash and therefore a new row, so existing entries are never overwritten: each
-- row is the result of one specific computation of one port. tuple_count is the result's
-- row count, kept so the coordinator can report a reused region's output stats without a
-- second query to the Iceberg catalog.
CREATE TABLE IF NOT EXISTS operator_port_cache
(
workflow_id INT NOT NULL,
global_port_id VARCHAR(200) NOT NULL,
cache_key_hash CHAR(64) NOT NULL,
cache_key_json TEXT NOT NULL,
storage_uri TEXT NOT NULL,
tuple_count BIGINT,
source_execution_id BIGINT,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (workflow_id, global_port_id, cache_key_hash),
FOREIGN KEY (workflow_id) REFERENCES workflow(wid) ON DELETE CASCADE
);
COMMIT;