这段代码是我的建表,每次一到加载销售事实表数据(按年月分区)就报错,这到底是什么问题。跟着许多增大资源的帖子都试过,都没用

这是ods_order_details表

这是ods_order表



CREATE TABLE IF NOT EXISTS N_20243204980.ods_orders (
order_id INT, -- 订单ID(整数)
customer_id STRING, -- 客户ID(字符串)
employee_id INT, -- 员工ID(整数)
order_date STRING, -- 订单日期(改用STRING避免格式问题)
required_date STRING, -- 需求日期(同上)
shipped_date STRING, -- 发货日期(同上)
ship_via INT, -- 运输方式ID(整数)
freight DECIMAL(10,2), -- 运费(十进制,最多10位数字,其中2位小数)
ship_name STRING, -- 收货人姓名(字符串)
ship_address STRING, -- 收货地址(字符串)
ship_city STRING, -- 收货城市(字符串)
ship_region STRING, -- 收货区域(字符串)
ship_postal_code STRING, -- 收货邮政编码(字符串)
ship_country STRING -- 收货国家(字符串)
) COMMENT 'ODS层订单表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' -- 确保数据文件实际分隔符是逗号
STORED AS TEXTFILE;
-- 创建ODS层订单明细表
CREATE TABLE IF NOT EXISTS N_20243204980.ods_order_details (
order_id INT, -- 订单ID(整数)
product_id INT, -- 产品ID(整数)
unit_price DECIMAL(10,2), -- 单价(十进制,最多10位数字,其中2位小数)
quantity INT, -- 数量(整数)
discount DECIMAL(4,2) -- 折扣(十进制,最多4位数字,其中2位小数)
) COMMENT 'ODS层订单明细表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
-- 创建销售事实表(按年月分区)
CREATE TABLE N_20243204980.dwb_fact_sales (
order_id INT COMMENT '订单ID',
customer_id STRING COMMENT '客户ID',
employee_id INT COMMENT '员工ID',
product_id INT COMMENT '产品ID',
shipper_id INT COMMENT '货运商ID',
order_date STRING COMMENT '订单日期',
unit_price DECIMAL(10,2) COMMENT '单价',
quantity INT COMMENT '数量',
discount DECIMAL(4,2) COMMENT '折扣',
freight DECIMAL(10,2) COMMENT '运费',
total_amount DECIMAL(12,2) COMMENT '总金额(计算字段: unit_price*quantity*(1-discount))',
ship_city STRING COMMENT '收货城市(维度退化)',
ship_country STRING COMMENT '收货国家(维度退化)'
) COMMENT 'DWB层销售事实表'
PARTITIONED BY (year_month STRING COMMENT '年月分区,格式YYYYMM')
STORED AS ORC;
-- 加载销售事实表数据(按年月分区)
INSERT OVERWRITE TABLE N_20243204980.dwb_fact_sales PARTITION(year_month)
SELECT
o.order_id,
o.customer_id,
o.employee_id,
od.product_id,
o.ship_via AS shipper_id,
o.order_date,
od.unit_price,
od.quantity,
od.discount,
o.freight,
od.unit_price * od.quantity * (1 - od.discount) AS total_amount,
o.ship_city,
o.ship_country,
-- 从订单日期提取年月作为分区值
CONCAT(YEAR(o.order_date), LPAD(MONTH(o.order_date), 2, '0')) AS year_month
FROM
N_20243204980.ods_orders o
JOIN
N_20243204980.ods_order_details od ON o.order_id = od.order_id;