agricultural-sock-amalysis/spark-processor/database_tables.sql

88 lines
3.8 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.

-- ================================
-- 农业股票数据处理系统 - 扩展表结构
-- 用于存储Spark处理后的分析结果
-- ================================
-- 技术指标数据表
CREATE TABLE IF NOT EXISTS stock_technical_indicators (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
stock_code VARCHAR(10) NOT NULL COMMENT '股票代码',
stock_name VARCHAR(100) NOT NULL COMMENT '股票名称',
trade_date DATE NOT NULL COMMENT '交易日期',
close_price DECIMAL(10,2) COMMENT '收盘价',
ma5 DECIMAL(10,2) COMMENT '5日移动平均',
ma10 DECIMAL(10,2) COMMENT '10日移动平均',
ma20 DECIMAL(10,2) COMMENT '20日移动平均',
ma30 DECIMAL(10,2) COMMENT '30日移动平均',
rsi DECIMAL(5,2) COMMENT 'RSI相对强弱指标',
macd_dif DECIMAL(10,4) COMMENT 'MACD DIF值',
macd_dea DECIMAL(10,4) COMMENT 'MACD DEA值',
bb_upper DECIMAL(10,2) COMMENT '布林带上轨',
bb_middle DECIMAL(10,2) COMMENT '布林带中轨',
bb_lower DECIMAL(10,2) COMMENT '布林带下轨',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='股票技术指标表';
-- 创建索引
CREATE INDEX idx_technical_stock ON stock_technical_indicators(stock_code);
CREATE INDEX idx_technical_date ON stock_technical_indicators(trade_date);
CREATE INDEX idx_technical_stock_date ON stock_technical_indicators(stock_code, trade_date);
-- 行业分析表
CREATE TABLE IF NOT EXISTS industry_analysis (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
industry VARCHAR(50) NOT NULL COMMENT '行业名称',
analysis_date DATE NOT NULL COMMENT '分析日期',
stock_count INT COMMENT '股票数量',
avg_change_percent DECIMAL(5,2) COMMENT '平均涨跌幅',
total_market_cap DECIMAL(15,2) COMMENT '行业总市值',
total_volume BIGINT COMMENT '行业总成交量',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='行业分析表';
-- 创建索引
CREATE INDEX idx_industry_date ON industry_analysis(analysis_date);
CREATE INDEX idx_industry_name ON industry_analysis(industry);
CREATE INDEX idx_industry_date_name ON industry_analysis(analysis_date, industry);
-- 市场趋势表
CREATE TABLE IF NOT EXISTS market_trends (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
trade_date DATE NOT NULL COMMENT '交易日期',
avg_price DECIMAL(10,2) COMMENT '平均价格',
avg_change_percent DECIMAL(5,2) COMMENT '平均涨跌幅',
total_volume BIGINT COMMENT '总成交量',
total_turnover DECIMAL(15,2) COMMENT '总成交额',
stock_count INT COMMENT '股票数量',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场趋势表';
-- 创建索引
CREATE INDEX idx_trends_date ON market_trends(trade_date);
-- 为已有的market_analysis表添加唯一索引防止重复数据
CREATE UNIQUE INDEX idx_market_analysis_date ON market_analysis(analysis_date);
-- ================================
-- 示例查询语句
-- ================================
-- 查询最新的市场分析数据
-- SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1;
-- 查询特定股票的技术指标
-- SELECT * FROM stock_technical_indicators
-- WHERE stock_code = 'sz000876'
-- ORDER BY trade_date DESC LIMIT 30;
-- 查询行业表现排行
-- SELECT industry, avg_change_percent, stock_count
-- FROM industry_analysis
-- WHERE analysis_date = (SELECT MAX(analysis_date) FROM industry_analysis)
-- ORDER BY avg_change_percent DESC;
-- 查询市场趋势
-- SELECT trade_date, avg_change_percent, total_volume
-- FROM market_trends
-- ORDER BY trade_date DESC LIMIT 30;