通过 OpenRouter 发出一次 API 请求,然后查询 Snowflake 表以确认已收到该追踪。
查询示例
按模型分析费用
Copy
SELECT DATE_TRUNC('day', TIMESTAMP) as day, MODEL, SUM(TOTAL_COST) as total_cost, SUM(TOTAL_TOKENS) as total_tokens, COUNT(*) as request_countFROM OPENROUTER_TRACESWHERE TIMESTAMP >= DATEADD(day, -30, CURRENT_TIMESTAMP()) AND STATUS = 'ok' AND SPAN_TYPE = 'GENERATION'GROUP BY day, MODELORDER BY day DESC, total_cost DESC;
用户活动分析
Copy
SELECT USER_ID, COUNT(DISTINCT TRACE_ID) as trace_count, COUNT(DISTINCT SESSION_ID) as session_count, SUM(TOTAL_TOKENS) as total_tokens, SUM(TOTAL_COST) as total_cost, AVG(DURATION_MS) as avg_duration_msFROM OPENROUTER_TRACESWHERE TIMESTAMP >= DATEADD(day, -7, CURRENT_TIMESTAMP()) AND SPAN_TYPE = 'GENERATION'GROUP BY USER_IDORDER BY total_cost DESC;
错误分析
Copy
SELECT TRACE_ID, TIMESTAMP, MODEL, LEVEL, FINISH_REASON, METADATA as user_metadata, INPUT, OUTPUTFROM OPENROUTER_TRACESWHERE STATUS = 'error' AND TIMESTAMP >= DATEADD(hour, -1, CURRENT_TIMESTAMP())ORDER BY TIMESTAMP DESC;
模型服务提供商性能对比
Copy
SELECT PROVIDER_NAME, MODEL, AVG(DURATION_MS) as avg_duration_ms, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY DURATION_MS) as p50_duration_ms, PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY DURATION_MS) as p95_duration_ms, COUNT(*) as request_countFROM OPENROUTER_TRACESWHERE TIMESTAMP >= DATEADD(day, -7, CURRENT_TIMESTAMP()) AND STATUS = 'ok' AND SPAN_TYPE = 'GENERATION'GROUP BY PROVIDER_NAME, MODELHAVING request_count >= 10ORDER BY avg_duration_ms;
按 API 密钥统计用量
Copy
SELECT API_KEY_NAME, COUNT(DISTINCT TRACE_ID) as trace_count, SUM(TOTAL_COST) as total_cost, SUM(PROMPT_TOKENS) as prompt_tokens, SUM(COMPLETION_TOKENS) as completion_tokensFROM OPENROUTER_TRACESWHERE TIMESTAMP >= DATEADD(day, -30, CURRENT_TIMESTAMP()) AND SPAN_TYPE = 'GENERATION'GROUP BY API_KEY_NAMEORDER BY total_cost DESC;
访问 VARIANT 列
Copy
SELECT TRACE_ID, METADATA:custom_field::STRING as custom_value, ATTRIBUTES:"gen_ai.request.model"::STRING as requested_modelFROM OPENROUTER_TRACESWHERE METADATA:custom_field IS NOT NULL;
解析输入消息
Copy
SELECT TRACE_ID, INPUT:messages[0]:role::STRING as first_message_role, INPUT:messages[0]:content::STRING as first_message_contentFROM OPENROUTER_TRACESWHERE SPAN_TYPE = 'GENERATION';
SELECT TRACE_ID, METADATA:department::STRING as department, METADATA:quarter::STRING as quarter, METADATA:model_version::STRING as model_version, TOTAL_COST, TOTAL_TOKENSFROM OPENROUTER_TRACESWHERE METADATA:department IS NOT NULL AND SPAN_TYPE = 'GENERATION'ORDER BY TIMESTAMP DESC;