akg-factor-bridge/sql/astock_kg_slot_views.sql

61 lines
3.2 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================================
-- astock-kg 因子插槽接口:只读视图(供 akg-factor-bridge 消费)
-- ----------------------------------------------------------------------------
-- 应用到 astock-kg 的 PostgreSQLakg 库): psql "$AKG_PG_DSN" -f astock_kg_slot_views.sql
-- 只读投影、零新增计算;基座内部表可自由重构,只要这四个视图的列不变,桥不受影响。
-- 幂等CREATE OR REPLACE。列/JSON 键均已从 astock-kg 代码核准(见每条注释出处)。
-- ============================================================================
-- 0) 覆盖池 universe = 全部 industry_pools 成员 ts_code 并集
-- (对齐 market_snapshot._pool_ts_codesmembers 为 JSONB 数组,元素含 ts_code/name
CREATE OR REPLACE VIEW v_factor_universe AS
SELECT DISTINCT m->>'ts_code' AS ts_code
FROM industry_pools p
CROSS JOIN LATERAL jsonb_array_elements(COALESCE(p.members, '[]'::jsonb)) AS m
WHERE m->>'ts_code' IS NOT NULL AND m->>'ts_code' <> '';
-- 1) 一致预期(供 upsideconsensus_daily 全 asof 行投影,桥按 trade_date 做 as-of。
-- 列源market_snapshot._CONSENSUS_DDL。
CREATE OR REPLACE VIEW v_factor_consensus AS
SELECT ts_code,
asof_date,
target_mid_avg,
eps_med,
np_med,
n_orgs,
n_reports_90d
FROM consensus_daily
WHERE target_mid_avg IS NOT NULL;
-- 2) 利好利空事件(供 eventEVENT 断言投影。
-- ts_code 取【文档锚】documents.meta->>'company_ts_code'公告单公司、100% 可靠;
-- claim_store 多处以此为公司锚),不用 claims.subject_id抽取原始名/码、未解析)。
-- event_type / direction / scope 从 qualifiers 取,键名核自 pipeline._event_to_claim
-- qualifiers.event_typeEVENT_TYPES 或 other
-- qualifiers.direction = 预增/预减(业绩预告必填;其余多为空)
-- qualifiers.scope = 累计/单次(回购、增减持)
CREATE OR REPLACE VIEW v_factor_events AS
SELECT d.meta->>'company_ts_code' AS ts_code,
c.disclosure_date,
c.qualifiers->>'event_type' AS event_type,
c.qualifiers->>'direction' AS direction,
c.qualifiers->>'scope' AS scope,
c.confidence,
c.dedup_key
FROM claims c
JOIN documents d ON d.doc_id = c.doc_id
WHERE c.predicate = 'EVENT'
AND d.meta->>'company_ts_code' IS NOT NULL;
-- 3) 板块传导(供 transmissiontransmission_candidates 的未动成员(quiet)摊平成每股一行。
-- 一只股当日可能出现在多个候选(属多个目标环节)→ 多行,桥侧聚合(取最大 n_paths
-- 列源transmission._DDLpaths/quiet 均 JSONBmoved_ratio NUMERIC
CREATE OR REPLACE VIEW v_factor_transmission AS
SELECT t.scan_date,
q->>'ts_code' AS ts_code,
jsonb_array_length(COALESCE(t.paths, '[]'::jsonb)) AS n_paths, -- 指向该环节的传导路径数
t.moved_ratio -- 该环节已动成员比例
FROM transmission_candidates t
CROSS JOIN LATERAL jsonb_array_elements(COALESCE(t.quiet, '[]'::jsonb)) AS q
WHERE q->>'ts_code' IS NOT NULL AND q->>'ts_code' <> '';