CREATE SCHEMA IF NOT EXISTS billiards_dwd;
SET search_path TO billiards_dwd;

CREATE EXTENSION IF NOT EXISTS btree_gist;

DO $$
DECLARE
    rec RECORD;
BEGIN
    FOR rec IN
        SELECT table_name
        FROM information_schema.columns
        WHERE table_schema = 'billiards_dwd'
          AND column_name = 'scd2_start_time'
    LOOP
        EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_start_time SET DEFAULT now()', rec.table_name);
        EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_end_time SET DEFAULT ''9999-12-31''', rec.table_name);
        EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_is_current SET DEFAULT 1', rec.table_name);
        EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_version SET DEFAULT 1', rec.table_name);

    END LOOP;

    FOR rec IN (
        SELECT tc.table_name,
               string_agg(format('%I WITH =', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_eq_expr,
               string_agg(format('%I', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_cols
        FROM information_schema.table_constraints tc
        JOIN information_schema.key_column_usage kcu
          ON tc.table_schema = kcu.table_schema
         AND tc.table_name = kcu.table_name
         AND tc.constraint_name = kcu.constraint_name
        WHERE tc.table_schema = 'billiards_dwd'
          AND tc.constraint_type = 'PRIMARY KEY'
          AND EXISTS (
              SELECT 1 FROM information_schema.columns c
              WHERE c.table_schema = 'billiards_dwd'
                AND c.table_name = tc.table_name
                AND c.column_name = 'scd2_start_time'
          )
        GROUP BY tc.table_name
    )
    LOOP
        IF NOT EXISTS (
            SELECT 1 FROM pg_constraint
             WHERE conname = format('%s_scd2_no_overlap', rec.table_name)
               AND conrelid = format('billiards_dwd.%s', rec.table_name)::regclass
        ) THEN
            EXECUTE format(
                'ALTER TABLE billiards_dwd.%I ADD CONSTRAINT %I EXCLUDE USING gist (%s, tstzrange(scd2_start_time, scd2_end_time) WITH &&) WHERE (scd2_is_current = 1);',
                rec.table_name,
                rec.table_name || '_scd2_no_overlap',
                rec.pk_eq_expr
            );
        END IF;

        IF to_regclass(format('billiards_dwd.%s_scd2_current_unique_idx', rec.table_name)) IS NULL THEN
            EXECUTE format(
                'CREATE UNIQUE INDEX %I ON billiards_dwd.%I (%s) WHERE (scd2_is_current = 1);',
                rec.table_name || '_scd2_current_unique_idx',
                rec.table_name,
                rec.pk_cols
            );
        END IF;
    END LOOP;
END
$$;


CREATE TABLE IF NOT EXISTS dim_site (
    site_id BIGINT,
    org_id BIGINT,
    tenant_id BIGINT,
    shop_name TEXT,
    site_label TEXT,
    full_address TEXT,
    address TEXT,
    longitude NUMERIC(10,6),
    latitude NUMERIC(10,6),
    tenant_site_region_id BIGINT,
    business_tel TEXT,
    site_type INTEGER,
    shop_status INTEGER,
    SCD2_start_time     TIMESTAMPTZ DEFAULT now(),
    SCD2_end_time       TIMESTAMPTZ DEFAULT '9999-12-31',
    SCD2_is_current     INT DEFAULT 1,
    SCD2_version        INT DEFAULT 1,
    PRIMARY KEY (site_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_site IS 'DWD 维度表：dim_site。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_site.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - site_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_site.org_id IS '【说明】组织/机构 ID，用于组织维度归属。     【示例】2790684179467077（组织/机构 ID，用于组织维度归属）。     【ODS来源】table_fee_transactions - siteProfile.org_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - org_id。';
COMMENT ON COLUMN billiards_dwd.dim_site.tenant_id IS '【说明】租户/品牌 ID，用于商户维度过滤与关联。     【示例】2790683160709957（租户/品牌 ID，用于商户维度过滤与关联）。     【ODS来源】table_fee_transactions - siteProfile.tenant_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_site.shop_name IS '【说明】门店名称，用于展示与查询。     【示例】朗朗桌球（门店名称，用于展示与查询）。     【ODS来源】table_fee_transactions - siteProfile.shop_name。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_name。';
COMMENT ON COLUMN billiards_dwd.dim_site.site_label IS '【说明】门店标签（如 A/B 店），用于展示与分组。     【示例】A（门店标签（如 A/B 店），用于展示与分组）。     【ODS来源】table_fee_transactions - siteProfile.site_label。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。';
COMMENT ON COLUMN billiards_dwd.dim_site.full_address IS '【说明】门店详细地址，用于展示与地理信息。     【示例】广东省广州市天河区丽阳街12号（门店详细地址，用于展示与地理信息）。     【ODS来源】table_fee_transactions - siteProfile.full_address。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - full_address。';
COMMENT ON COLUMN billiards_dwd.dim_site.address IS '【说明】门店地址简称/快照，用于展示。     【示例】广东省广州市天河区天园街道朗朗桌球（门店地址简称/快照，用于展示）。     【ODS来源】table_fee_transactions - siteProfile.address。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。';
COMMENT ON COLUMN billiards_dwd.dim_site.longitude IS '【说明】经度，用于定位与地图展示。     【示例】113.360321（经度，用于定位与地图展示）。     【ODS来源】table_fee_transactions - siteProfile.longitude。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude（派生：CAST(longitude AS numeric)）。';
COMMENT ON COLUMN billiards_dwd.dim_site.latitude IS '【说明】纬度，用于定位与地图展示。     【示例】23.133629（纬度，用于定位与地图展示）。     【ODS来源】table_fee_transactions - siteProfile.latitude。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude（派生：CAST(latitude AS numeric)）。';
COMMENT ON COLUMN billiards_dwd.dim_site.tenant_site_region_id IS '【说明】租户下门店区域 ID，用于区域维度分析。     【示例】156440100（租户下门店区域 ID，用于区域维度分析）。     【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。';
COMMENT ON COLUMN billiards_dwd.dim_site.business_tel IS '【说明】门店电话，用于联系信息展示。     【示例】13316068642（门店电话，用于联系信息展示）。     【ODS来源】table_fee_transactions - siteProfile.business_tel。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - business_tel。';
COMMENT ON COLUMN billiards_dwd.dim_site.site_type IS '【说明】门店类型枚举，用于门店分类。     【示例】1（门店类型枚举，用于门店分类）。     【ODS来源】table_fee_transactions - siteProfile.site_type。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。';
COMMENT ON COLUMN billiards_dwd.dim_site.shop_status IS '【说明】门店状态枚举，用于营业状态标识。     【示例】1（门店状态枚举，用于营业状态标识）。     【ODS来源】table_fee_transactions - siteProfile.shop_status。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。';
COMMENT ON COLUMN billiards_dwd.dim_site.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_site_ex (
    site_id BIGINT,
    avatar TEXT,
    address TEXT,
    longitude NUMERIC(9,6),
    latitude NUMERIC(9,6),
    tenant_site_region_id BIGINT,
    auto_light INTEGER,
    light_status INTEGER,
    light_type INTEGER,
    light_token TEXT,
    site_type INTEGER,
    site_label TEXT,
    attendance_enabled INTEGER,
    attendance_distance INTEGER,
    customer_service_qrcode TEXT,
    customer_service_wechat TEXT,
    fixed_pay_qrCode TEXT,
    prod_env TEXT,
    shop_status INTEGER,
    create_time TIMESTAMPTZ,
    update_time TIMESTAMPTZ,
    SCD2_start_time     TIMESTAMPTZ DEFAULT now(),
    SCD2_end_time       TIMESTAMPTZ DEFAULT '9999-12-31',
    SCD2_is_current     INT DEFAULT 1,
    SCD2_version        INT DEFAULT 1,
    PRIMARY KEY (site_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_site_ex IS 'DWD 维度表（扩展字段表）：dim_site_ex。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - site_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.avatar IS '【说明】门店头像/图片 URL，用于展示。     【示例】https://oss.ficoo.vip/admin/hXcE4E_1752495052016.jpg（门店头像/图片 URL，用于展示）。     【ODS来源】table_fee_transactions - siteProfile.avatar。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - avatar。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.address IS '【说明】门店地址简称/快照，用于展示。     【示例】广东省广州市天河区天园街道朗朗桌球（门店地址简称/快照，用于展示）。     【ODS来源】table_fee_transactions - siteProfile.address。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.longitude IS '【说明】经度，用于定位与地图展示。     【示例】113.360321（经度，用于定位与地图展示）。     【ODS来源】table_fee_transactions - siteProfile.longitude。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude（派生：CAST(longitude AS numeric)）。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.latitude IS '【说明】纬度，用于定位与地图展示。     【示例】23.133629（纬度，用于定位与地图展示）。     【ODS来源】table_fee_transactions - siteProfile.latitude。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude（派生：CAST(latitude AS numeric)）。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.tenant_site_region_id IS '【说明】租户下门店区域 ID，用于区域维度分析。     【示例】156440100（租户下门店区域 ID，用于区域维度分析）。     【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.auto_light IS '【说明】是否启用自动灯控配置，用于门店设备策略。     【示例】1（是否启用自动灯控配置，用于门店设备策略）。     【ODS来源】table_fee_transactions - siteProfile.auto_light。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - auto_light。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_status IS '【说明】灯控状态/开关，用于灯控设备管理。     【示例】1（灯控状态/开关，用于灯控设备管理）。     【ODS来源】table_fee_transactions - siteProfile.light_status。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_status。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_type IS '【说明】灯控类型，用于设备类型区分。     【示例】0（灯控类型，用于设备类型区分）。     【ODS来源】table_fee_transactions - siteProfile.light_type。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_type。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_token IS '【说明】灯控控制令牌，用于对接灯控服务。     【示例】NULL（灯控控制令牌，用于对接灯控服务）。     【ODS来源】table_fee_transactions - siteProfile.light_token。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_token。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_type IS '【说明】门店类型枚举，用于门店分类。     【示例】1（门店类型枚举，用于门店分类）。     【ODS来源】table_fee_transactions - siteProfile.site_type。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_label IS '【说明】门店标签（如 A/B 店），用于展示与分组。     【示例】A（门店标签（如 A/B 店），用于展示与分组）。     【ODS来源】table_fee_transactions - siteProfile.site_label。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_enabled IS '【说明】是否启用考勤功能，用于门店考勤配置。     【示例】1（是否启用考勤功能，用于门店考勤配置）。     【ODS来源】table_fee_transactions - siteProfile.attendance_enabled。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_enabled。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_distance IS '【说明】考勤允许距离（米），用于考勤打卡限制。     【示例】0（考勤允许距离（米），用于考勤打卡限制）。     【ODS来源】table_fee_transactions - siteProfile.attendance_distance。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_distance。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_qrcode IS '【说明】客服二维码 URL，用于引导联系。     【示例】NULL（客服二维码 URL，用于引导联系）。     【ODS来源】table_fee_transactions - siteProfile.customer_service_qrcode。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_qrcode。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_wechat IS '【说明】客服微信号，用于引导联系。     【示例】NULL（客服微信号，用于引导联系）。     【ODS来源】table_fee_transactions - siteProfile.customer_service_wechat。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_wechat。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.fixed_pay_qrcode IS '【说明】固定收款码（二维码）URL，用于收款引导。     【示例】NULL（固定收款码（二维码）URL，用于收款引导）。     【ODS来源】table_fee_transactions - siteProfile.fixed_pay_qrCode。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - fixed_pay_qrCode。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.prod_env IS '【说明】环境标识（生产/测试），用于区分配置环境。     【示例】1（环境标识（生产/测试），用于区分配置环境）。     【ODS来源】table_fee_transactions - siteProfile.prod_env。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - prod_env。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.shop_status IS '【说明】门店状态枚举，用于营业状态标识。     【示例】1（门店状态枚举，用于营业状态标识）。     【ODS来源】table_fee_transactions - siteProfile.shop_status。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.create_time IS '【说明】门店创建时间（快照字段）。     【示例】NULL（用于门店创建时间（快照字段））。     【ODS来源】table_fee_transactions - siteProfile.create_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - create_time（派生：CAST(create_time AS timestamptz)）。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.update_time IS '【说明】门店更新时间（快照字段）。     【示例】NULL（用于门店更新时间（快照字段））。     【ODS来源】table_fee_transactions - siteProfile.update_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - update_time（派生：CAST(update_time AS timestamptz)）。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】table_fee_transactions - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_table (
    table_id BIGINT,
    site_id BIGINT,
    table_name TEXT,
    site_table_area_id BIGINT,
    site_table_area_name TEXT,
    tenant_table_area_id BIGINT,
    table_price NUMERIC(18,2),
    order_id BIGINT,
    SCD2_start_time     TIMESTAMPTZ DEFAULT now(),
    SCD2_end_time       TIMESTAMPTZ DEFAULT '9999-12-31',
    SCD2_is_current     INT DEFAULT 1,
    SCD2_version        INT DEFAULT 1,
    PRIMARY KEY (table_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_table IS 'DWD 维度表：dim_table。ODS 来源表：billiards_ods.site_tables_master（对应 JSON：site_tables_master.json；分析：site_tables_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_table.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791964216463493（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】site_tables_master - id。     【JSON字段】site_tables_master.json - data.siteTables - id。';
COMMENT ON COLUMN billiards_dwd.dim_table.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】site_tables_master - site_id。     【JSON字段】site_tables_master.json - data.siteTables - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_table.table_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A1（名称字段，用于展示与辅助识别）。     【ODS来源】site_tables_master - table_name。     【JSON字段】site_tables_master.json - data.siteTables - table_name。';
COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791963794329671（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】site_tables_master - site_table_area_id。     【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A区（名称字段，用于展示与辅助识别）。     【ODS来源】site_tables_master - areaName。     【JSON字段】site_tables_master.json - data.siteTables - areaName。';
COMMENT ON COLUMN billiards_dwd.dim_table.tenant_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791963794329671（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】site_tables_master - site_table_area_id。     【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dim_table.table_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】site_tables_master - table_price。     【JSON字段】site_tables_master.json - data.siteTables - table_price。';
COMMENT ON COLUMN billiards_dwd.dim_table.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_table_ex (
    table_id BIGINT,
    show_status INTEGER,
    is_online_reservation INTEGER,
    table_cloth_use_time INTEGER,
    table_cloth_use_cycle INTEGER,
    table_status INTEGER,
    create_time TIMESTAMPTZ,
    light_status INTEGER,
    tablestatusname TEXT,
    sitename TEXT,
    applet_qr_code_url TEXT,
    audit_status INTEGER,
    charge_free INTEGER,
    delay_lights_time INTEGER,
    is_rest_area INTEGER,
    only_allow_groupon INTEGER,
    order_delay_time INTEGER,
    self_table INTEGER,
    temporary_light_second INTEGER,
    virtual_table INTEGER,
    SCD2_start_time     TIMESTAMPTZ DEFAULT now(),
    SCD2_end_time       TIMESTAMPTZ DEFAULT '9999-12-31',
    SCD2_is_current     INT DEFAULT 1,
    SCD2_version        INT DEFAULT 1,
    PRIMARY KEY (table_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_table_ex IS 'DWD 维度表（扩展字段表）：dim_table_ex。ODS 来源表：billiards_ods.site_tables_master（对应 JSON：site_tables_master.json；分析：site_tables_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791964216463493（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】site_tables_master - id。     【JSON字段】site_tables_master.json - data.siteTables - id。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.show_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】site_tables_master - show_status。     【JSON字段】site_tables_master.json - data.siteTables - show_status。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.is_online_reservation IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】2（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】site_tables_master - is_online_reservation。     【JSON字段】site_tables_master.json - data.siteTables - is_online_reservation。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】1863727（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】site_tables_master - table_cloth_use_time。     【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_time。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_cycle IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】site_tables_master - table_cloth_use_Cycle。     【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_Cycle。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】site_tables_master - table_status。     【JSON字段】site_tables_master.json - data.siteTables - table_status。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】site_tables_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_assistant (
    assistant_id BIGINT,
    user_id BIGINT,
    assistant_no TEXT,
    real_name TEXT,
    nickname TEXT,
    mobile TEXT,
    tenant_id BIGINT,
    site_id BIGINT,
    team_id BIGINT,
    team_name TEXT,
    level INTEGER,
    entry_time TIMESTAMPTZ,
    resign_time TIMESTAMPTZ,
    leave_status INTEGER,
    assistant_status INTEGER,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (assistant_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_assistant IS 'DWD 维度表：dim_assistant。ODS 来源表：billiards_ods.assistant_accounts_master（对应 JSON：assistant_accounts_master.json；分析：assistant_accounts_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2947562271297029（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - staff_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_no IS '【说明】维度字段，用于补充维度属性。     【示例】31（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - assistant_no。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_no。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.real_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】张静然（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - real_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - real_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.nickname IS '【说明】名称字段，用于展示与辅助识别。     【示例】小然（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - nickname。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - nickname。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.mobile IS '【说明】维度字段，用于补充维度属性。     【示例】15119679931（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - mobile。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - mobile。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - tenant_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - site_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.team_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2792011585884037（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - team_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.team_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】1组（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - team_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.level IS '【说明】维度字段，用于补充维度属性。     【示例】20（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - level。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - level。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.entry_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-02 08:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - entry_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.resign_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-03 08:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - resign_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.leave_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - leave_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - leave_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - assistant_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_assistant_ex (
    assistant_id BIGINT,
    gender INTEGER,
    birth_date TIMESTAMPTZ,
    avatar TEXT,
    introduce TEXT,
    video_introduction_url TEXT,
    height NUMERIC(5,2),
    weight NUMERIC(5,2),
    shop_name TEXT,
    group_id BIGINT,
    group_name TEXT,
    person_org_id BIGINT,
    staff_id BIGINT,
    staff_profile_id BIGINT,
    assistant_grade DOUBLE PRECISION,
    sum_grade DOUBLE PRECISION,
    get_grade_times INTEGER,
    charge_way INTEGER,
    allow_cx INTEGER,
    is_guaranteed INTEGER,
    salary_grant_enabled INTEGER,
    entry_type INTEGER,
    entry_sign_status INTEGER,
    resign_sign_status INTEGER,
    work_status INTEGER,
    show_status INTEGER,
    show_sort INTEGER,
    online_status INTEGER,
    is_delete INTEGER,
    criticism_status INTEGER,
    create_time TIMESTAMPTZ,
    update_time TIMESTAMPTZ,
    start_time TIMESTAMPTZ,
    end_time TIMESTAMPTZ,
    last_table_id BIGINT,
    last_table_name TEXT,
    last_update_name TEXT,
    order_trade_no BIGINT,
    ding_talk_synced INTEGER,
    site_light_cfg_id BIGINT,
    light_equipment_id TEXT,
    light_status INTEGER,
    is_team_leader INTEGER,
    serial_number BIGINT,
    system_role_id BIGINT,
    job_num TEXT,
    cx_unit_price NUMERIC(18,2),
    pd_unit_price NUMERIC(18,2),
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (assistant_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_assistant_ex IS 'DWD 维度表（扩展字段表）：dim_assistant_ex。ODS 来源表：billiards_ods.assistant_accounts_master（对应 JSON：assistant_accounts_master.json；分析：assistant_accounts_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2947562271297029（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.gender IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - gender。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - gender。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.birth_date IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】0001-01-01 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - birth_date。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - birth_date。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.avatar IS '【说明】维度字段，用于补充维度属性。     【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - avatar。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - avatar。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.introduce IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - introduce。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - introduce。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.video_introduction_url IS '【说明】维度字段，用于补充维度属性。     【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - video_introduction_url。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - video_introduction_url。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.height IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - height。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - height。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.weight IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - weight。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - weight。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.shop_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - shop_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - shop_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - group_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - group_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.person_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2947562271215109（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - person_org_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - person_org_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - staff_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_profile_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - staff_profile_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_profile_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_grade IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - assistant_grade。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_grade。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.sum_grade IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - sum_grade。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - sum_grade。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.get_grade_times IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - get_grade_times。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - get_grade_times。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.charge_way IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - charge_way。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - charge_way。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.allow_cx IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - allow_cx。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - allow_cx。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_guaranteed IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_accounts_master - is_guaranteed。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_guaranteed。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.salary_grant_enabled IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - salary_grant_enabled。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - salary_grant_enabled。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - entry_type。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_type。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_sign_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】0（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - entry_sign_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.resign_sign_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】0（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - resign_sign_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.work_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】2（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - work_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - work_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - show_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_sort IS '【说明】维度字段，用于补充维度属性。     【示例】31（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - show_sort。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_sort。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.online_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - online_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - online_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_accounts_master - is_delete。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_delete。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.criticism_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - criticism_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - criticism_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-02 15:55:26（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - create_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.update_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-03 18:32:07（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - update_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - update_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-01 08:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - start_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - start_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-12-01 08:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_accounts_master - end_time。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - end_time。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - last_table_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】TV（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - last_table_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_update_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】管理员：郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_accounts_master - last_update_name。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_update_name。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.order_trade_no IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - order_trade_no。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.ding_talk_synced IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】assistant_accounts_master - ding_talk_synced。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - ding_talk_synced。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.site_light_cfg_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - site_light_cfg_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_light_cfg_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_equipment_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_accounts_master - light_equipment_id。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_equipment_id。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】2（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_accounts_master - light_status。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_status。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_team_leader IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_accounts_master - is_team_leader。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_team_leader。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.serial_number IS '【说明】数量/时长字段，用于统计与计量。     【示例】0（数量/时长字段，用于统计与计量）。     【ODS来源】assistant_accounts_master - serial_number。     【JSON字段】assistant_accounts_master.json - data.assistantInfos - serial_number。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】assistant_accounts_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_member (
    member_id BIGINT,
    system_member_id BIGINT,
    tenant_id BIGINT,
    register_site_id BIGINT,
    mobile TEXT,
    nickname TEXT,
    member_card_grade_code BIGINT,
    member_card_grade_name TEXT,
    create_time TIMESTAMPTZ,
    update_time TIMESTAMPTZ,
    pay_money_sum NUMERIC(18,2),
    recharge_money_sum NUMERIC(18,2),
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (member_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_member IS 'DWD 维度表：dim_member。ODS 来源表：billiards_ods.member_profiles（对应 JSON：member_profiles.json；分析：member_profiles-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_member.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955204541320325（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - id。';
COMMENT ON COLUMN billiards_dwd.dim_member.system_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955204540009605（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - system_member_id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - system_member_id。';
COMMENT ON COLUMN billiards_dwd.dim_member.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - tenant_id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_member.register_site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - register_site_id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。';
COMMENT ON COLUMN billiards_dwd.dim_member.mobile IS '【说明】维度字段，用于补充维度属性。     【示例】18620043391（维度字段，用于补充维度属性）。     【ODS来源】member_profiles - mobile。     【JSON字段】member_profiles.json - data.tenantMemberInfos - mobile。';
COMMENT ON COLUMN billiards_dwd.dim_member.nickname IS '【说明】名称字段，用于展示与辅助识别。     【示例】胡先生（名称字段，用于展示与辅助识别）。     【ODS来源】member_profiles - nickname。     【JSON字段】member_profiles.json - data.tenantMemberInfos - nickname。';
COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_code IS '【说明】维度字段，用于补充维度属性。     【示例】2790683528022853（维度字段，用于补充维度属性）。     【ODS来源】member_profiles - member_card_grade_code。     【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_code。';
COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】储值卡（名称字段，用于展示与辅助识别）。     【ODS来源】member_profiles - member_card_grade_name。     【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_name。';
COMMENT ON COLUMN billiards_dwd.dim_member.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-08 01:29:33（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_profiles - create_time。     【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_member.update_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_profiles - update_time。     【JSON字段】member_profiles.json - data.tenantMemberInfos - update_time。';
COMMENT ON COLUMN billiards_dwd.dim_member.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_member_ex (
    member_id BIGINT,
    referrer_member_id BIGINT,
    point NUMERIC(18,2),
    register_site_name TEXT,
    growth_value NUMERIC(18,2),
    user_status INTEGER,
    status INTEGER,
    person_tenant_org_id BIGINT,
    person_tenant_org_name TEXT,
    register_source TEXT,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (member_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_member_ex IS 'DWD 维度表（扩展字段表）：dim_member_ex。ODS 来源表：billiards_ods.member_profiles（对应 JSON：member_profiles.json；分析：member_profiles-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955204541320325（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - id。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.referrer_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_profiles - referrer_member_id。     【JSON字段】member_profiles.json - data.tenantMemberInfos - referrer_member_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.point IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】member_profiles - point。     【JSON字段】member_profiles.json - data.tenantMemberInfos - point。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.register_site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】member_profiles - site_name。     【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.growth_value IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】member_profiles - growth_value。     【JSON字段】member_profiles.json - data.tenantMemberInfos - growth_value。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.user_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】member_profiles - user_status。     【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】member_profiles - status。     【JSON字段】member_profiles.json - data.tenantMemberInfos - status。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】member_profiles - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_member_card_account (
    member_card_id BIGINT,
    tenant_id BIGINT,
    register_site_id BIGINT,
    tenant_member_id BIGINT,
    system_member_id BIGINT,
    card_type_id BIGINT,
    member_card_grade_code BIGINT,
    member_card_grade_code_name TEXT,
    member_card_type_name TEXT,
    member_name TEXT,
    member_mobile TEXT,
    balance NUMERIC(18,2),
    start_time TIMESTAMPTZ,
    end_time TIMESTAMPTZ,
    last_consume_time TIMESTAMPTZ,
    status INTEGER,
    is_delete INTEGER,
    principal_balance NUMERIC(18,2),
    member_grade BIGINT,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (member_card_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_member_card_account IS 'DWD 维度表：dim_member_card_account。ODS 来源表：billiards_ods.member_stored_value_cards（对应 JSON：member_stored_value_cards.json；分析：member_stored_value_cards-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955206162843781（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - tenant_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.register_site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - register_site_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - register_site_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955204541320325（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - tenant_member_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.system_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955204540009605（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - system_member_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.card_type_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793266846533445（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - card_type_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_type_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code IS '【说明】维度字段，用于补充维度属性。     【示例】2790683528022856（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - member_card_grade_code。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】活动抵用券（名称字段，用于展示与辅助识别）。     【ODS来源】member_stored_value_cards - member_card_grade_code_name。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_type_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】活动抵用券（名称字段，用于展示与辅助识别）。     【ODS来源】member_stored_value_cards - member_card_type_name。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】胡先生（名称字段，用于展示与辅助识别）。     【ODS来源】member_stored_value_cards - member_name。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_name。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_mobile IS '【说明】维度字段，用于补充维度属性。     【示例】18620043391（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - member_mobile。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_mobile。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.balance IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - balance。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - balance。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-08 01:31:12（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - start_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - start_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2225-01-01 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - end_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - end_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.last_consume_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 07:48:23（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - last_consume_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】member_stored_value_cards - status。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - status。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】member_stored_value_cards - is_delete。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_delete。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_member_card_account_ex (
    member_card_id BIGINT,
    site_name TEXT,
    tenant_name VARCHAR(64),
    tenantAvatar TEXT,
    effect_site_id BIGINT,
    able_cross_site INTEGER,
    card_physics_type INTEGER,
    card_no TEXT,
    bind_password TEXT,
    use_scene TEXT,
    denomination NUMERIC(18,2),
    create_time TIMESTAMPTZ,
    disable_start_time TIMESTAMPTZ,
    disable_end_time TIMESTAMPTZ,
    is_allow_give INTEGER,
    is_allow_order_deduct INTEGER,
    sort INTEGER,
    table_discount NUMERIC(10,2),
    goods_discount NUMERIC(10,2),
    assistant_discount NUMERIC(10,2),
    assistant_reward_discount NUMERIC(10,2),
    table_service_discount NUMERIC(10,2),
    goods_service_discount NUMERIC(10,2),
    assistant_service_discount NUMERIC(10,2),
    coupon_discount NUMERIC(10,2),
    table_discount_sub_switch INTEGER,
    goods_discount_sub_switch INTEGER,
    assistant_discount_sub_switch INTEGER,
    assistant_reward_discount_sub_switch INTEGER,
    goods_discount_range_type INTEGER,
    table_deduct_radio NUMERIC(10,2),
    goods_deduct_radio NUMERIC(10,2),
    assistant_deduct_radio NUMERIC(10,2),
    table_service_deduct_radio NUMERIC(10,2),
    goods_service_deduct_radio NUMERIC(10,2),
    assistant_service_deduct_radio NUMERIC(10,2),
    assistant_reward_deduct_radio NUMERIC(10,2),
    coupon_deduct_radio NUMERIC(10,2),
    cardSettleDeduct NUMERIC(18,2),
    tableCardDeduct NUMERIC(18,2),
    tableServiceCardDeduct NUMERIC(18,2),
    goodsCarDeduct NUMERIC(18,2),
    goodsServiceCardDeduct NUMERIC(18,2),
    assistantCardDeduct NUMERIC(18,2),
    assistantServiceCardDeduct NUMERIC(18,2),
    assistantRewardCardDeduct NUMERIC(18,2),
    couponCardDeduct NUMERIC(18,2),
    deliveryFeeDeduct NUMERIC(18,2),
    tableAreaId TEXT,
    goodsCategoryId TEXT,
    pdAssisnatLevel TEXT,
    cxAssisnatLevel TEXT,
    able_share_member_discount BOOLEAN,
    electricity_deduct_radio NUMERIC(18,4),
    electricity_discount NUMERIC(18,4),
    electricity_card_deduct BOOLEAN,
    recharge_freeze_balance NUMERIC(18,2),
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (member_card_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_member_card_account_ex IS 'DWD 维度表（扩展字段表）：dim_member_card_account_ex。ODS 来源表：billiards_ods.member_stored_value_cards（对应 JSON：member_stored_value_cards.json；分析：member_stored_value_cards-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.member_card_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955206162843781（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】member_stored_value_cards - site_name。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - site_name。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenant_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】member_stored_value_cards - tenantName。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantName。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenantavatar IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - tenantAvatar。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantAvatar。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.effect_site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_stored_value_cards - effect_site_id。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - effect_site_id。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.able_cross_site IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - able_cross_site。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_cross_site。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_physics_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - card_physics_type。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_physics_type。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_no IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - card_no。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_no。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.bind_password IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - bind_password。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - bind_password。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.use_scene IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - use_scene。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - use_scene。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.denomination IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - denomination。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - denomination。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-08 01:31:12（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - create_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】0001-01-01 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - disable_start_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_start_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】0001-01-01 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_stored_value_cards - disable_end_time。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_end_time。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_give IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】member_stored_value_cards - is_allow_give。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_give。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_order_deduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - is_allow_order_deduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_order_deduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.sort IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - sort。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - sort。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - table_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - goods_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - assistant_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - assistant_reward_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - table_service_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - goods_service_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - assistant_service_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】10.0（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - coupon_discount。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_discount。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount_sub_switch IS '【说明】数量/时长字段，用于统计与计量。     【示例】2（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - table_discount_sub_switch。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount_sub_switch。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_sub_switch IS '【说明】数量/时长字段，用于统计与计量。     【示例】2（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - goods_discount_sub_switch。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_sub_switch。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount_sub_switch IS '【说明】数量/时长字段，用于统计与计量。     【示例】2（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - assistant_discount_sub_switch。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount_sub_switch。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段，用于统计与计量。     【示例】2（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - assistant_reward_discount_sub_switch。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount_sub_switch。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_range_type IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】member_stored_value_cards - goods_discount_range_type。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_range_type。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - table_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - goods_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistant_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - table_service_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - goods_service_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistant_service_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistant_reward_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_deduct_radio IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】100.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - coupon_deduct_radio。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_deduct_radio。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cardsettlededuct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - cardSettleDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cardSettleDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tablecarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - tableCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableservicecarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - tableServiceCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableServiceCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscardeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - goodsCarDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCarDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodsservicecarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - goodsServiceCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsServiceCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantcarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistantCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantservicecarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistantServiceCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantServiceCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantrewardcarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - assistantRewardCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantRewardCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.couponcarddeduct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - couponCardDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - couponCardDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.deliveryfeededuct IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_stored_value_cards - deliveryFeeDeduct。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - deliveryFeeDeduct。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableareaid IS '【说明】维度字段，用于补充维度属性。     【示例】[]（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - tableAreaId。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableAreaId。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscategoryid IS '【说明】维度字段，用于补充维度属性。     【示例】[]（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - goodsCategoryId。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCategoryId。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.pdassisnatlevel IS '【说明】维度字段，用于补充维度属性。     【示例】[]（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - pdAssisnatLevel。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cxassisnatlevel IS '【说明】维度字段，用于补充维度属性。     【示例】[]（维度字段，用于补充维度属性）。     【ODS来源】member_stored_value_cards - cxAssisnatLevel。     【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】member_stored_value_cards - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_tenant_goods (
    tenant_goods_id BIGINT,
    tenant_id BIGINT,
    supplier_id BIGINT,
    category_name VARCHAR(64),
    goods_category_id BIGINT,
    goods_second_category_id BIGINT,
    goods_name VARCHAR(128),
    goods_number VARCHAR(64),
    unit VARCHAR(16),
    market_price NUMERIC(18,2),
    goods_state INTEGER,
    create_time TIMESTAMPTZ,
    update_time TIMESTAMPTZ,
    is_delete INTEGER,
    not_sale INTEGER,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (tenant_goods_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_tenant_goods IS 'DWD 维度表：dim_tenant_goods。ODS 来源表：billiards_ods.tenant_goods_master（对应 JSON：tenant_goods_master.json；分析：tenant_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791925230096261（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - tenant_id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.supplier_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - supplier_id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - supplier_id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.category_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】饮料（名称字段，用于展示与辅助识别）。     【ODS来源】tenant_goods_master - categoryName。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - categoryName。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528350539（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - goods_category_id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_category_id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_second_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528350540（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - goods_second_category_id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】东方树叶（名称字段，用于展示与辅助识别）。     【ODS来源】tenant_goods_master - goods_name。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_number IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】tenant_goods_master - goods_number。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_number。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.unit IS '【说明】维度字段，用于补充维度属性。     【示例】瓶（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - unit。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - unit。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.market_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】8.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】tenant_goods_master - market_price。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - market_price。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_state IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - goods_state。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_state。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-07-15 17:13:15（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】tenant_goods_master - create_time。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.update_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-10-29 23:51:38（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】tenant_goods_master - update_time。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】tenant_goods_master - is_delete。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_delete。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_tenant_goods_ex (
    tenant_goods_id BIGINT,
    remark_name VARCHAR(128),
    pinyin_initial VARCHAR(128),
    goods_cover VARCHAR(512),
    goods_bar_code VARCHAR(64),
    commodity_code VARCHAR(64),
    commodity_code_list VARCHAR(256),
    min_discount_price NUMERIC(18,2),
    cost_price NUMERIC(18,2),
    cost_price_type INTEGER,
    able_discount INTEGER,
    sale_channel INTEGER,
    is_warehousing INTEGER,
    is_in_site BOOLEAN,
    able_site_transfer INTEGER,
    common_sale_royalty INTEGER,
    point_sale_royalty INTEGER,
    out_goods_id BIGINT,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (tenant_goods_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_tenant_goods_ex IS 'DWD 维度表（扩展字段表）：dim_tenant_goods_ex。ODS 来源表：billiards_ods.tenant_goods_master（对应 JSON：tenant_goods_master.json；分析：tenant_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.tenant_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791925230096261（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.remark_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】tenant_goods_master - remark_name。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - remark_name。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.pinyin_initial IS '【说明】维度字段，用于补充维度属性。     【示例】DFSY,DFSX（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - pinyin_initial。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - pinyin_initial。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_cover IS '【说明】维度字段，用于补充维度属性。     【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - goods_cover。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_cover。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_bar_code IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - goods_bar_code。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_bar_code。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code IS '【说明】维度字段，用于补充维度属性。     【示例】10000028（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - commodity_code。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code_list IS '【说明】维度字段，用于补充维度属性。     【示例】10000028（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - commodity_code。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.min_discount_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】tenant_goods_master - min_discount_price。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - min_discount_price。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】tenant_goods_master - cost_price。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price_type IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】1（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】tenant_goods_master - cost_price_type。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price_type。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】tenant_goods_master - able_discount。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_discount。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.sale_channel IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - sale_channel。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - sale_channel。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_warehousing IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】tenant_goods_master - is_warehousing。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_warehousing。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_in_site IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】false（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】tenant_goods_master - isInSite（派生：BOOLEAN(isInSite)）。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - isInSite（派生：BOOLEAN(isInSite)）。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_site_transfer IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - able_site_transfer。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_site_transfer。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.common_sale_royalty IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - common_sale_royalty。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - common_sale_royalty。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.point_sale_royalty IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】tenant_goods_master - point_sale_royalty。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - point_sale_royalty。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.out_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】tenant_goods_master - out_goods_id。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - out_goods_id。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】tenant_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_store_goods (
    site_goods_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    tenant_goods_id BIGINT,
    goods_name TEXT,
    goods_category_id BIGINT,
    goods_second_category_id BIGINT,
    category_level1_name TEXT,
    category_level2_name TEXT,
    batch_stock_qty INTEGER,
    sale_qty INTEGER,
    total_sales_qty INTEGER,
    sale_price NUMERIC(18,2),
    created_at TIMESTAMPTZ,
    updated_at TIMESTAMPTZ,
    avg_monthly_sales NUMERIC(18,4),
    goods_state INTEGER,
    enable_status INTEGER,
    send_state INTEGER,
    is_delete INTEGER,
    commodity_code TEXT,
    not_sale INTEGER,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (site_goods_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_store_goods IS 'DWD 维度表：dim_store_goods。ODS 来源表：billiards_ods.store_goods_master（对应 JSON：store_goods_master.json；分析：store_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793025851560005（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - id。     【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - tenant_id。     【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - site_id。     【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2792178593255301（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - tenant_goods_id。     【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_goods_id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】合味道泡面（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_master - goods_name。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_name。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791941988405125（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - goods_category_id。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_category_id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_second_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793236829620037（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - goods_second_category_id。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_second_category_id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level1_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】零食（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_master - oneCategoryName。     【JSON字段】store_goods_master.json - data.orderGoodsList - oneCategoryName。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level2_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】面（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_master - twoCategoryName。     【JSON字段】store_goods_master.json - data.orderGoodsList - twoCategoryName。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.batch_stock_qty IS '【说明】批次库存数量，区别于当前库存（stock）。     【示例】18。     【ODS来源】store_goods_master - batch_stock_quantity。     【JSON字段】store_goods_master.json - data.orderGoodsList - batchStockQuantity。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_qty IS '【说明】数量/时长字段，用于统计与计量。     【示例】104（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - sale_num。     【JSON字段】store_goods_master.json - data.orderGoodsList - sale_num。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.total_sales_qty IS '【说明】数量/时长字段，用于统计与计量。     【示例】104（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - total_sales。     【JSON字段】store_goods_master.json - data.orderGoodsList - total_sales。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】12.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_master - sale_price。     【JSON字段】store_goods_master.json - data.orderGoodsList - sale_price。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.created_at IS '【说明】维度字段，用于补充维度属性。     【示例】2025-07-16 11:52:51（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - create_time。     【JSON字段】store_goods_master.json - data.orderGoodsList - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.updated_at IS '【说明】维度字段，用于补充维度属性。     【示例】2025-11-09 07:23:47（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - update_time。     【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.avg_monthly_sales IS '【说明】维度字段，用于补充维度属性。     【示例】1.32（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - average_monthly_sales。     【JSON字段】store_goods_master.json - data.orderGoodsList - average_monthly_sales。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_state IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - goods_state。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_state。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.enable_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】store_goods_master - enable_status。     【JSON字段】store_goods_master.json - data.orderGoodsList - enable_status。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.send_state IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - send_state。     【JSON字段】store_goods_master.json - data.orderGoodsList - send_state。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】store_goods_master - is_delete。     【JSON字段】store_goods_master.json - data.orderGoodsList - is_delete。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_store_goods_ex (
    site_goods_id BIGINT,
    site_name TEXT,
    unit TEXT,
    goods_barcode TEXT,
    goods_cover_url TEXT,
    pinyin_initial TEXT,
    stock_qty INTEGER,
    stock_secondary_qty INTEGER,
    safety_stock_qty INTEGER,
    cost_price NUMERIC(18,4),
    cost_price_type INTEGER,
    provisional_total_cost NUMERIC(18,2),
    total_purchase_cost NUMERIC(18,2),
    min_discount_price NUMERIC(18,2),
    is_discountable INTEGER,
    days_on_shelf INTEGER,
    audit_status INTEGER,
    sale_channel INTEGER,
    is_warehousing INTEGER,
    freeze_status INTEGER,
    forbid_sell_status INTEGER,
    able_site_transfer INTEGER,
    custom_label_type INTEGER,
    option_required INTEGER,
    remark TEXT,
    sort_order INTEGER,
    batch_stock_quantity INTEGER,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (site_goods_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_store_goods_ex IS 'DWD 维度表（扩展字段表）：dim_store_goods_ex。ODS 来源表：billiards_ods.store_goods_master（对应 JSON：store_goods_master.json；分析：store_goods_master-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793025851560005（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_master - id。     【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_master - siteName。     【JSON字段】store_goods_master.json - data.orderGoodsList - siteName。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.unit IS '【说明】维度字段，用于补充维度属性。     【示例】桶（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - unit。     【JSON字段】store_goods_master.json - data.orderGoodsList - unit。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_barcode IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - goods_bar_code。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_bar_code。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_cover_url IS '【说明】维度字段，用于补充维度属性。     【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - goods_cover。     【JSON字段】store_goods_master.json - data.orderGoodsList - goods_cover。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.pinyin_initial IS '【说明】维度字段，用于补充维度属性。     【示例】HWDPM,GWDPM（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - pinyin_initial。     【JSON字段】store_goods_master.json - data.orderGoodsList - pinyin_initial。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_qty IS '【说明】数量/时长字段，用于统计与计量。     【示例】18（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - stock。     【JSON字段】store_goods_master.json - data.orderGoodsList - stock。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_secondary_qty IS '【说明】数量/时长字段，用于统计与计量。     【示例】0（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - stock_A。     【JSON字段】store_goods_master.json - data.orderGoodsList - stock_A。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.safety_stock_qty IS '【说明】数量/时长字段，用于统计与计量。     【示例】0（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - safe_stock。     【JSON字段】store_goods_master.json - data.orderGoodsList - safe_stock。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_master - cost_price。     【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price_type IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】1（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_master - cost_price_type。     【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price_type。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.provisional_total_cost IS '【说明】暂估总成本，区别于实际采购成本（total_purchase_cost）。     【示例】0.0。     【ODS来源】store_goods_master - provisional_total_cost。     【JSON字段】store_goods_master.json - data.orderGoodsList - provisionalTotalCost。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.total_purchase_cost IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_master - total_purchase_cost。     【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.min_discount_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】7.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_master - min_discount_price。     【JSON字段】store_goods_master.json - data.orderGoodsList - min_discount_price。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_discountable IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_master - able_discount。     【JSON字段】store_goods_master.json - data.orderGoodsList - able_discount。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.days_on_shelf IS '【说明】维度字段，用于补充维度属性。     【示例】13（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - days_available。     【JSON字段】store_goods_master.json - data.orderGoodsList - days_available。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.audit_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】2（状态枚举字段，用于标识业务状态）。     【ODS来源】store_goods_master - audit_status。     【JSON字段】store_goods_master.json - data.orderGoodsList - audit_status。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sale_channel IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - sale_channel。     【JSON字段】store_goods_master.json - data.orderGoodsList - sale_channel。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_warehousing IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】store_goods_master - is_warehousing。     【JSON字段】store_goods_master.json - data.orderGoodsList - is_warehousing。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.freeze_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】0（状态枚举字段，用于标识业务状态）。     【ODS来源】store_goods_master - freeze。     【JSON字段】store_goods_master.json - data.orderGoodsList - freeze。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.forbid_sell_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】store_goods_master - forbid_sell_status。     【JSON字段】store_goods_master.json - data.orderGoodsList - forbid_sell_status。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.able_site_transfer IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - able_site_transfer。     【JSON字段】store_goods_master.json - data.orderGoodsList - able_site_transfer。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.custom_label_type IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - custom_label_type。     【JSON字段】store_goods_master.json - data.orderGoodsList - custom_label_type。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.option_required IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - option_required。     【JSON字段】store_goods_master.json - data.orderGoodsList - option_required。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.remark IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - remark。     【JSON字段】store_goods_master.json - data.orderGoodsList - remark。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sort_order IS '【说明】维度字段，用于补充维度属性。     【示例】100（维度字段，用于补充维度属性）。     【ODS来源】store_goods_master - sort。     【JSON字段】store_goods_master.json - data.orderGoodsList - sort。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.batch_stock_quantity IS '【说明】批次库存数量，记录商品按批次管理的库存量。     【示例】0。     【ODS来源】store_goods_master - batch_stock。     【JSON字段】store_goods_master.json - data.orderGoodsList - batch_stock。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】store_goods_master - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_goods_category (
    category_id BIGINT,
    tenant_id BIGINT,
    category_name VARCHAR(50),
    alias_name VARCHAR(50),
    parent_category_id BIGINT,
    business_name VARCHAR(50),
    tenant_goods_business_id BIGINT,
    category_level INTEGER,
    is_leaf INTEGER,
    open_salesman INTEGER,
    sort_order INTEGER,
    is_warehousing INTEGER,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (category_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_goods_category IS 'DWD 维度表：dim_goods_category。ODS 来源表：billiards_ods.stock_goods_category_tree（对应 JSON：stock_goods_category_tree.json；分析：stock_goods_category_tree-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528350533（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】stock_goods_category_tree - id。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】stock_goods_category_tree - tenant_id。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】槟榔（名称字段，用于展示与辅助识别）。     【ODS来源】stock_goods_category_tree - category_name。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.alias_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】stock_goods_category_tree - alias_name。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - alias_name。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.parent_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】stock_goods_category_tree - pid。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - pid。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.business_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】槟榔（名称字段，用于展示与辅助识别）。     【ODS来源】stock_goods_category_tree - business_name。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - business_name。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_goods_business_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528317766（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】stock_goods_category_tree - tenant_goods_business_id。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_level IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】stock_goods_category_tree - CASE WHEN pid = 0 THEN 1 ELSE 2 END。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN pid = 0 THEN 1 ELSE 2 END。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_leaf IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】stock_goods_category_tree - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.open_salesman IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】stock_goods_category_tree - open_salesman。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.sort_order IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】stock_goods_category_tree - sort。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_warehousing IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】stock_goods_category_tree - is_warehousing。     【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】stock_goods_category_tree - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】stock_goods_category_tree - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】stock_goods_category_tree - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】stock_goods_category_tree - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_groupbuy_package (
    groupbuy_package_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    package_name VARCHAR(200),
    package_template_id BIGINT,
    selling_price NUMERIC(10,2),
    coupon_face_value NUMERIC(10,2),
    duration_seconds INTEGER,
    start_time TIMESTAMPTZ,
    end_time TIMESTAMPTZ,
    table_area_name VARCHAR(100),
    is_enabled INTEGER,
    is_delete INTEGER,
    create_time TIMESTAMPTZ,
    tenant_table_area_id_list VARCHAR(512),
    card_type_ids VARCHAR(255),
    sort INTEGER,
    is_first_limit BOOLEAN,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (groupbuy_package_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_groupbuy_package IS 'DWD 维度表：dim_groupbuy_package。ODS 来源表：billiards_ods.group_buy_packages（对应 JSON：group_buy_packages.json；分析：group_buy_packages-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.groupbuy_package_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2939215004469573（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - id。     【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - tenant_id。     【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - site_id。     【JSON字段】group_buy_packages.json - data.packageCouponList - site_id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】早场特惠一小时（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_packages - package_name。     【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_template_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】1814707240811572（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - package_id。     【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.selling_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_packages - selling_price。     【JSON字段】group_buy_packages.json - data.packageCouponList - selling_price。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.coupon_face_value IS '【说明】维度字段，用于补充维度属性。     【示例】0.0（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - coupon_money。     【JSON字段】group_buy_packages.json - data.packageCouponList - coupon_money。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.duration_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】group_buy_packages - duration。     【JSON字段】group_buy_packages.json - data.packageCouponList - duration。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-10-27 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】group_buy_packages - start_time。     【JSON字段】group_buy_packages.json - data.packageCouponList - start_time。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2026-10-28 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】group_buy_packages - end_time。     【JSON字段】group_buy_packages.json - data.packageCouponList - end_time。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.table_area_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A区（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_packages - table_area_name。     【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_name。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_enabled IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】group_buy_packages - is_enabled。     【JSON字段】group_buy_packages.json - data.packageCouponList - is_enabled。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】group_buy_packages - is_delete。     【JSON字段】group_buy_packages.json - data.packageCouponList - is_delete。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-10-27 18:24:09（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】group_buy_packages - create_time。     【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_table_area_id_list IS '【说明】维度字段，用于补充维度属性。     【示例】2791960001957765（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - tenant_table_area_id_list。     【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.card_type_ids IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - card_type_ids。     【JSON字段】group_buy_packages.json - data.packageCouponList - card_type_ids。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dim_groupbuy_package_ex (
    groupbuy_package_id BIGINT,
    site_name VARCHAR(100),
    usable_count INTEGER,
    date_type INTEGER,
    usable_range VARCHAR(255),
    date_info VARCHAR(255),
    start_clock VARCHAR(16),
    end_clock VARCHAR(16),
    add_start_clock VARCHAR(16),
    add_end_clock VARCHAR(16),
    area_tag_type INTEGER,
    table_area_id BIGINT,
    tenant_table_area_id BIGINT,
    table_area_id_list VARCHAR(512),
    group_type INTEGER,
    system_group_type INTEGER,
    package_type INTEGER,
    effective_status INTEGER,
    max_selectable_categories INTEGER,
    creator_name VARCHAR(100),
    tenant_coupon_sale_order_item_id BIGINT,
    SCD2_start_time     TIMESTAMPTZ,
    SCD2_end_time       TIMESTAMPTZ,
    SCD2_is_current     INT,
    SCD2_version        INT,
    PRIMARY KEY (groupbuy_package_id, scd2_start_time)
);

COMMENT ON TABLE billiards_dwd.dim_groupbuy_package_ex IS 'DWD 维度表（扩展字段表）：dim_groupbuy_package_ex。ODS 来源表：billiards_ods.group_buy_packages（对应 JSON：group_buy_packages.json；分析：group_buy_packages-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.groupbuy_package_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2939215004469573（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - id。     【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_packages - site_name。     【JSON字段】group_buy_packages.json - data.packageCouponList - site_name。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】9999999（数量/时长字段，用于统计与计量）。     【ODS来源】group_buy_packages - usable_count。     【JSON字段】group_buy_packages.json - data.packageCouponList - usable_count。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - date_type。     【JSON字段】group_buy_packages.json - data.packageCouponList - date_type。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_range IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - usable_range。     【JSON字段】group_buy_packages.json - data.packageCouponList - usable_range。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_info IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - date_info。     【JSON字段】group_buy_packages.json - data.packageCouponList - date_info。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.start_clock IS '【说明】维度字段，用于补充维度属性。     【示例】00:00:00（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - start_clock。     【JSON字段】group_buy_packages.json - data.packageCouponList - start_clock。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.end_clock IS '【说明】维度字段，用于补充维度属性。     【示例】1.00:00:00（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - end_clock。     【JSON字段】group_buy_packages.json - data.packageCouponList - end_clock。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_start_clock IS '【说明】维度字段，用于补充维度属性。     【示例】00:00:00（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - add_start_clock。     【JSON字段】group_buy_packages.json - data.packageCouponList - add_start_clock。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_end_clock IS '【说明】维度字段，用于补充维度属性。     【示例】1.00:00:00（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - add_end_clock。     【JSON字段】group_buy_packages.json - data.packageCouponList - add_end_clock。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.area_tag_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - area_tag_type。     【JSON字段】group_buy_packages.json - data.packageCouponList - area_tag_type。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - table_area_id。     【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.tenant_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_packages - tenant_table_area_id。     【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id_list IS '【说明】维度字段，用于补充维度属性。     【示例】NULL（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - table_area_id_list。     【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id_list。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.group_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - group_type。     【JSON字段】group_buy_packages.json - data.packageCouponList - group_type。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.system_group_type IS '【说明】维度字段，用于补充维度属性。     【示例】1（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - system_group_type。     【JSON字段】group_buy_packages.json - data.packageCouponList - system_group_type。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.package_type IS '【说明】维度字段，用于补充维度属性。     【示例】2（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - type。     【JSON字段】group_buy_packages.json - data.packageCouponList - type。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.effective_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】group_buy_packages - effective_status。     【JSON字段】group_buy_packages.json - data.packageCouponList - effective_status。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.max_selectable_categories IS '【说明】维度字段，用于补充维度属性。     【示例】0（维度字段，用于补充维度属性）。     【ODS来源】group_buy_packages - max_selectable_categories。     【JSON字段】group_buy_packages.json - data.packageCouponList - max_selectable_categories。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.creator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】店长:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_packages - creator_name。     【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_start_time IS '【说明】SCD2 开始时间（版本生效起点），用于维度慢变追踪。     【示例】2025-11-10T00:00:00+08:00（SCD2 开始时间（版本生效起点），用于维度慢变追踪）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_end_time IS '【说明】SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪。     【示例】9999-12-31T00:00:00+00:00（SCD2 结束时间（默认 9999-12-31 表示当前版本），用于维度慢变追踪）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_is_current IS '【说明】SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录。     【示例】1（SCD2 当前版本标记（1=当前，0=历史），用于筛选最新维度记录）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';
COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_version IS '【说明】SCD2 版本号（自增），用于与时间段一起避免版本重叠。     【示例】1（SCD2 版本号（自增），用于与时间段一起避免版本重叠）。     【ODS来源】group_buy_packages - 无（DWD慢变元数据）。     【JSON字段】无 - DWD慢变元数据 - 无。';


CREATE TABLE IF NOT EXISTS dwd_settlement_head (
    order_settle_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    site_name VARCHAR(100),
    table_id BIGINT,
    settle_name VARCHAR(100),
    order_trade_no BIGINT,
    create_time TIMESTAMPTZ,
    pay_time TIMESTAMPTZ,
    settle_type INTEGER,
    revoke_order_id BIGINT,
    member_id BIGINT,
    member_name VARCHAR(100),
    member_phone VARCHAR(50),
    member_card_account_id BIGINT,
    member_card_type_name VARCHAR(100),
    is_bind_member BOOLEAN,
    member_discount_amount NUMERIC(18,2),
    consume_money NUMERIC(18,2),
    table_charge_money NUMERIC(18,2),
    goods_money NUMERIC(18,2),
    real_goods_money NUMERIC(18,2),
    assistant_pd_money NUMERIC(18,2),
    assistant_cx_money NUMERIC(18,2),
    adjust_amount NUMERIC(18,2),
    pay_amount NUMERIC(18,2),
    balance_amount NUMERIC(18,2),
    recharge_card_amount NUMERIC(18,2),
    gift_card_amount NUMERIC(18,2),
    coupon_amount NUMERIC(18,2),
    rounding_amount NUMERIC(18,2),
    point_amount NUMERIC(18,2),
    electricity_money NUMERIC(18,2),
    real_electricity_money NUMERIC(18,2),
    electricity_adjust_money NUMERIC(18,2),
    pl_coupon_sale_amount NUMERIC(18,2),
    mervou_sales_amount NUMERIC(18,2),
    PRIMARY KEY (order_settle_id)
);

COMMENT ON TABLE billiards_dwd.dwd_settlement_head IS 'DWD 明细事实表：dwd_settlement_head。ODS 来源表：billiards_ods.settlement_records（对应 JSON：settlement_records.json；分析：settlement_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - id。     【JSON字段】settlement_records.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - tenantid。     【JSON字段】settlement_records.json - $ - tenantid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - siteid。     【JSON字段】settlement_records.json - $ - siteid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - sitename。     【JSON字段】settlement_records.json - $ - sitename。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - tableid。     【JSON字段】settlement_records.json - $ - tableid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - settlename。     【JSON字段】settlement_records.json - $ - settlename。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】settlement_records - settlerelateid。     【JSON字段】settlement_records.json - $ - settlerelateid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】settlement_records - createtime。     【JSON字段】settlement_records.json - $ - createtime。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】settlement_records - paytime。     【JSON字段】settlement_records.json - $ - paytime。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_type IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】settlement_records - settletype。     【JSON字段】settlement_records.json - $ - settletype。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.revoke_order_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - revokeorderid。     【JSON字段】settlement_records.json - $ - revokeorderid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - memberid。     【JSON字段】settlement_records.json - $ - memberid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - membername。     【JSON字段】settlement_records.json - $ - membername。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_phone IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】settlement_records - memberphone。     【JSON字段】settlement_records.json - $ - memberphone。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_account_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - tenantmembercardid。     【JSON字段】settlement_records.json - $ - tenantmembercardid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_type_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - membercardtypename。     【JSON字段】settlement_records.json - $ - membercardtypename。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.is_bind_member IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】settlement_records - isbindmember。     【JSON字段】settlement_records.json - $ - isbindmember。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - memberdiscountamount。     【JSON字段】settlement_records.json - $ - memberdiscountamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.consume_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - consumemoney。     【JSON字段】settlement_records.json - $ - consumemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_charge_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - tablechargemoney。     【JSON字段】settlement_records.json - $ - tablechargemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.goods_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - goodsmoney。     【JSON字段】settlement_records.json - $ - goodsmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.real_goods_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - realgoodsmoney。     【JSON字段】settlement_records.json - $ - realgoodsmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_pd_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - assistantpdmoney。     【JSON字段】settlement_records.json - $ - assistantpdmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_cx_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - assistantcxmoney。     【JSON字段】settlement_records.json - $ - assistantcxmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.adjust_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - adjustamount。     【JSON字段】settlement_records.json - $ - adjustamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - payamount。     【JSON字段】settlement_records.json - $ - payamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.balance_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - balanceamount。     【JSON字段】settlement_records.json - $ - balanceamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.recharge_card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - rechargecardamount。     【JSON字段】settlement_records.json - $ - rechargecardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.gift_card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - giftcardamount。     【JSON字段】settlement_records.json - $ - giftcardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.coupon_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - couponamount。     【JSON字段】settlement_records.json - $ - couponamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.rounding_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - roundingamount。     【JSON字段】settlement_records.json - $ - roundingamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.point_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - pointamount。     【JSON字段】settlement_records.json - $ - pointamount。';


CREATE TABLE IF NOT EXISTS dwd_settlement_head_ex (
    order_settle_id BIGINT,
    serial_number INTEGER,
    settle_status INTEGER,
    can_be_revoked BOOLEAN,
    revoke_order_name VARCHAR(100),
    revoke_time TIMESTAMPTZ,
    is_first_order BOOLEAN,
    service_money NUMERIC(18,2),
    cash_amount NUMERIC(18,2),
    card_amount NUMERIC(18,2),
    online_amount NUMERIC(18,2),
    refund_amount NUMERIC(18,2),
    prepay_money NUMERIC(18,2),
    payment_method INTEGER,
    coupon_sale_amount NUMERIC(18,2),
    all_coupon_discount NUMERIC(18,2),
    goods_promotion_money NUMERIC(18,2),
    assistant_promotion_money NUMERIC(18,2),
    activity_discount NUMERIC(18,2),
    assistant_manual_discount NUMERIC(18,2),
    point_discount_price NUMERIC(18,2),
    point_discount_cost NUMERIC(18,2),
    is_use_coupon BOOLEAN,
    is_use_discount BOOLEAN,
    is_activity BOOLEAN,
    operator_name VARCHAR(100),
    salesman_name VARCHAR(100),
    order_remark VARCHAR(255),
    operator_id BIGINT,
    salesman_user_id BIGINT,
    PRIMARY KEY (order_settle_id)
);

COMMENT ON TABLE billiards_dwd.dwd_settlement_head_ex IS 'DWD 明细事实表（扩展字段表）：dwd_settlement_head_ex。ODS 来源表：billiards_ods.settlement_records（对应 JSON：settlement_records.json；分析：settlement_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - id。     【JSON字段】settlement_records.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.serial_number IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】settlement_records - serialnumber。     【JSON字段】settlement_records.json - $ - serialnumber。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.settle_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】NULL（状态枚举字段，用于标识业务状态）。     【ODS来源】settlement_records - settlestatus。     【JSON字段】settlement_records.json - $ - settlestatus。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.can_be_revoked IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】settlement_records - canberevoked（派生：BOOLEAN(canberevoked)）。     【JSON字段】settlement_records.json - $ - canberevoked（派生：BOOLEAN(canberevoked)）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_order_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - revokeordername。     【JSON字段】settlement_records.json - $ - revokeordername。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】settlement_records - revoketime。     【JSON字段】settlement_records.json - $ - revoketime。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_first_order IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】settlement_records - isfirst（派生：BOOLEAN(isfirst)）。     【JSON字段】settlement_records.json - $ - isfirst（派生：BOOLEAN(isfirst)）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.service_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - servicemoney。     【JSON字段】settlement_records.json - $ - servicemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.cash_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - cashamount。     【JSON字段】settlement_records.json - $ - cashamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - cardamount。     【JSON字段】settlement_records.json - $ - cardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.online_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - onlineamount。     【JSON字段】settlement_records.json - $ - onlineamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.refund_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - refundamount。     【JSON字段】settlement_records.json - $ - refundamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.prepay_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - prepaymoney。     【JSON字段】settlement_records.json - $ - prepaymoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.payment_method IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】settlement_records - paymentmethod。     【JSON字段】settlement_records.json - $ - paymentmethod。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.coupon_sale_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - couponsaleamount。     【JSON字段】settlement_records.json - $ - couponsaleamount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.all_coupon_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】settlement_records - allcoupondiscount。     【JSON字段】settlement_records.json - $ - allcoupondiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.goods_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - goodspromotionmoney。     【JSON字段】settlement_records.json - $ - goodspromotionmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - assistantpromotionmoney。     【JSON字段】settlement_records.json - $ - assistantpromotionmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.activity_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】settlement_records - activitydiscount。     【JSON字段】settlement_records.json - $ - activitydiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_manual_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】settlement_records - assistantmanualdiscount。     【JSON字段】settlement_records.json - $ - assistantmanualdiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - pointdiscountprice。     【JSON字段】settlement_records.json - $ - pointdiscountprice。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_cost IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】settlement_records - pointdiscountcost。     【JSON字段】settlement_records.json - $ - pointdiscountcost。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_coupon IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】settlement_records - isusecoupon（派生：BOOLEAN(isusecoupon)）。     【JSON字段】settlement_records.json - $ - isusecoupon（派生：BOOLEAN(isusecoupon)）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】settlement_records - isusediscount（派生：BOOLEAN(isusediscount)）。     【JSON字段】settlement_records.json - $ - isusediscount（派生：BOOLEAN(isusediscount)）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_activity IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】settlement_records - isactivity（派生：BOOLEAN(isactivity)）。     【JSON字段】settlement_records.json - $ - isactivity（派生：BOOLEAN(isactivity)）。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - operatorname。     【JSON字段】settlement_records.json - $ - operatorname。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】settlement_records - salesmanname。     【JSON字段】settlement_records.json - $ - salesmanname。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_remark IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】settlement_records - orderremark。     【JSON字段】settlement_records.json - $ - orderremark。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - operatorid。     【JSON字段】settlement_records.json - $ - operatorid。';
COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】settlement_records - salesmanuserid。     【JSON字段】settlement_records.json - $ - salesmanuserid。';


CREATE TABLE IF NOT EXISTS dwd_table_fee_log (
    table_fee_log_id BIGINT,
    order_trade_no BIGINT,
    order_settle_id BIGINT,
    order_pay_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    site_table_id BIGINT,
    site_table_area_id BIGINT,
    site_table_area_name VARCHAR(64),
    tenant_table_area_id BIGINT,
    member_id BIGINT,
    ledger_name VARCHAR(64),
    ledger_unit_price NUMERIC(18,2),
    ledger_count INTEGER,
    ledger_amount NUMERIC(18,2),
    real_table_charge_money NUMERIC(18,2),
    coupon_promotion_amount NUMERIC(18,2),
    member_discount_amount NUMERIC(18,2),
    adjust_amount NUMERIC(18,2),
    real_table_use_seconds INTEGER,
    add_clock_seconds INTEGER,
    start_use_time TIMESTAMPTZ,
    ledger_end_time TIMESTAMPTZ,
    create_time TIMESTAMPTZ,
    ledger_status INTEGER,
    is_single_order INTEGER,
    is_delete INTEGER,
    activity_discount_amount NUMERIC(18,2),
    real_service_money NUMERIC(18,2),
    PRIMARY KEY (table_fee_log_id)
);

COMMENT ON TABLE billiards_dwd.dwd_table_fee_log IS 'DWD 明细事实表：dwd_table_fee_log。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.table_fee_log_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029058885（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】2957858167230149（明细字段，用于记录事实取值）。     【ODS来源】table_fee_transactions - order_trade_no。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957922914357125（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - order_settle_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_pay_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - order_pay_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - tenant_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - site_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793003705192517（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - site_table_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791963794329671（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - site_table_area_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A区（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_transactions - site_table_area_name。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791960001957765（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - tenant_table_area_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - member_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A17（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_transactions - ledger_name。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_unit_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - ledger_unit_price。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】table_fee_transactions - ledger_count。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - ledger_amount。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_charge_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - real_table_charge_money。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.coupon_promotion_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - coupon_promotion_amount。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - member_discount_amount。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.adjust_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - adjust_amount。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_use_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】table_fee_transactions - real_table_use_seconds。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.add_clock_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】0（数量/时长字段，用于统计与计量）。     【ODS来源】table_fee_transactions - add_clock_seconds。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.start_use_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 22:28:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_transactions - start_use_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:28:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_transactions - ledger_end_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_transactions - create_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】table_fee_transactions - ledger_status。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_single_order IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】table_fee_transactions - is_single_order。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】table_fee_transactions - is_delete。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。';


CREATE TABLE IF NOT EXISTS dwd_table_fee_log_ex (
    table_fee_log_id BIGINT,
    operator_name VARCHAR(64),
    salesman_name VARCHAR(64),
    used_card_amount NUMERIC(18,2),
    service_money NUMERIC(18,2),
    mgmt_fee NUMERIC(18,2),
    fee_total NUMERIC(18,2),
    ledger_start_time TIMESTAMPTZ,
    last_use_time TIMESTAMPTZ,
    operator_id BIGINT,
    salesman_user_id BIGINT,
    salesman_org_id BIGINT,
    order_consumption_type INTEGER,
    PRIMARY KEY (table_fee_log_id)
);

COMMENT ON TABLE billiards_dwd.dwd_table_fee_log_ex IS 'DWD 明细事实表（扩展字段表）：dwd_table_fee_log_ex。ODS 来源表：billiards_ods.table_fee_transactions（对应 JSON：table_fee_transactions.json；分析：table_fee_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.table_fee_log_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029058885（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_transactions - operator_name。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_transactions - salesman_name。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.used_card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - used_card_amount。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - used_card_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.service_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - service_money。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - service_money。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.mgmt_fee IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - mgmt_fee。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - mgmt_fee。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.fee_total IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_transactions - fee_total。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - fee_total。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.ledger_start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 22:28:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_transactions - ledger_start_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_start_time。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.last_use_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:28:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_transactions - last_use_time。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - last_use_time。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - operator_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - salesman_user_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_user_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_transactions - salesman_org_id。     【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_org_id。';


CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust (
    table_fee_adjust_id BIGINT,
    order_trade_no BIGINT,
    order_settle_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    table_id BIGINT,
    table_area_id BIGINT,
    table_area_name VARCHAR(64),
    tenant_table_area_id BIGINT,
    ledger_amount NUMERIC(18,2),
    ledger_status INTEGER,
    is_delete INTEGER,
    adjust_time TIMESTAMPTZ,
    table_name TEXT,
    table_price NUMERIC(18,2),
    charge_free BOOLEAN,
    PRIMARY KEY (table_fee_adjust_id)
);

COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust IS 'DWD 明细事实表：dwd_table_fee_adjust。ODS 来源表：billiards_ods.table_fee_discount_records（对应 JSON：table_fee_discount_records.json；分析：table_fee_discount_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_fee_adjust_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913441881989（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】2957784612605829（明细字段，用于记录事实取值）。     【ODS来源】table_fee_discount_records - order_trade_no。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913171693253（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - order_settle_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - tenant_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - site_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793020259897413（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - site_table_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791961347968901（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - tenant_table_area_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_discount_records - tableprofile.table_area_name。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tableprofile.table_area_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791961347968901（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - tenant_table_area_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】148.15（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】table_fee_discount_records - ledger_amount。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】table_fee_discount_records - ledger_status。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】table_fee_discount_records - is_delete。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.adjust_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:25:11（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】table_fee_discount_records - create_time。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。';


CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_ex (
    table_fee_adjust_id BIGINT,
    adjust_type INTEGER,
    ledger_count INTEGER,
    ledger_name VARCHAR(128),
    applicant_name VARCHAR(64),
    operator_name VARCHAR(64),
    applicant_id BIGINT,
    operator_id BIGINT,
    area_type_id BIGINT,
    site_table_area_id BIGINT,
    site_table_area_name TEXT,
    site_name TEXT,
    tenant_name TEXT,
    PRIMARY KEY (table_fee_adjust_id)
);

COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust_ex IS 'DWD 明细事实表（扩展字段表）：dwd_table_fee_adjust_ex。ODS 来源表：billiards_ods.table_fee_discount_records（对应 JSON：table_fee_discount_records.json；分析：table_fee_discount_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.table_fee_adjust_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913441881989（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.adjust_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】table_fee_discount_records - adjust_type。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - adjust_type。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】table_fee_discount_records - ledger_count。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_count。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_discount_records - ledger_name。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_discount_records - applicant_name。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】table_fee_discount_records - operator_name。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_name。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - applicant_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】table_fee_discount_records - operator_id。     【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_id。';


CREATE TABLE IF NOT EXISTS dwd_store_goods_sale (
    store_goods_sale_id BIGINT,
    order_trade_no BIGINT,
    order_settle_id BIGINT,
    order_pay_id BIGINT,
    order_goods_id BIGINT,
    site_id BIGINT,
    tenant_id BIGINT,
    site_goods_id BIGINT,
    tenant_goods_id BIGINT,
    tenant_goods_category_id BIGINT,
    tenant_goods_business_id BIGINT,
    site_table_id BIGINT,
    ledger_name VARCHAR(200),
    ledger_group_name VARCHAR(100),
    ledger_unit_price NUMERIC(18,2),
    ledger_count INTEGER,
    ledger_amount NUMERIC(18,2),
    discount_money NUMERIC(18,2),
    discount_price NUMERIC(18,2),
    real_goods_money NUMERIC(18,2),
    cost_money NUMERIC(18,2),
    ledger_status INTEGER,
    is_delete INTEGER,
    create_time TIMESTAMPTZ,
    coupon_share_money NUMERIC(18,2),
    PRIMARY KEY (store_goods_sale_id)
);

COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale IS 'DWD 明细事实表：dwd_store_goods_sale。ODS 来源表：billiards_ods.store_goods_sales_records（对应 JSON：store_goods_sales_records.json；分析：store_goods_sales_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.store_goods_sale_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029550406（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】2957858167230149（明细字段，用于记录事实取值）。     【ODS来源】store_goods_sales_records - order_trade_no。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957922914357125（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - order_settle_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_pay_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - order_pay_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957858456391557（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - order_goods_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - site_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - tenant_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793026176012357（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - site_goods_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2792115932417925（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - tenant_goods_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_category_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528350540（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - tenant_goods_category_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_business_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683528317768（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - tenant_goods_business_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793003705192517（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - site_table_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】哇哈哈矿泉水（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - ledger_name。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_group_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】酒水（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - ledger_group_name。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_unit_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】5.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - ledger_unit_price。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】1（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_sales_records - ledger_count。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】5.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - ledger_amount。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.discount_money IS '【说明】折扣金额，即原价被减免的金额部分。     【示例】0.0。     【ODS来源】store_goods_sales_records - discount_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.discount_price IS '【说明】折后单价（元/单位），即应用折扣后的商品单价。     【示例】5.00。     【ODS来源】store_goods_sales_records - discount_price。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_price。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.real_goods_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】5.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - real_goods_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.cost_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.01（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - cost_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】store_goods_sales_records - ledger_status。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】store_goods_sales_records - is_delete。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】store_goods_sales_records - create_time。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。';


CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_ex (
    store_goods_sale_id BIGINT,
    legacy_order_goods_id BIGINT,
    site_name TEXT,
    legacy_site_id BIGINT,
    goods_remark TEXT,
    option_value_name TEXT,
    operator_name TEXT,
    open_salesman_flag INTEGER,
    salesman_user_id BIGINT,
    salesman_name TEXT,
    salesman_role_id BIGINT,
    salesman_org_id BIGINT,
    discount_money NUMERIC(18,2),
    returns_number INTEGER,
    coupon_deduct_money NUMERIC(18,2),
    member_discount_amount NUMERIC(18,2),
    point_discount_money NUMERIC(18,2),
    point_discount_money_cost NUMERIC(18,2),
    package_coupon_id BIGINT,
    order_coupon_id BIGINT,
    member_coupon_id BIGINT,
    option_price NUMERIC(18,2),
    option_member_discount_money NUMERIC(18,2),
    option_coupon_deduct_money NUMERIC(18,2),
    push_money NUMERIC(18,2),
    is_single_order INTEGER,
    sales_type INTEGER,
    operator_id BIGINT,
    PRIMARY KEY (store_goods_sale_id)
);

COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale_ex IS 'DWD 明细事实表（扩展字段表）：dwd_store_goods_sale_ex。ODS 来源表：billiards_ods.store_goods_sales_records（对应 JSON：store_goods_sales_records.json；分析：store_goods_sales_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.store_goods_sale_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029550406（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_order_goods_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957858456391557（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - order_goods_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - siteName。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - siteName。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - site_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.goods_remark IS '【说明】明细字段，用于记录事实取值。     【示例】哇哈哈矿泉水（明细字段，用于记录事实取值）。     【ODS来源】store_goods_sales_records - goods_remark。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - goods_remark。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_value_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - option_value_name。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_value_name。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - operator_name。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_name。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.open_salesman_flag IS '【说明】明细字段，用于记录事实取值。     【示例】2（明细字段，用于记录事实取值）。     【ODS来源】store_goods_sales_records - openSalesman。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - openSalesman。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - salesman_user_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_user_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】store_goods_sales_records - salesman_name。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_name。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_role_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - salesman_role_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_role_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - sales_man_org_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_man_org_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.discount_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - discount_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.returns_number IS '【说明】数量/时长字段，用于统计与计量。     【示例】0（数量/时长字段，用于统计与计量）。     【ODS来源】store_goods_sales_records - returns_number。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - returns_number。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.coupon_deduct_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - coupon_deduct_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - coupon_deduct_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - member_discount_amount。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_discount_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - point_discount_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money_cost IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - point_discount_money_cost。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money_cost。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.package_coupon_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - package_coupon_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - package_coupon_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.order_coupon_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - order_coupon_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_coupon_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_coupon_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - member_coupon_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_coupon_id。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - option_price。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_price。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_member_discount_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - option_member_discount_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_member_discount_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_coupon_deduct_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - option_coupon_deduct_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_coupon_deduct_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.push_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】store_goods_sales_records - push_money。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - push_money。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.is_single_order IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】store_goods_sales_records - is_single_order。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_single_order。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.sales_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】store_goods_sales_records - sales_type。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_type。';
COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】store_goods_sales_records - operator_id。     【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_id。';


CREATE TABLE IF NOT EXISTS dwd_assistant_service_log (
    assistant_service_id BIGINT,
    order_trade_no BIGINT,
    order_settle_id BIGINT,
    order_pay_id BIGINT,
    order_assistant_id BIGINT,
    order_assistant_type INTEGER,
    tenant_id BIGINT,
    site_id BIGINT,
    site_table_id BIGINT,
    tenant_member_id BIGINT,
    system_member_id BIGINT,
    assistant_no VARCHAR(64),
    nickname VARCHAR(64),
    site_assistant_id BIGINT,
    user_id BIGINT,
    assistant_team_id BIGINT,
    person_org_id BIGINT,
    assistant_level INTEGER,
    level_name VARCHAR(64),
    skill_id BIGINT,
    skill_name VARCHAR(64),
    ledger_unit_price NUMERIC(10,2),
    ledger_amount NUMERIC(10,2),
    projected_income NUMERIC(10,2),
    coupon_deduct_money NUMERIC(10,2),
    income_seconds INTEGER,
    real_use_seconds INTEGER,
    add_clock INTEGER,
    create_time TIMESTAMPTZ,
    start_use_time TIMESTAMPTZ,
    last_use_time TIMESTAMPTZ,
    is_delete INTEGER,
    real_service_money NUMERIC(18,2),
    PRIMARY KEY (assistant_service_id)
);

COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log IS 'DWD 明细事实表：dwd_assistant_service_log。ODS 来源表：billiards_ods.assistant_service_records（对应 JSON：assistant_service_records.json；分析：assistant_service_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_service_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913441292165（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】2957784612605829（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - order_trade_no。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913171693253（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - order_settle_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_settle_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_pay_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - order_pay_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_pay_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957788717240005（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - order_assistant_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - order_assistant_type。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - tenant_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - site_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793020259897413（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - site_table_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - tenant_member_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.system_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - system_member_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - system_member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_no IS '【说明】明细字段，用于记录事实取值。     【示例】27（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - assistantNo。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantNo。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.nickname IS '【说明】名称字段，用于展示与辅助识别。     【示例】泡芙（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - nickname。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - nickname。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_assistant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957788717240005（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - order_assistant_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2946266868976453（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - user_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - user_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_team_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2792011585884037（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - assistant_team_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.person_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2946266869336901（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - person_org_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - person_org_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_level IS '【说明】明细字段，用于记录事实取值。     【示例】10（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - assistant_level。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_level。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.level_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】初级（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - levelName。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - levelName。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683529513797（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - skill_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】基础课（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - skillName。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skillName。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_unit_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】98.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - ledger_unit_price。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】206.67（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - ledger_amount。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.projected_income IS '【说明】明细字段，用于记录事实取值。     【示例】168.0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - projected_income。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - projected_income。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.coupon_deduct_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - coupon_deduct_money。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.income_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】7560（数量/时长字段，用于统计与计量）。     【ODS来源】assistant_service_records - income_seconds。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - income_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.real_use_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】7592（数量/时长字段，用于统计与计量）。     【ODS来源】assistant_service_records - real_use_seconds。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.add_clock IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - add_clock。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - add_clock。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:25:11（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - create_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.start_use_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 21:18:18（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - start_use_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - start_use_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.last_use_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:24:50（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - last_use_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - last_use_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_service_records - is_delete。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_delete。';


CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_ex (
    assistant_service_id BIGINT,
    table_name VARCHAR(64),
    assistant_name VARCHAR(64),
    ledger_name VARCHAR(128),
    ledger_group_name VARCHAR(128),
    ledger_count INTEGER,
    member_discount_amount NUMERIC(10,2),
    manual_discount_amount NUMERIC(10,2),
    service_money NUMERIC(10,2),
    returns_clock INTEGER,
    ledger_start_time TIMESTAMPTZ,
    ledger_end_time TIMESTAMPTZ,
    ledger_status INTEGER,
    is_confirm INTEGER,
    is_single_order INTEGER,
    is_not_responding INTEGER,
    is_trash INTEGER,
    trash_applicant_id BIGINT,
    trash_applicant_name VARCHAR(64),
    trash_reason VARCHAR(255),
    salesman_user_id BIGINT,
    salesman_name VARCHAR(64),
    salesman_org_id BIGINT,
    skill_grade INTEGER,
    service_grade INTEGER,
    composite_grade NUMERIC(5,2),
    sum_grade NUMERIC(10,2),
    get_grade_times INTEGER,
    grade_status INTEGER,
    composite_grade_time TIMESTAMPTZ,
    assistant_team_name TEXT,
    operator_id BIGINT,
    operator_name TEXT,
    PRIMARY KEY (assistant_service_id)
);

COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log_ex IS 'DWD 明细事实表（扩展字段表）：dwd_assistant_service_log_ex。ODS 来源表：billiards_ods.assistant_service_records（对应 JSON：assistant_service_records.json；分析：assistant_service_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_service_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957913441292165（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.table_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】S1（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - tableName。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tableName。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】何海婷（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - assistantName。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantName。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】27-泡芙（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - ledger_name。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_name。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_group_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - ledger_group_name。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_group_name。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】7592（数量/时长字段，用于统计与计量）。     【ODS来源】assistant_service_records - ledger_count。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_count。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.member_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - member_discount_amount。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - member_discount_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.manual_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - manual_discount_amount。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - manual_discount_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】assistant_service_records - service_money。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_money。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.returns_clock IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - returns_clock。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - returns_clock。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_start_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 21:18:18（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - ledger_start_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_start_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_end_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:24:50（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - ledger_end_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_end_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_service_records - ledger_status。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_status。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_confirm IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】2（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_service_records - is_confirm。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_single_order IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_service_records - is_single_order。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_single_order。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_not_responding IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_service_records - is_not_responding。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_not_responding。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_trash IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】assistant_service_records - is_trash。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_trash。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - trash_applicant_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - trash_applicant_name。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_name。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_reason IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - trash_reason。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_reason。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - salesman_user_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_user_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】assistant_service_records - salesman_name。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_name。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】assistant_service_records - salesman_org_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_org_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.skill_grade IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - skill_grade。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_grade。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_grade IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - service_grade。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_grade。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade IS '【说明】明细字段，用于记录事实取值。     【示例】0.0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - composite_grade。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.sum_grade IS '【说明】明细字段，用于记录事实取值。     【示例】0.0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - sum_grade。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - sum_grade。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.get_grade_times IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】assistant_service_records - get_grade_times。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - get_grade_times。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.grade_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】assistant_service_records - grade_status。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - grade_status。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】0001-01-01 00:00:00（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】assistant_service_records - composite_grade_time。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade_time。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.operator_id IS '【说明】操作人 ID，记录执行该助教服务操作的系统用户。     【示例】2790687322443013。     【ODS来源】assistant_service_records - operator_id。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.operator_name IS '【说明】操作人姓名，用于展示与辅助识别。     【示例】收银员:郑丽珊。     【ODS来源】assistant_service_records - operator_name。     【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_name。';


-- [已删除] dwd_assistant_trash_event 和 dwd_assistant_trash_event_ex
-- 原因：助教废除链路已清理，废除判断改用 dwd_assistant_service_log_ex.is_trash
-- 参见迁移脚本：2026-02-22__drop_assistant_abolish_tables.sql


CREATE TABLE IF NOT EXISTS dwd_member_balance_change (
    balance_change_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    register_site_id BIGINT,
    tenant_member_id BIGINT,
    system_member_id BIGINT,
    tenant_member_card_id BIGINT,
    card_type_id BIGINT,
    card_type_name VARCHAR(32),
    member_name VARCHAR(64),
    member_mobile VARCHAR(20),
    balance_before NUMERIC(18,2),
    change_amount NUMERIC(18,2),
    balance_after NUMERIC(18,2),
    from_type INTEGER,
    payment_method INTEGER,
    change_time TIMESTAMPTZ,
    is_delete INTEGER,
    remark VARCHAR(255),
    principal_before NUMERIC(18,2),
    principal_after NUMERIC(18,2),
    principal_change_amount NUMERIC(18,2),
    PRIMARY KEY (balance_change_id)
);

COMMENT ON TABLE billiards_dwd.dwd_member_balance_change IS 'DWD 明细事实表：dwd_member_balance_change。ODS 来源表：billiards_ods.member_balance_changes（对应 JSON：member_balance_changes.json；分析：member_balance_changes-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_change_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957881605869253（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - tenant_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - site_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.register_site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - register_site_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2799212845565701（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - tenant_member_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.system_member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2799212844549893（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - system_member_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_card_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2799219999295237（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - tenant_member_card_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793249295533893（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - card_type_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】储值卡（名称字段，用于展示与辅助识别）。     【ODS来源】member_balance_changes - memberCardTypeName。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】曾丹烨（名称字段，用于展示与辅助识别）。     【ODS来源】member_balance_changes - memberName。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberName。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_mobile IS '【说明】明细字段，用于记录事实取值。     【示例】13922213242（明细字段，用于记录事实取值）。     【ODS来源】member_balance_changes - memberMobile。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_before IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】816.3（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_balance_changes - before。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - before。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】-120.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_balance_changes - account_data。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - account_data。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_after IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】696.3（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_balance_changes - after。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - after。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.from_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】member_balance_changes - from_type。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - from_type。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.payment_method IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】member_balance_changes - payment_method。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - payment_method。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 22:52:48（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】member_balance_changes - create_time。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】member_balance_changes - is_delete。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.remark IS '【说明】明细字段，用于记录事实取值。     【示例】充值退款（明细字段，用于记录事实取值）。     【ODS来源】member_balance_changes - remark。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - remark。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.principal_before IS '【说明】金额字段：本金变动前余额。     【ODS来源】member_balance_changes - principal_before。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - principal_before。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.principal_after IS '【说明】金额字段：本金变动后余额。     【ODS来源】member_balance_changes - principal_after。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - principal_after。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.principal_change_amount IS '【说明】金额字段：本金变动金额（principal_after - principal_before），ETL 计算字段。';


CREATE TABLE IF NOT EXISTS dwd_member_balance_change_ex (
    balance_change_id BIGINT,
    pay_site_name VARCHAR(64),
    register_site_name VARCHAR(64),
    refund_amount NUMERIC(18,2),
    operator_id BIGINT,
    operator_name VARCHAR(64),
    principal_data TEXT,
    relate_id BIGINT,
    PRIMARY KEY (balance_change_id)
);

COMMENT ON TABLE billiards_dwd.dwd_member_balance_change_ex IS 'DWD 明细事实表（扩展字段表）：dwd_member_balance_change_ex。ODS 来源表：billiards_ods.member_balance_changes（对应 JSON：member_balance_changes.json；分析：member_balance_changes-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.balance_change_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957881605869253（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.pay_site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】member_balance_changes - paySiteName。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - paySiteName。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.register_site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】member_balance_changes - registerSiteName。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - registerSiteName。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.refund_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】member_balance_changes - refund_amount。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - refund_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】member_balance_changes - operator_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】member_balance_changes - operator_name。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_name。';
COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.relate_id IS '【说明】关联业务单据 ID，指向触发本次余额变动的业务记录（如充值单、订单、结算单等），按 from_type 不同指向不同表。     【示例】2957881518788421。     【ODS来源】member_balance_changes - relate_id。     【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - relate_id。';


CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption (
    redemption_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    table_id BIGINT,
    tenant_table_area_id BIGINT,
    table_charge_seconds INTEGER,
    order_trade_no BIGINT,
    order_settle_id BIGINT,
    order_coupon_id BIGINT,
    coupon_origin_id BIGINT,
    promotion_activity_id BIGINT,
    promotion_coupon_id BIGINT,
    order_coupon_channel INTEGER,
    ledger_unit_price NUMERIC(18,2),
    ledger_count INTEGER,
    ledger_amount NUMERIC(18,2),
    coupon_money NUMERIC(18,2),
    promotion_seconds INTEGER,
    coupon_code VARCHAR(64),
    is_single_order INTEGER,
    is_delete INTEGER,
    ledger_name VARCHAR(128),
    create_time TIMESTAMPTZ,
    member_discount_money NUMERIC(18,2),
    coupon_sale_id BIGINT,
    PRIMARY KEY (redemption_id)
);

COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption IS 'DWD 明细事实表：dwd_groupbuy_redemption。ODS 来源表：billiards_ods.group_buy_redemption_records（对应 JSON：group_buy_redemption_records.json；分析：group_buy_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.redemption_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029615941（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - tenant_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - site_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793003705192517（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - table_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_table_area_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2791960001957765（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - tenant_table_area_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_charge_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】group_buy_redemption_records - table_charge_seconds。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_trade_no IS '【说明】明细字段，用于记录事实取值。     【示例】2957858167230149（明细字段，用于记录事实取值）。     【ODS来源】group_buy_redemption_records - order_trade_no。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_settle_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957922914357125（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - order_settle_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957858168229573（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - order_coupon_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_origin_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957858168229573（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - coupon_origin_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_activity_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957858166460101（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - promotion_activity_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_coupon_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2798727423528005（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - promotion_coupon_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_channel IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】group_buy_redemption_records - order_coupon_channel。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_unit_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】29.9（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - ledger_unit_price。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_count IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】group_buy_redemption_records - ledger_count。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - ledger_amount。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - coupon_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_seconds IS '【说明】数量/时长字段，用于统计与计量。     【示例】3600（数量/时长字段，用于统计与计量）。     【ODS来源】group_buy_redemption_records - promotion_seconds。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_code IS '【说明】明细字段，用于记录事实取值。     【示例】0107892475999（明细字段，用于记录事实取值）。     【ODS来源】group_buy_redemption_records - coupon_code。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_single_order IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】1（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】group_buy_redemption_records - is_single_order。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】group_buy_redemption_records - is_delete。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】全天A区中八一小时（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - ledger_name。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】group_buy_redemption_records - create_time。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。';


CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_ex (
    redemption_id BIGINT,
    site_name VARCHAR(64),
    table_name VARCHAR(64),
    table_area_name VARCHAR(64),
    order_pay_id BIGINT,
    goods_option_price NUMERIC(18,2),
    goods_promotion_money NUMERIC(18,2),
    table_service_promotion_money NUMERIC(18,2),
    assistant_promotion_money NUMERIC(18,2),
    assistant_service_promotion_money NUMERIC(18,2),
    reward_promotion_money NUMERIC(18,2),
    recharge_promotion_money NUMERIC(18,2),
    offer_type INTEGER,
    ledger_status INTEGER,
    operator_id BIGINT,
    operator_name VARCHAR(64),
    salesman_user_id BIGINT,
    salesman_name VARCHAR(64),
    salesman_role_id BIGINT,
    salesman_org_id BIGINT,
    ledger_group_name VARCHAR(128),
    table_share_money NUMERIC(18,2),
    table_service_share_money NUMERIC(18,2),
    goods_share_money NUMERIC(18,2),
    good_service_share_money NUMERIC(18,2),
    assistant_share_money NUMERIC(18,2),
    assistant_service_share_money NUMERIC(18,2),
    recharge_share_money NUMERIC(18,2),
    PRIMARY KEY (redemption_id)
);

COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption_ex IS 'DWD 明细事实表（扩展字段表）：dwd_groupbuy_redemption_ex。ODS 来源表：billiards_ods.group_buy_redemption_records（对应 JSON：group_buy_redemption_records.json；分析：group_buy_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.redemption_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924029615941（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.site_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - siteName。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - siteName。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A17（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - tableName。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableName。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_area_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】A区（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - tableAreaName。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableAreaName。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.order_pay_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - order_pay_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_pay_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_option_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - goodsOptionPrice。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goodsOptionPrice。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - goods_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goods_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_service_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - table_service_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_service_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - assistant_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_service_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - assistant_service_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_service_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.reward_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - reward_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - reward_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.recharge_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】group_buy_redemption_records - recharge_promotion_money。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - recharge_promotion_money。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.offer_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】group_buy_redemption_records - offer_type。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - offer_type。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】group_buy_redemption_records - ledger_status。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_status。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - operator_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - operator_name。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_name。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - salesman_user_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_user_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - salesman_name。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_name。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_role_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - salesman_role_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_role_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_org_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】group_buy_redemption_records - sales_man_org_id。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - sales_man_org_id。';
COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_group_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】group_buy_redemption_records - ledger_group_name。     【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_group_name。';


CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption (
    platform_coupon_redemption_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    coupon_code VARCHAR(64),
    coupon_channel INTEGER,
    coupon_name VARCHAR(200),
    sale_price NUMERIC(10,2),
    coupon_money NUMERIC(10,2),
    coupon_free_time INTEGER,
    channel_deal_id BIGINT,
    deal_id BIGINT,
    group_package_id BIGINT,
    site_order_id BIGINT,
    table_id BIGINT,
    certificate_id VARCHAR(64),
    verify_id VARCHAR(64),
    use_status INTEGER,
    is_delete INTEGER,
    create_time TIMESTAMPTZ,
    consume_time TIMESTAMPTZ,
    PRIMARY KEY (platform_coupon_redemption_id)
);

COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption IS 'DWD 明细事实表：dwd_platform_coupon_redemption。ODS 来源表：billiards_ods.platform_coupon_redemption_records（对应 JSON：platform_coupon_redemption_records.json；分析：platform_coupon_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957929042218501（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - id。     【JSON字段】platform_coupon_redemption_records.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - tenant_id。     【JSON字段】platform_coupon_redemption_records.json - $ - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - site_id。     【JSON字段】platform_coupon_redemption_records.json - $ - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_code IS '【说明】明细字段，用于记录事实取值。     【示例】0102701209726（明细字段，用于记录事实取值）。     【ODS来源】platform_coupon_redemption_records - coupon_code。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_code。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_channel IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】platform_coupon_redemption_records - coupon_channel。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_channel。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】【全天可用】中八桌球一小时（A区）（名称字段，用于展示与辅助识别）。     【ODS来源】platform_coupon_redemption_records - coupon_name。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_name。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.sale_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】29.9（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】platform_coupon_redemption_records - sale_price。     【JSON字段】platform_coupon_redemption_records.json - $ - sale_price。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】48.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】platform_coupon_redemption_records - coupon_money。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_money。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_free_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】0（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】platform_coupon_redemption_records - coupon_free_time。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_free_time。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.channel_deal_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】1128411555（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - channel_deal_id。     【JSON字段】platform_coupon_redemption_records.json - $ - channel_deal_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.deal_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】1345108507（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - deal_id。     【JSON字段】platform_coupon_redemption_records.json - $ - deal_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.group_package_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - group_package_id。     【JSON字段】platform_coupon_redemption_records.json - $ - group_package_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_order_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957929043037702（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - site_order_id。     【JSON字段】platform_coupon_redemption_records.json - $ - site_order_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2793001904918661（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - table_id。     【JSON字段】platform_coupon_redemption_records.json - $ - table_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.certificate_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】5008024789379597447（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - certificate_id。     【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.verify_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】7570689090418149418（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - verify_id。     【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.use_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】platform_coupon_redemption_records - use_status。     【JSON字段】platform_coupon_redemption_records.json - $ - use_status。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】platform_coupon_redemption_records - is_delete。     【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:41:03（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】platform_coupon_redemption_records - create_time。     【JSON字段】platform_coupon_redemption_records.json - $ - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.consume_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:41:04（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】platform_coupon_redemption_records - consume_time。     【JSON字段】platform_coupon_redemption_records.json - $ - consume_time。';


CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_ex (
    platform_coupon_redemption_id BIGINT,
    coupon_cover VARCHAR(255),
    coupon_remark VARCHAR(255),
    groupon_type INTEGER,
    operator_id BIGINT,
    operator_name VARCHAR(50),
    PRIMARY KEY (platform_coupon_redemption_id)
);

COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption_ex IS 'DWD 明细事实表（扩展字段表）：dwd_platform_coupon_redemption_ex。ODS 来源表：billiards_ods.platform_coupon_redemption_records（对应 JSON：platform_coupon_redemption_records.json；分析：platform_coupon_redemption_records-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.platform_coupon_redemption_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957929042218501（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - id。     【JSON字段】platform_coupon_redemption_records.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_cover IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】platform_coupon_redemption_records - coupon_cover。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_cover。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_remark IS '【说明】明细字段，用于记录事实取值。     【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==（明细字段，用于记录事实取值）。     【ODS来源】platform_coupon_redemption_records - coupon_remark。     【JSON字段】platform_coupon_redemption_records.json - $ - coupon_remark。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.groupon_type IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】platform_coupon_redemption_records - groupon_type。     【JSON字段】platform_coupon_redemption_records.json - $ - groupon_type。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790687322443013（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】platform_coupon_redemption_records - operator_id。     【JSON字段】platform_coupon_redemption_records.json - $ - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】收银员:郑丽珊（名称字段，用于展示与辅助识别）。     【ODS来源】platform_coupon_redemption_records - operator_name。     【JSON字段】platform_coupon_redemption_records.json - $ - operator_name。';


CREATE TABLE IF NOT EXISTS dwd_recharge_order (
    recharge_order_id BIGINT,
    tenant_id BIGINT,
    site_id BIGINT,
    member_id BIGINT,
    member_name_snapshot TEXT,
    member_phone_snapshot TEXT,
    tenant_member_card_id BIGINT,
    member_card_type_name TEXT,
    settle_relate_id BIGINT,
    settle_type INTEGER,
    settle_name TEXT,
    is_first INTEGER,
    pay_amount NUMERIC(18,2),
    refund_amount NUMERIC(18,2),
    point_amount NUMERIC(18,2),
    cash_amount NUMERIC(18,2),
    payment_method INTEGER,
    create_time TIMESTAMPTZ,
    pay_time TIMESTAMPTZ,
    pl_coupon_sale_amount NUMERIC(18,2),
    mervou_sales_amount NUMERIC(18,2),
    electricity_money NUMERIC(18,2),
    real_electricity_money NUMERIC(18,2),
    electricity_adjust_money NUMERIC(18,2),
    PRIMARY KEY (recharge_order_id)
);

COMMENT ON TABLE billiards_dwd.dwd_recharge_order IS 'DWD 明细事实表：dwd_recharge_order。ODS 来源表：billiards_ods.recharge_settlements（对应 JSON：recharge_settlements.json；分析：recharge_settlements-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.recharge_order_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - id。     【JSON字段】recharge_settlements.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - tenantid。     【JSON字段】recharge_settlements.json - $ - tenantid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - siteid。     【JSON字段】recharge_settlements.json - $ - siteid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - memberid。     【JSON字段】recharge_settlements.json - $ - memberid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_name_snapshot IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - membername。     【JSON字段】recharge_settlements.json - $ - membername。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_phone_snapshot IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - memberphone。     【JSON字段】recharge_settlements.json - $ - memberphone。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_member_card_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - tenantmembercardid。     【JSON字段】recharge_settlements.json - $ - tenantmembercardid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_card_type_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】recharge_settlements - membercardtypename。     【JSON字段】recharge_settlements.json - $ - membercardtypename。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_relate_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - settlerelateid。     【JSON字段】recharge_settlements.json - $ - settlerelateid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_type IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - settletype。     【JSON字段】recharge_settlements.json - $ - settletype。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】recharge_settlements - settlename。     【JSON字段】recharge_settlements.json - $ - settlename。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.is_first IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】recharge_settlements - isfirst。     【JSON字段】recharge_settlements.json - $ - isfirst。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - payamount。     【JSON字段】recharge_settlements.json - $ - payamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.refund_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - refundamount。     【JSON字段】recharge_settlements.json - $ - refundamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.point_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - pointamount。     【JSON字段】recharge_settlements.json - $ - pointamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.cash_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - cashamount。     【JSON字段】recharge_settlements.json - $ - cashamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.payment_method IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - paymentmethod。     【JSON字段】recharge_settlements.json - $ - paymentmethod。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】recharge_settlements - createtime。     【JSON字段】recharge_settlements.json - $ - createtime。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】recharge_settlements - paytime。     【JSON字段】recharge_settlements.json - $ - paytime。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pl_coupon_sale_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【ODS来源】recharge_settlements - plcouponsaleamount。     【JSON字段】recharge_settlements.json - $ - plcouponsaleamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.mervou_sales_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【ODS来源】recharge_settlements - mervousalesamount。     【JSON字段】recharge_settlements.json - $ - mervousalesamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.electricity_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【ODS来源】recharge_settlements - electricitymoney。     【JSON字段】recharge_settlements.json - $ - electricitymoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.real_electricity_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【ODS来源】recharge_settlements - realelectricitymoney。     【JSON字段】recharge_settlements.json - $ - realelectricitymoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.electricity_adjust_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【ODS来源】recharge_settlements - electricityadjustmoney。     【JSON字段】recharge_settlements.json - $ - electricityadjustmoney。';


CREATE TABLE IF NOT EXISTS dwd_recharge_order_ex (
    recharge_order_id BIGINT,
    site_name_snapshot TEXT,
    settle_status INTEGER,
    is_bind_member BOOLEAN,
    is_activity BOOLEAN,
    is_use_coupon BOOLEAN,
    is_use_discount BOOLEAN,
    can_be_revoked BOOLEAN,
    online_amount NUMERIC(18,2),
    balance_amount NUMERIC(18,2),
    card_amount NUMERIC(18,2),
    coupon_amount NUMERIC(18,2),
    recharge_card_amount NUMERIC(18,2),
    gift_card_amount NUMERIC(18,2),
    prepay_money NUMERIC(18,2),
    consume_money NUMERIC(18,2),
    goods_money NUMERIC(18,2),
    real_goods_money NUMERIC(18,2),
    table_charge_money NUMERIC(18,2),
    service_money NUMERIC(18,2),
    activity_discount NUMERIC(18,2),
    all_coupon_discount NUMERIC(18,2),
    goods_promotion_money NUMERIC(18,2),
    assistant_promotion_money NUMERIC(18,2),
    assistant_pd_money NUMERIC(18,2),
    assistant_cx_money NUMERIC(18,2),
    assistant_manual_discount NUMERIC(18,2),
    coupon_sale_amount NUMERIC(18,2),
    member_discount_amount NUMERIC(18,2),
    point_discount_price NUMERIC(18,2),
    point_discount_cost NUMERIC(18,2),
    adjust_amount NUMERIC(18,2),
    rounding_amount NUMERIC(18,2),
    operator_id BIGINT,
    operator_name_snapshot TEXT,
    salesman_user_id BIGINT,
    salesman_name TEXT,
    order_remark TEXT,
    table_id INTEGER,
    serial_number INTEGER,
    revoke_order_id BIGINT,
    revoke_order_name TEXT,
    revoke_time TIMESTAMPTZ,
    PRIMARY KEY (recharge_order_id)
);

COMMENT ON TABLE billiards_dwd.dwd_recharge_order_ex IS 'DWD 明细事实表（扩展字段表）：dwd_recharge_order_ex。ODS 来源表：billiards_ods.recharge_settlements（对应 JSON：recharge_settlements.json；分析：recharge_settlements-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_order_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - id。     【JSON字段】recharge_settlements.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.site_name_snapshot IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - sitename。     【JSON字段】recharge_settlements.json - $ - sitename。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.settle_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】NULL（状态枚举字段，用于标识业务状态）。     【ODS来源】recharge_settlements - settlestatus。     【JSON字段】recharge_settlements.json - $ - settlestatus。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_bind_member IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】recharge_settlements - isbindmember（派生：BOOLEAN(isbindmember)）。     【JSON字段】recharge_settlements.json - $ - isbindmember（派生：BOOLEAN(isbindmember)）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_activity IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】recharge_settlements - isactivity（派生：BOOLEAN(isactivity)）。     【JSON字段】recharge_settlements.json - $ - isactivity（派生：BOOLEAN(isactivity)）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_coupon IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】recharge_settlements - isusecoupon（派生：BOOLEAN(isusecoupon)）。     【JSON字段】recharge_settlements.json - $ - isusecoupon（派生：BOOLEAN(isusecoupon)）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】recharge_settlements - isusediscount（派生：BOOLEAN(isusediscount)）。     【JSON字段】recharge_settlements.json - $ - isusediscount（派生：BOOLEAN(isusediscount)）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.can_be_revoked IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】NULL（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】recharge_settlements - canberevoked（派生：BOOLEAN(canberevoked)）。     【JSON字段】recharge_settlements.json - $ - canberevoked（派生：BOOLEAN(canberevoked)）。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.online_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - onlineamount。     【JSON字段】recharge_settlements.json - $ - onlineamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.balance_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - balanceamount。     【JSON字段】recharge_settlements.json - $ - balanceamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - cardamount。     【JSON字段】recharge_settlements.json - $ - cardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - couponamount。     【JSON字段】recharge_settlements.json - $ - couponamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - rechargecardamount。     【JSON字段】recharge_settlements.json - $ - rechargecardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.gift_card_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - giftcardamount。     【JSON字段】recharge_settlements.json - $ - giftcardamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.prepay_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - prepaymoney。     【JSON字段】recharge_settlements.json - $ - prepaymoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.consume_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - consumemoney。     【JSON字段】recharge_settlements.json - $ - consumemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - goodsmoney。     【JSON字段】recharge_settlements.json - $ - goodsmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.real_goods_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - realgoodsmoney。     【JSON字段】recharge_settlements.json - $ - realgoodsmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_charge_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - tablechargemoney。     【JSON字段】recharge_settlements.json - $ - tablechargemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.service_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - servicemoney。     【JSON字段】recharge_settlements.json - $ - servicemoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.activity_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】recharge_settlements - activitydiscount。     【JSON字段】recharge_settlements.json - $ - activitydiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.all_coupon_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】recharge_settlements - allcoupondiscount。     【JSON字段】recharge_settlements.json - $ - allcoupondiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - goodspromotionmoney。     【JSON字段】recharge_settlements.json - $ - goodspromotionmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_promotion_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - assistantpromotionmoney。     【JSON字段】recharge_settlements.json - $ - assistantpromotionmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_pd_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - assistantpdmoney。     【JSON字段】recharge_settlements.json - $ - assistantpdmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_cx_money IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - assistantcxmoney。     【JSON字段】recharge_settlements.json - $ - assistantcxmoney。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_manual_discount IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】recharge_settlements - assistantmanualdiscount。     【JSON字段】recharge_settlements.json - $ - assistantmanualdiscount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_sale_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - couponsaleamount。     【JSON字段】recharge_settlements.json - $ - couponsaleamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.member_discount_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - memberdiscountamount。     【JSON字段】recharge_settlements.json - $ - memberdiscountamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_price IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - pointdiscountprice。     【JSON字段】recharge_settlements.json - $ - pointdiscountprice。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_cost IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - pointdiscountcost。     【JSON字段】recharge_settlements.json - $ - pointdiscountcost。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.adjust_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - adjustamount。     【JSON字段】recharge_settlements.json - $ - adjustamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.rounding_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】NULL（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】recharge_settlements - roundingamount。     【JSON字段】recharge_settlements.json - $ - roundingamount。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - operatorid。     【JSON字段】recharge_settlements.json - $ - operatorid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_name_snapshot IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - operatorname。     【JSON字段】recharge_settlements.json - $ - operatorname。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_user_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - salesmanuserid。     【JSON字段】recharge_settlements.json - $ - salesmanuserid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】recharge_settlements - salesmanname。     【JSON字段】recharge_settlements.json - $ - salesmanname。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.order_remark IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】recharge_settlements - orderremark。     【JSON字段】recharge_settlements.json - $ - orderremark。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - tableid。     【JSON字段】recharge_settlements.json - $ - tableid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.serial_number IS '【说明】数量/时长字段，用于统计与计量。     【示例】NULL（数量/时长字段，用于统计与计量）。     【ODS来源】recharge_settlements - serialnumber。     【JSON字段】recharge_settlements.json - $ - serialnumber。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】recharge_settlements - revokeorderid。     【JSON字段】recharge_settlements.json - $ - revokeorderid。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】NULL（名称字段，用于展示与辅助识别）。     【ODS来源】recharge_settlements - revokeordername。     【JSON字段】recharge_settlements.json - $ - revokeordername。';
COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】NULL（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】recharge_settlements - revoketime。     【JSON字段】recharge_settlements.json - $ - revoketime。';


CREATE TABLE IF NOT EXISTS dwd_payment (
    payment_id BIGINT,
    site_id BIGINT,
    relate_type INTEGER,
    relate_id BIGINT,
    pay_amount NUMERIC(18,2),
    pay_status INTEGER,
    payment_method INTEGER,
    online_pay_channel INTEGER,
    create_time TIMESTAMPTZ,
    pay_time TIMESTAMPTZ,
    pay_date DATE,
    tenant_id BIGINT,
    PRIMARY KEY (payment_id)
);

COMMENT ON TABLE billiards_dwd.dwd_payment IS 'DWD 明细事实表：dwd_payment。ODS 来源表：billiards_ods.payment_transactions（对应 JSON：payment_transactions.json；分析：payment_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957924026486597（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】payment_transactions - id。     【JSON字段】payment_transactions.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】payment_transactions - site_id。     【JSON字段】payment_transactions.json - $ - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_type IS '【说明】明细字段，用于记录事实取值。     【示例】2（明细字段，用于记录事实取值）。     【ODS来源】payment_transactions - relate_type。     【JSON字段】payment_transactions.json - $ - relate_type。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2957922914357125（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】payment_transactions - relate_id。     【JSON字段】payment_transactions.json - $ - relate_id。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】10.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】payment_transactions - pay_amount。     【JSON字段】payment_transactions.json - $ - pay_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】2（状态枚举字段，用于标识业务状态）。     【ODS来源】payment_transactions - pay_status。     【JSON字段】payment_transactions.json - $ - pay_status。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_method IS '【说明】明细字段，用于记录事实取值。     【示例】4（明细字段，用于记录事实取值）。     【ODS来源】payment_transactions - payment_method。     【JSON字段】payment_transactions.json - $ - payment_method。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.online_pay_channel IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】payment_transactions - online_pay_channel。     【JSON字段】payment_transactions.json - $ - online_pay_channel。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】payment_transactions - create_time。     【JSON字段】payment_transactions.json - $ - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】payment_transactions - pay_time。     【JSON字段】payment_transactions.json - $ - pay_time。';
COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_date IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-09 23:35:57（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】payment_transactions - pay_time（派生：DATE(pay_time)）。     【JSON字段】payment_transactions.json - $ - pay_time（派生：DATE(pay_time)）。';


  CREATE TABLE IF NOT EXISTS dwd_refund (
      refund_id BIGINT,
      tenant_id BIGINT,
      site_id BIGINT,
      relate_type INTEGER,
      relate_id BIGINT,
      pay_amount NUMERIC(18,2),
      channel_fee NUMERIC(18,2),
      pay_time TIMESTAMPTZ,
      create_time TIMESTAMPTZ,
      payment_method INTEGER,
      member_id BIGINT,
      member_card_id BIGINT,
      PRIMARY KEY (refund_id)
  );

COMMENT ON TABLE billiards_dwd.dwd_refund IS 'DWD 明细事实表：dwd_refund。ODS 来源表：billiards_ods.refund_transactions（对应 JSON：refund_transactions.json；分析：refund_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.refund_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955202296416389（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - id。     【JSON字段】refund_transactions.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.tenant_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790683160709957（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - tenant_id。     【JSON字段】refund_transactions.json - $ - tenant_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.site_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2790685415443269（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - site_id。     【JSON字段】refund_transactions.json - $ - site_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_type IS '【说明】明细字段，用于记录事实取值。     【示例】5（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - relate_type。     【JSON字段】refund_transactions.json - $ - relate_type。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955078219057349（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - relate_id。     【JSON字段】refund_transactions.json - $ - relate_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】-5000.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - pay_amount。     【JSON字段】refund_transactions.json - $ - pay_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.channel_fee IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - channel_fee。     【JSON字段】refund_transactions.json - $ - channel_fee。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-08 01:27:16（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】refund_transactions - pay_time。     【JSON字段】refund_transactions.json - $ - pay_time。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.create_time IS '【说明】时间/日期字段，用于记录业务时间与统计口径对齐。     【示例】2025-11-08 01:27:16（时间/日期字段，用于记录业务时间与统计口径对齐）。     【ODS来源】refund_transactions - create_time。     【JSON字段】refund_transactions.json - $ - create_time。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.payment_method IS '【说明】明细字段，用于记录事实取值。     【示例】4（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - payment_method。     【JSON字段】refund_transactions.json - $ - payment_method。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.member_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - member_id。     【JSON字段】refund_transactions.json - $ - member_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund.member_card_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - member_card_id。     【JSON字段】refund_transactions.json - $ - member_card_id。';


  CREATE TABLE IF NOT EXISTS dwd_refund_ex (
      refund_id BIGINT,
      tenant_name VARCHAR(64),
      pay_sn BIGINT,
      refund_amount NUMERIC(18,2),
      round_amount NUMERIC(18,2),
      balance_frozen_amount NUMERIC(18,2),
      card_frozen_amount NUMERIC(18,2),
      pay_status INTEGER,
      action_type INTEGER,
      is_revoke INTEGER,
      is_delete INTEGER,
      check_status INTEGER,
      online_pay_channel INTEGER,
      online_pay_type INTEGER,
      pay_terminal INTEGER,
      pay_config_id INTEGER,
      cashier_point_id INTEGER,
      operator_id BIGINT,
      channel_payer_id VARCHAR(128),
      channel_pay_no VARCHAR(128),
      PRIMARY KEY (refund_id)
  );

COMMENT ON TABLE billiards_dwd.dwd_refund_ex IS 'DWD 明细事实表（扩展字段表）：dwd_refund_ex。ODS 来源表：billiards_ods.refund_transactions（对应 JSON：refund_transactions.json；分析：refund_transactions-Analysis.md）。装载/清洗逻辑参考：etl_billiards/tasks/dwd_load_task.py（DwdLoadTask）。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】2955202296416389（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - id。     【JSON字段】refund_transactions.json - $ - id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.tenant_name IS '【说明】名称字段，用于展示与辅助识别。     【示例】朗朗桌球（名称字段，用于展示与辅助识别）。     【ODS来源】refund_transactions - tenantName。     【JSON字段】refund_transactions.json - $ - tenantName。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_sn IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - pay_sn。     【JSON字段】refund_transactions.json - $ - pay_sn。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - refund_amount。     【JSON字段】refund_transactions.json - $ - refund_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.round_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - round_amount。     【JSON字段】refund_transactions.json - $ - round_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.balance_frozen_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - balance_frozen_amount。     【JSON字段】refund_transactions.json - $ - balance_frozen_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.card_frozen_amount IS '【说明】金额字段，用于计费/结算/核算等金额计算。     【示例】0.0（金额字段，用于计费/结算/核算等金额计算）。     【ODS来源】refund_transactions - card_frozen_amount。     【JSON字段】refund_transactions.json - $ - card_frozen_amount。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】2（状态枚举字段，用于标识业务状态）。     【ODS来源】refund_transactions - pay_status。     【JSON字段】refund_transactions.json - $ - pay_status。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.action_type IS '【说明】明细字段，用于记录事实取值。     【示例】2（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - action_type。     【JSON字段】refund_transactions.json - $ - action_type。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_revoke IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】refund_transactions - is_revoke。     【JSON字段】refund_transactions.json - $ - is_revoke。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_delete IS '【说明】布尔/开关字段，用于表示是否/可用性等业务开关。     【示例】0（布尔/开关字段，用于表示是否/可用性等业务开关）。     【ODS来源】refund_transactions - is_delete。     【JSON字段】refund_transactions.json - $ - is_delete。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.check_status IS '【说明】状态枚举字段，用于标识业务状态。     【示例】1（状态枚举字段，用于标识业务状态）。     【ODS来源】refund_transactions - check_status。     【JSON字段】refund_transactions.json - $ - check_status。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_channel IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - online_pay_channel。     【JSON字段】refund_transactions.json - $ - online_pay_channel。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_type IS '【说明】明细字段，用于记录事实取值。     【示例】0（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - online_pay_type。     【JSON字段】refund_transactions.json - $ - online_pay_type。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_terminal IS '【说明】明细字段，用于记录事实取值。     【示例】1（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - pay_terminal。     【JSON字段】refund_transactions.json - $ - pay_terminal。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_config_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - pay_config_id。     【JSON字段】refund_transactions.json - $ - pay_config_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.cashier_point_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - cashier_point_id。     【JSON字段】refund_transactions.json - $ - cashier_point_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.operator_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】0（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - operator_id。     【JSON字段】refund_transactions.json - $ - operator_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_payer_id IS '【说明】标识类 ID 字段，用于关联/定位相关实体。     【示例】NULL（标识类 ID 字段，用于关联/定位相关实体）。     【ODS来源】refund_transactions - channel_payer_id。     【JSON字段】refund_transactions.json - $ - channel_payer_id。';
COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_pay_no IS '【说明】明细字段，用于记录事实取值。     【示例】NULL（明细字段，用于记录事实取值）。     【ODS来源】refund_transactions - channel_pay_no。     【JSON字段】refund_transactions.json - $ - channel_pay_no。';



-- AI_CHANGELOG:
-- - 日期: 2026-02-14
-- - Prompt: P20260214-040000 — "dwd_settlement_head_ex.settle_list 也没有必要保留了"
-- - 直接原因: settle_list 列已从数据库删除，DDL 需同步
-- - 变更摘要: 移除 dwd_settlement_head_ex 表定义中的 settle_list JSONB 列
-- - 风险与验证: 纯 DDL 文档同步；验证：对比 information_schema 确认一致


-- =============================================================================
-- 2026-02-20 新增表
-- =============================================================================

CREATE TABLE IF NOT EXISTS dwd_goods_stock_summary (
    site_goods_id              BIGINT       NOT NULL,
    goods_name                 TEXT,
    goods_unit                 TEXT,
    goods_category_id          BIGINT,
    goods_category_second_id   BIGINT,
    category_name              TEXT,
    range_start_stock          NUMERIC(18,4),
    range_end_stock            NUMERIC(18,4),
    range_in                   NUMERIC(18,4),
    range_out                  NUMERIC(18,4),
    range_sale                 NUMERIC(18,4),
    range_sale_money           NUMERIC(18,2),
    range_inventory            NUMERIC(18,4),
    current_stock              NUMERIC(18,4),
    site_id                    BIGINT,
    tenant_id                  BIGINT,
    fetched_at                 TIMESTAMPTZ,
    PRIMARY KEY (site_goods_id, fetched_at)
);

COMMENT ON TABLE billiards_dwd.dwd_goods_stock_summary IS '库存汇总明细表（事实表）。来源：ods.goods_stock_summary。按时间窗口增量加载。';


CREATE TABLE IF NOT EXISTS dwd_goods_stock_movement (
    site_goods_stock_id        BIGINT       NOT NULL,
    tenant_id                  BIGINT,
    site_id                    BIGINT,
    site_goods_id              BIGINT,
    goods_name                 TEXT,
    goods_category_id          BIGINT,
    goods_second_category_id   BIGINT,
    unit                       TEXT,
    price                      NUMERIC(18,4),
    stock_type                 INTEGER,
    change_num                 NUMERIC(18,4),
    start_num                  NUMERIC(18,4),
    end_num                    NUMERIC(18,4),
    change_num_a               NUMERIC(18,4),
    start_num_a                NUMERIC(18,4),
    end_num_a                  NUMERIC(18,4),
    remark                     TEXT,
    operator_name              TEXT,
    create_time                TIMESTAMPTZ,
    fetched_at                 TIMESTAMPTZ,
    PRIMARY KEY (site_goods_stock_id)
);

COMMENT ON TABLE billiards_dwd.dwd_goods_stock_movement IS '库存变动流水表（事实表）。来源：ods.goods_stock_movements。按 create_time 增量加载。';
