You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写SQL Loader控制文件:加载column_type=1数据且不影响column_type=2记录

解决SQL Loader加载时保留column_type=2记录的方案

要实现加载文件数据(column_type=1)时不影响column_type=2的记录,同时替换原有column_type=1的内容,你可以通过加载前删除旧的column_type=1记录+APPEND加载新数据的方式实现,具体控制文件写法如下:

控制文件示例

OPTIONS (SKIP=0)
LOAD DATA
INFILE '你的数据文件路径'
-- 加载前清空表中所有column_type=1的记录,不触动column_type=2的数据
BEFORE LOAD
    DELETE FROM 你的表名 WHERE column_type = 1;
-- 用APPEND模式追加新的column_type=1数据
APPEND INTO TABLE 你的表名
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' -- 根据你的文件分隔符调整
TRAILING NULLCOLS
(
    列1,
    列2,
    -- 其他业务列...
    -- 强制设置column_type为1,避免文件中值错误导致数据混淆
    column_type CONSTANT 1
)

方案说明

  1. BEFORE LOAD子句:在SQL Loader开始加载前执行DELETE语句,仅清除表中column_type=1的旧记录,完全保留column_type=2的计算生成数据。
  2. APPEND模式:将文件中的新数据追加到表中,配合前面的DELETE操作,相当于完全替换了column_type=1的数据集,同时不会影响类型2的记录。
  3. CONSTANT 1:强制给加载的每条记录设置column_type=1,避免文件中存在错误值导致数据类型混淆。

为什么之前的选项不适用?

  • REPLACE:会清空整张表,显然不符合保留类型2数据的需求;
  • APPEND单独使用:会保留旧的column_type=1记录,导致新旧数据共存;
  • UPDATE:只能更新表中已存在匹配条件的记录,无法处理文件中新增的column_type=1数据,也无法删除文件中不存在的旧类型1记录。

如果你的场景需要保留部分旧的column_type=1记录(比如只更新匹配主键的行,新增不匹配的行),可以考虑结合外部表+MERGE语句,但如果是要完全替换类型1的数据,上面的控制文件方案最直接有效。

内容的提问来源于stack exchange,提问作者Gisele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:41:17