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

如何无需编辑CSV,使用SQL*Loader加载首列仅分组头部含数据的文件?

自动填充CSV分组编号后用SQL*Loader加载

你可以通过Awk在Shell脚本中自动预处理CSV文件,将每组头部的编号填充到该组后续行的空第一列,无需手动编辑文件。以下是完整实现方案:

1. 核心Awk预处理命令

直接用Awk处理原始CSV,生成符合要求的文件:

awk -F',' 'BEGIN{OFS=","} {if ($1 != "") group=$1; else $1=group; print}' input.csv > processed.csv

命令逻辑说明:

  • -F',':指定逗号为输入字段分隔符
  • BEGIN{OFS=","}:设置输出分隔符为逗号,确保处理后仍为标准CSV格式
  • 逐行处理:
    • 若当前行第一列非空,将其值存入group变量(记录当前组编号)
    • 若第一列为空,将group的值赋值给第一列
    • 打印处理后的整行

2. 完整Shell脚本示例

将预处理和SQL*Loader调用整合到脚本load_employee_data.sh中:

#!/bin/bash

# 配置参数(根据实际环境修改)
RAW_CSV="employee_raw.csv"
PROCESSED_CSV="employee_processed.csv"
LOADER_CTL="employee_loader.ctl"
DB_USER="scott"
DB_PWD="tiger"
DB_TNS="orcl"

# 预处理CSV,填充分组编号
awk -F',' 'BEGIN{OFS=","} {if ($1 != "") group=$1; else $1=group; print}' "$RAW_CSV" > "$PROCESSED_CSV"

# 调用SQL*Loader加载数据
sqlldr userid="$DB_USER/$DB_PWD@$DB_TNS" control="$LOADER_CTL" data="$PROCESSED_CSV" log=load.log bad=load.bad discard=load.dsc

3. SQL*Loader控制文件示例

创建对应的控制文件employee_loader.ctl,适配你的目标表结构:

LOAD DATA
INFILE 'employee_processed.csv'
INTO TABLE employee_records
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
    group_id        INTEGER,
    job_title       CHAR(50),
    hire_date       DATE "MM/DD/YYYY",
    employee_name   CHAR(50)
)

控制文件说明:

  • TRAILING NULLCOLS:自动处理行末尾的空字段(比如原始CSV中部分行第三列为空的情况)
  • 日期格式"MM/DD/YYYY":匹配CSV中的日期格式,可根据实际调整
  • 字段类型和长度:根据目标表的字段定义修改

4. 使用说明

  1. 将原始CSV文件命名为employee_raw.csv(或修改脚本中的RAW_CSV参数)
  2. 配置脚本中的数据库连接信息和控制文件路径
  3. 赋予脚本执行权限:chmod +x load_employee_data.sh
  4. 运行脚本:./load_employee_data.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:00:59