sqlldr 报错:Field in data file exceeds maximum length 解决方法
问题场景
今天有个需求,将 hive 跑完的数据入到 Oracle 里,需求侧直接从 Oracle 表里取数据,不接收文件;
通过下面脚本落到本地文件:
[hive@hadoop101 tool]$ more hive_2_file.sh #!/bin/sh path=$1 query=$2 file=$3 field=$4 beeline -u 'jdbc:hive2://110.110.1.110:9000' -n username -p password -e "insert overwrite directory '/warehouse/servpath/downlo ad/${path}' ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'field.delim'='${field}', 'serialization.format'= '', 'serialization.null.format'='' ) ${query} " hadoop fs -getmerge /warehouse/servpath/downlo/${path} ${file}
文件入库控制文件:
load data characterset utf8 infile '/warehouse/servpath/downlo/TEMP_INFO_20200909.txt' append into table TEMP_INFO_20200909 fields terminated by "\t" TRAILING NULLCOLS (MONTH_ID, PROV_ID, USER_ID, COUNTRY_STAY_DAYS)
执行入库程序:
#!/bin/sh table=$1 sqlldr scott/tieger@orcl control=/TEMP_INFO_20200909/${table}.ctl log=/TEMP_INFO_20200909/${table}.log bad=TEMP_INFO_20200909/${table}.bad rows=1100000000 direct=true skip_index_maintenance=TRUE
结果居然报错了
#!/bin/shRecord 5031: Rejected - Error on table TEMP_INFO_20200909, column COUNTRY_STAY_DAYS. Field in data file exceeds maximum length
可是 文件里的字段没有超过表里的最大长度,在网上找了一下,说是需要修改控制文件,在报错字段后 + char(300) 即可;
load data characterset utf8 infile '/warehouse/servpath/downlo/TEMP_INFO_20200909.txt' append into table TEMP_INFO_20200909 fields terminated by "\t" TRAILING NULLCOLS (MONTH_ID, PROV_ID, USER_ID, COUNTRY_STAY_DAYS char(300))
重启启动入库程序,问题得以解决
分类:
oracle/plsql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下