Files
data-engine/sql/05_unit_report_tables.sql
2026-04-30 13:45:41 +08:00

208 lines
12 KiB
SQL

-- Unit Report Tables (单元报告表)
-- =============================================
-- 单元报告明细表 (unit_report_detail)
-- =============================================
CREATE SEQUENCE IF NOT EXISTS unit_report_detail_id_seq;
CREATE TABLE IF NOT EXISTS unit_report_detail (
id BIGINT NOT NULL DEFAULT nextval('unit_report_detail_id_seq'::regclass),
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) DEFAULT '',
created_at TIMESTAMP WITH TIME ZONE DEFAULT '0001-01-01 00:00:00+00:00',
updater VARCHAR(64) DEFAULT '',
updated_at TIMESTAMP WITH TIME ZONE DEFAULT '0001-01-01 00:00:00+00:00',
deleted_at TIMESTAMP WITH TIME ZONE,
cid VARCHAR(64) NOT NULL DEFAULT '',
campaign_id VARCHAR(64) NOT NULL DEFAULT '',
adgroup_id VARCHAR(64) NOT NULL DEFAULT '',
adgroup_name VARCHAR(255) NOT NULL DEFAULT '',
marketing_target_id VARCHAR(64) NOT NULL DEFAULT '',
marketing_target_name VARCHAR(255) NOT NULL DEFAULT '',
placement_type VARCHAR(32) NOT NULL DEFAULT '',
inventory_type VARCHAR(32) NOT NULL DEFAULT '',
campaign_budget DECIMAL(20,6) NOT NULL DEFAULT 0,
adgroup_budget DECIMAL(20,6) NOT NULL DEFAULT 0,
bid_mode VARCHAR(32) NOT NULL DEFAULT '',
bid_amount DECIMAL(20,6) NOT NULL DEFAULT 0,
impression DECIMAL(20,6) NOT NULL DEFAULT 0,
click DECIMAL(20,6) NOT NULL DEFAULT 0,
cost DECIMAL(20,6) NOT NULL DEFAULT 0,
ctr DECIMAL(20,8) NOT NULL DEFAULT 0,
cpc DECIMAL(20,8) NOT NULL DEFAULT 0,
cpm DECIMAL(20,8) NOT NULL DEFAULT 0,
conversion DECIMAL(20,6) NOT NULL DEFAULT 0,
conversion_rate DECIMAL(20,8) NOT NULL DEFAULT 0,
cpp DECIMAL(20,8) NOT NULL DEFAULT 0,
primary_url VARCHAR(1024) NOT NULL DEFAULT '',
video_play_count DECIMAL(20,6) NOT NULL DEFAULT 0,
video_play_uv DECIMAL(20,6) NOT NULL DEFAULT 0,
avg_video_play_duration DECIMAL(20,6) NOT NULL DEFAULT 0,
video_interaction_count DECIMAL(20,6) NOT NULL DEFAULT 0,
tweet_engage_count DECIMAL(20,6) NOT NULL DEFAULT 0,
tweet_share_count DECIMAL(20,6) NOT NULL DEFAULT 0,
tweet_comment_count DECIMAL(20,6) NOT NULL DEFAULT 0,
tweet_like_count DECIMAL(20,6) NOT NULL DEFAULT 0,
tweet_repost_count DECIMAL(20,6) NOT NULL DEFAULT 0,
game_download_count DECIMAL(20,6) NOT NULL DEFAULT 0,
app_download_count DECIMAL(20,6) NOT NULL DEFAULT 0,
app_install_count DECIMAL(20,6) NOT NULL DEFAULT 0,
onsite_leads_count DECIMAL(20,6) NOT NULL DEFAULT 0,
deep_convert_count DECIMAL(20,6) NOT NULL DEFAULT 0,
deep_convert_rate DECIMAL(20,8) NOT NULL DEFAULT 0,
deep_convert_cost DECIMAL(20,8) NOT NULL DEFAULT 0,
day VARCHAR(10) NOT NULL DEFAULT '',
datasource VARCHAR(64) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);
COMMENT ON TABLE unit_report_detail IS '单元报告明细表';
COMMENT ON COLUMN unit_report_detail.id IS '主键ID';
COMMENT ON COLUMN unit_report_detail.tenant_id IS '租户ID';
COMMENT ON COLUMN unit_report_detail.creator IS '创建人';
COMMENT ON COLUMN unit_report_detail.created_at IS '创建时间';
COMMENT ON COLUMN unit_report_detail.updater IS '更新人';
COMMENT ON COLUMN unit_report_detail.updated_at IS '更新时间';
COMMENT ON COLUMN unit_report_detail.deleted_at IS '软删除时间';
COMMENT ON COLUMN unit_report_detail.cid IS '广告账户ID';
COMMENT ON COLUMN unit_report_detail.campaign_id IS '广告系列ID';
COMMENT ON COLUMN unit_report_detail.adgroup_id IS '广告组ID';
COMMENT ON COLUMN unit_report_detail.adgroup_name IS '广告组名称';
COMMENT ON COLUMN unit_report_detail.marketing_target_id IS '营销标的ID';
COMMENT ON COLUMN unit_report_detail.marketing_target_name IS '营销标的名称';
COMMENT ON COLUMN unit_report_detail.placement_type IS '投放版位';
COMMENT ON COLUMN unit_report_detail.inventory_type IS '投放位置';
COMMENT ON COLUMN unit_report_detail.campaign_budget IS '广告系列预算';
COMMENT ON COLUMN unit_report_detail.adgroup_budget IS '广告组预算';
COMMENT ON COLUMN unit_report_detail.bid_mode IS '出价方式';
COMMENT ON COLUMN unit_report_detail.bid_amount IS '出价/代理出价';
COMMENT ON COLUMN unit_report_detail.impression IS '展示数';
COMMENT ON COLUMN unit_report_detail.click IS '点击数';
COMMENT ON COLUMN unit_report_detail.cost IS '花费(元)';
COMMENT ON COLUMN unit_report_detail.ctr IS '点击率';
COMMENT ON COLUMN unit_report_detail.cpc IS '平均点击价格';
COMMENT ON COLUMN unit_report_detail.cpm IS '千次展现成本';
COMMENT ON COLUMN unit_report_detail.conversion IS '转化数';
COMMENT ON COLUMN unit_report_detail.conversion_rate IS '转化率';
COMMENT ON COLUMN unit_report_detail.cpp IS '单次转化成本';
COMMENT ON COLUMN unit_report_detail.primary_url IS '落地页URL';
COMMENT ON COLUMN unit_report_detail.video_play_count IS '视频播放次数';
COMMENT ON COLUMN unit_report_detail.video_play_uv IS '视频播放人数';
COMMENT ON COLUMN unit_report_detail.avg_video_play_duration IS '平均播放时长(秒)';
COMMENT ON COLUMN unit_report_detail.video_interaction_count IS '视频互动数';
COMMENT ON COLUMN unit_report_detail.tweet_engage_count IS '推文参与数';
COMMENT ON COLUMN unit_report_detail.tweet_share_count IS '推文分享数';
COMMENT ON COLUMN unit_report_detail.tweet_comment_count IS '推文评论数';
COMMENT ON COLUMN unit_report_detail.tweet_like_count IS '推文点赞数';
COMMENT ON COLUMN unit_report_detail.tweet_repost_count IS '推文转发数';
COMMENT ON COLUMN unit_report_detail.game_download_count IS '游戏下载数';
COMMENT ON COLUMN unit_report_detail.app_download_count IS '应用下载数';
COMMENT ON COLUMN unit_report_detail.app_install_count IS '应用安装数';
COMMENT ON COLUMN unit_report_detail.onsite_leads_count IS '预注册数';
COMMENT ON COLUMN unit_report_detail.deep_convert_count IS '深度转化数';
COMMENT ON COLUMN unit_report_detail.deep_convert_rate IS '深度转化率';
COMMENT ON COLUMN unit_report_detail.deep_convert_cost IS '深度转化成本';
COMMENT ON COLUMN unit_report_detail.day IS '数据日期';
COMMENT ON COLUMN unit_report_detail.datasource IS '数据源';
CREATE INDEX idx_unit_report_detail_cid ON unit_report_detail(tenant_id, cid);
CREATE INDEX idx_unit_report_detail_campaign_id ON unit_report_detail(tenant_id, campaign_id);
CREATE INDEX idx_unit_report_detail_adgroup_id ON unit_report_detail(tenant_id, adgroup_id);
CREATE INDEX idx_unit_report_detail_day ON unit_report_detail(tenant_id, day);
CREATE INDEX idx_unit_report_detail_datasource ON unit_report_detail(tenant_id, datasource);
-- =============================================
-- 单元报告汇总表 (unit_report_sum)
-- =============================================
CREATE SEQUENCE IF NOT EXISTS unit_report_sum_id_seq;
CREATE TABLE IF NOT EXISTS unit_report_sum (
id BIGINT NOT NULL DEFAULT nextval('unit_report_sum_id_seq'::regclass),
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) DEFAULT '',
created_at TIMESTAMP WITH TIME ZONE DEFAULT '0001-01-01 00:00:00+00:00',
updater VARCHAR(64) DEFAULT '',
updated_at TIMESTAMP WITH TIME ZONE DEFAULT '0001-01-01 00:00:00+00:00',
deleted_at TIMESTAMP WITH TIME ZONE,
cid VARCHAR(64) NOT NULL DEFAULT '',
campaign_id VARCHAR(64) NOT NULL DEFAULT '',
adgroup_id VARCHAR(64) NOT NULL DEFAULT '',
adgroup_name VARCHAR(255) NOT NULL DEFAULT '',
marketing_target_id VARCHAR(64) NOT NULL DEFAULT '',
marketing_target_name VARCHAR(255) NOT NULL DEFAULT '',
placement_type VARCHAR(32) NOT NULL DEFAULT '',
inventory_type VARCHAR(32) NOT NULL DEFAULT '',
impression DECIMAL(20,6) NOT NULL DEFAULT 0,
click DECIMAL(20,6) NOT NULL DEFAULT 0,
cost DECIMAL(20,6) NOT NULL DEFAULT 0,
ctr DECIMAL(20,8) NOT NULL DEFAULT 0,
cpc DECIMAL(20,8) NOT NULL DEFAULT 0,
cpm DECIMAL(20,8) NOT NULL DEFAULT 0,
conversion DECIMAL(20,6) NOT NULL DEFAULT 0,
conversion_rate DECIMAL(20,8) NOT NULL DEFAULT 0,
cpp DECIMAL(20,8) NOT NULL DEFAULT 0,
video_play_count DECIMAL(20,6) NOT NULL DEFAULT 0,
video_play_uv DECIMAL(20,6) NOT NULL DEFAULT 0,
avg_video_play_duration DECIMAL(20,6) NOT NULL DEFAULT 0,
video_interaction_count DECIMAL(20,6) NOT NULL DEFAULT 0,
game_download_count DECIMAL(20,6) NOT NULL DEFAULT 0,
app_download_count DECIMAL(20,6) NOT NULL DEFAULT 0,
app_install_count DECIMAL(20,6) NOT NULL DEFAULT 0,
onsite_leads_count DECIMAL(20,6) NOT NULL DEFAULT 0,
deep_convert_count DECIMAL(20,6) NOT NULL DEFAULT 0,
deep_convert_rate DECIMAL(20,8) NOT NULL DEFAULT 0,
deep_convert_cost DECIMAL(20,8) NOT NULL DEFAULT 0,
hour VARCHAR(2) NOT NULL DEFAULT '',
day VARCHAR(10) NOT NULL DEFAULT '',
datasource VARCHAR(64) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);
COMMENT ON TABLE unit_report_sum IS '单元报告汇总表';
COMMENT ON COLUMN unit_report_sum.id IS '主键ID';
COMMENT ON COLUMN unit_report_sum.tenant_id IS '租户ID';
COMMENT ON COLUMN unit_report_sum.creator IS '创建人';
COMMENT ON COLUMN unit_report_sum.created_at IS '创建时间';
COMMENT ON COLUMN unit_report_sum.updater IS '更新人';
COMMENT ON COLUMN unit_report_sum.updated_at IS '更新时间';
COMMENT ON COLUMN unit_report_sum.deleted_at IS '软删除时间';
COMMENT ON COLUMN unit_report_sum.cid IS '广告账户ID';
COMMENT ON COLUMN unit_report_sum.campaign_id IS '广告系列ID';
COMMENT ON COLUMN unit_report_sum.adgroup_id IS '广告组ID';
COMMENT ON COLUMN unit_report_sum.adgroup_name IS '广告组名称';
COMMENT ON COLUMN unit_report_sum.marketing_target_id IS '营销标的ID';
COMMENT ON COLUMN unit_report_sum.marketing_target_name IS '营销标的名称';
COMMENT ON COLUMN unit_report_sum.placement_type IS '投放版位';
COMMENT ON COLUMN unit_report_sum.inventory_type IS '投放位置';
COMMENT ON COLUMN unit_report_sum.impression IS '展示数';
COMMENT ON COLUMN unit_report_sum.click IS '点击数';
COMMENT ON COLUMN unit_report_sum.cost IS '花费(元)';
COMMENT ON COLUMN unit_report_sum.ctr IS '点击率';
COMMENT ON COLUMN unit_report_sum.cpc IS '平均点击价格';
COMMENT ON COLUMN unit_report_sum.cpm IS '千次展现成本';
COMMENT ON COLUMN unit_report_sum.conversion IS '转化数';
COMMENT ON COLUMN unit_report_sum.conversion_rate IS '转化率';
COMMENT ON COLUMN unit_report_sum.cpp IS '单次转化成本';
COMMENT ON COLUMN unit_report_sum.video_play_count IS '视频播放次数';
COMMENT ON COLUMN unit_report_sum.video_play_uv IS '视频播放人数';
COMMENT ON COLUMN unit_report_sum.avg_video_play_duration IS '平均播放时长(秒)';
COMMENT ON COLUMN unit_report_sum.video_interaction_count IS '视频互动数';
COMMENT ON COLUMN unit_report_sum.game_download_count IS '游戏下载数';
COMMENT ON COLUMN unit_report_sum.app_download_count IS '应用下载数';
COMMENT ON COLUMN unit_report_sum.app_install_count IS '应用安装数';
COMMENT ON COLUMN unit_report_sum.onsite_leads_count IS '预注册数';
COMMENT ON COLUMN unit_report_sum.deep_convert_count IS '深度转化数';
COMMENT ON COLUMN unit_report_sum.deep_convert_rate IS '深度转化率';
COMMENT ON COLUMN unit_report_sum.deep_convert_cost IS '深度转化成本';
COMMENT ON COLUMN unit_report_sum.hour IS '数据小时';
COMMENT ON COLUMN unit_report_sum.day IS '数据日期';
COMMENT ON COLUMN unit_report_sum.datasource IS '数据源';
CREATE INDEX idx_unit_report_sum_cid ON unit_report_sum(tenant_id, cid);
CREATE INDEX idx_unit_report_sum_campaign_id ON unit_report_sum(tenant_id, campaign_id);
CREATE INDEX idx_unit_report_sum_adgroup_id ON unit_report_sum(tenant_id, adgroup_id);
CREATE INDEX idx_unit_report_sum_day ON unit_report_sum(tenant_id, day);
CREATE INDEX idx_unit_report_sum_hour ON unit_report_sum(tenant_id, hour);
CREATE INDEX idx_unit_report_sum_datasource ON unit_report_sum(tenant_id, datasource);
CREATE UNIQUE INDEX idx_unit_report_sum_unique ON unit_report_sum(tenant_id, adgroup_id, hour, day, datasource);