Files
Aether/crates/aether-data/schema/drivers/mysql/baseline/006_usage.sql
2026-05-06 03:09:53 +08:00

266 lines
9.7 KiB
SQL

CREATE TABLE IF NOT EXISTS `usage` (
request_id VARCHAR(128) PRIMARY KEY,
id VARCHAR(128),
user_id VARCHAR(64),
api_key_id VARCHAR(64),
provider_name VARCHAR(255) NOT NULL DEFAULT 'unknown',
model VARCHAR(255) NOT NULL DEFAULT 'unknown',
target_model VARCHAR(255),
provider_id VARCHAR(64),
provider_endpoint_id VARCHAR(64),
provider_api_key_id VARCHAR(64),
request_type VARCHAR(64),
api_format VARCHAR(64),
api_family VARCHAR(64),
endpoint_kind VARCHAR(64),
endpoint_api_format VARCHAR(64),
provider_api_family VARCHAR(64),
provider_endpoint_kind VARCHAR(64),
has_format_conversion TINYINT(1) NOT NULL DEFAULT 0,
is_stream TINYINT(1) NOT NULL DEFAULT 0,
upstream_is_stream TINYINT(1),
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_input_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_ephemeral_5m_input_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_ephemeral_1h_input_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_input_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_cost_usd DOUBLE NOT NULL DEFAULT 0,
cache_read_cost_usd DOUBLE NOT NULL DEFAULT 0,
output_price_per_1m DOUBLE,
status_code INT,
error_message TEXT,
error_category VARCHAR(255),
response_time_ms BIGINT,
first_byte_time_ms BIGINT,
wallet_id VARCHAR(64),
status VARCHAR(64) NOT NULL DEFAULT 'completed',
billing_status VARCHAR(64) NOT NULL DEFAULT 'pending',
total_cost_usd DOUBLE NOT NULL DEFAULT 0,
actual_total_cost_usd DOUBLE NOT NULL DEFAULT 0,
request_metadata TEXT,
candidate_id VARCHAR(128),
candidate_index BIGINT,
key_name VARCHAR(255),
planner_kind VARCHAR(64),
route_family VARCHAR(128),
route_kind VARCHAR(128),
execution_path VARCHAR(128),
local_execution_runtime_miss_reason VARCHAR(255),
wallet_balance_before DOUBLE,
wallet_balance_after DOUBLE,
wallet_recharge_balance_before DOUBLE,
wallet_recharge_balance_after DOUBLE,
wallet_gift_balance_before DOUBLE,
wallet_gift_balance_after DOUBLE,
finalized_at BIGINT,
created_at_unix_ms BIGINT NOT NULL DEFAULT 0,
updated_at_unix_secs BIGINT NOT NULL DEFAULT 0,
KEY usage_api_key_id_idx (api_key_id),
KEY usage_billing_status_idx (billing_status),
KEY usage_created_at_idx (created_at_unix_ms),
KEY usage_provider_api_key_id_idx (provider_api_key_id),
KEY usage_provider_id_idx (provider_id),
KEY usage_request_id_idx (request_id),
KEY usage_user_id_idx (user_id),
KEY usage_wallet_id_idx (wallet_id)
);
CREATE TABLE IF NOT EXISTS usage_settlement_snapshots (
request_id VARCHAR(128) PRIMARY KEY,
billing_status VARCHAR(64) NOT NULL,
wallet_id VARCHAR(64),
wallet_balance_before DOUBLE,
wallet_balance_after DOUBLE,
wallet_recharge_balance_before DOUBLE,
wallet_recharge_balance_after DOUBLE,
wallet_gift_balance_before DOUBLE,
wallet_gift_balance_after DOUBLE,
provider_monthly_used_usd DOUBLE,
finalized_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
KEY usage_settlement_snapshots_billing_status_idx (billing_status),
KEY usage_settlement_snapshots_wallet_id_idx (wallet_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_hour (hour_utc)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user (hour_utc, user_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user_model (hour_utc, user_id, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_model (hour_utc, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_provider (hour_utc, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
fallback_count BIGINT NOT NULL DEFAULT 0,
unique_models BIGINT NOT NULL DEFAULT 0,
unique_providers BIGINT NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_date (`date`)
);
CREATE TABLE IF NOT EXISTS stats_daily_model (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_model (`date`, model)
);
CREATE TABLE IF NOT EXISTS stats_daily_provider (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_provider (`date`, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
id VARCHAR(64) PRIMARY KEY,
api_key_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
api_key_name VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_api_key (`date`, api_key_id)
);
CREATE TABLE IF NOT EXISTS stats_daily_error (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
error_category VARCHAR(255) NOT NULL,
provider_name VARCHAR(255),
model VARCHAR(255),
count BIGINT NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_error (`date`, error_category, provider_name, model)
);
CREATE TABLE IF NOT EXISTS stats_user_daily (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
username VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_user_daily (`date`, user_id)
);