61 lines
3.2 KiB
MySQL
61 lines
3.2 KiB
MySQL
|
|
-- ============================================================================
|
|||
|
|
-- astock-kg 因子插槽接口:只读视图(供 akg-factor-bridge 消费)
|
|||
|
|
-- ----------------------------------------------------------------------------
|
|||
|
|
-- 应用到 astock-kg 的 PostgreSQL(akg 库): 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_codes;members 为 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) 一致预期(供 upside):consensus_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) 利好利空事件(供 event):EVENT 断言投影。
|
|||
|
|
-- ts_code 取【文档锚】documents.meta->>'company_ts_code'(公告单公司、100% 可靠;
|
|||
|
|
-- claim_store 多处以此为公司锚),不用 claims.subject_id(抽取原始名/码、未解析)。
|
|||
|
|
-- event_type / direction / scope 从 qualifiers 取,键名核自 pipeline._event_to_claim:
|
|||
|
|
-- qualifiers.event_type(EVENT_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) 板块传导(供 transmission):transmission_candidates 的未动成员(quiet)摊平成每股一行。
|
|||
|
|
-- 一只股当日可能出现在多个候选(属多个目标环节)→ 多行,桥侧聚合(取最大 n_paths)。
|
|||
|
|
-- 列源:transmission._DDL(paths/quiet 均 JSONB,moved_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' <> '';
|