未深入学习和使用“分区表”+“dmfldr”前,我总觉得它是个复杂的工具,直到用它们处理日常业务数据才发现,只要抓准核心步骤,新手也能轻松搞定千万级数据快速装载。下面分享一套简单易上手的实操方案,适合刚接触这个组合功能的同事参考。
日常工作中,“按日期拆分数据”是最常用的场景,比如存储每月的用户注册信息。用以下SQL就能快速创建分区表,无需复杂配置:
-- 创建按月份范围分区的用户表
CREATE TABLE USER_REG (
USER_ID INT, -- 简单字段,避免复杂类型
REG_DATE DATE, -- 分区依据:注册日期
USER_NAME VARCHAR(50) -- 基础业务字段
) PARTITION BY RANGE (REG_DATE) (
-- 明确每个分区的日期范围,新手不容易出错
PARTITION REG_202405 VALUES LESS THAN ('2024-06-01'),
PARTITION REG_202406 VALUES LESS THAN ('2024-07-01')
-- 可以定义一个maxvaule分区来装载其他数据
);
此处为方便演示下一步的按分区装载,使用了范围分区,后续要加新月份,复制一行改日期就行,操作也很灵活。当然按月份分区也可以使用间隔分区来实现。
dmfldr的核心是“控制文件”,不用记复杂参数,按模板改3处关键信息即可。新建一个文本文件命名为load_reg.ctl,内容如下:
LOAD DATA
-- 1. 改这里:你的数据文件路径(CSV格式,字段用逗号分隔)
INFILE '/dm/data/user_reg_202405.csv'
-- 2. 改这里:对应上面创建的分区表名
INTO TABLE USER_REG
-- 3. 改这里:对应要装数据的分区(和数据月份匹配)
PARTITION (REG_202405)
FIELDS TERMINATED BY ',' -- 数据文件用逗号分隔字段
TRAILING NULLCOLS -- 允许字段为空,避免装载失败
(
USER_ID, -- 按表字段顺序写,不用改格式
REG_DATE, -- 日期字段直接填,dmfldr会自动识别
USER_NAME
)
-- 新手友好参数:1线程、直接装载,不用调复杂配置
OPTIONS(DIRECT=Y, PARALLEL=1)
dmfldr USERID=SYSDBA/SYSDBA@localhost:5236 CONTROL=load_reg.ctl LOG=load.log
看日志:打开生成的load.log文件,找到“成功装载行数”,和CSV文件的总行数对得上就没问题。
查数据:用简单SQL看分区里有没有数据,新手也能看懂结果:
-- 查看2024年5月分区的数据量
SELECT COUNT(*) FROM USER_REG PARTITION (REG_202405);
这套方法的关键是“简化配置、精准匹配”——分区表只按日期拆,dmfldr控制文件只改3处核心信息,全程不用复杂参数。轻松实现千万级数据的快速装载,特别适合刚接触的同事上手。
文章
阅读量
获赞
