-- logarchiver archive index schema.
--
-- One row is written per stored S3 object. In-cluster this DDL is owned by the
-- argocd bootstrap Job (a ClickHouse PostSync hook, like the logging stack's
-- clickhouse-schema job); `logarchiver init-schema` applies the same statements
-- for local/dev use, and `logarchiver init-schema --print` emits them.
--
-- Keep this file in sync with internal/index/ddl.go (the source of truth used by
-- init-schema). The database/table names below match the config defaults
-- (database `logs`, table `archive_index`).

CREATE DATABASE IF NOT EXISTS logs;

CREATE TABLE IF NOT EXISTS logs.archive_index
(
    object_key       String,                       -- S3 key of the stored object
    bucket           LowCardinality(String),       -- S3 bucket (e.g. logs-archive)
    subject          LowCardinality(String),       -- NATS subject the batch came from
    hosts            Array(LowCardinality(String)),-- distinct source hosts in the object
    min_ts           DateTime64(3),                -- earliest event time in the object
    max_ts           DateTime64(3),                -- latest event time in the object
    event_count      UInt64,                       -- number of events
    raw_bytes        UInt64,                       -- pre-compression NDJSON bytes
    stored_bytes     UInt64,                       -- stored object bytes (post zstd+encrypt)
    compression      LowCardinality(String),       -- 'zstd'
    cipher           LowCardinality(String),       -- 'AES-256-GCM'
    container_format LowCardinality(String),       -- 'LARC1'
    key_name         LowCardinality(String),       -- Vault GPG engine key name
    key_fingerprint  String,                       -- 40-hex OpenPGP fingerprint (engine %X)
    created_at       DateTime64(3) DEFAULT now64(3),
    INDEX idx_hosts hosts TYPE bloom_filter GRANULARITY 1
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(min_ts)
ORDER BY (subject, min_ts, object_key);
