Oracle数据迁移至vertica
第一次做数据迁移遇到了一些问题,分享一下,请大家指教。
做法一:Vertica 自带 copy指令从本地csv文件导入
- 用plsqldeveloper导出数据到本地从csv文件;
- 用excel软件打开并保存(去掉封闭符);
- 分隔符更改为罕见字符;
- 用notepad++转字符集编码为utf-8;
- 使用vertica的copy命令直接从本地csv导入数据;
在此过程中发现:
- 步骤繁多
- 大文件excel、notepad++打不开
- 分隔符有时需要更改
- 文件中有特殊字符"等特殊符号时,分隔符失效
- 如果有封闭符则numeric、timestamp等字段为空时插入失败、字段有换行插入失败
做法二:使用ETL工具Kettle做数据迁移
用kettle建立转换(表输入->表输出)表输入勾选允许简易转换,直接从oracle库表导出至vertica库表,速度快效率高。
遇到问题:
内存溢出
解决方案:
用大内存服务器作业、调大kettle的内存配置
遇到问题:
Oracle中CLOB字段中数据超过4000字节时kettle报越界错误。
解决方案:
可以使用oracle的trim(dbms_lob.substr(name,4000))、trim(dbms_lob.substr(name,4000,4001))…将该字段分割成多个部分,kettle中建立转换(表输入->Concat fields->表输出)将该字段拼接后导入vertica。vertica中该字段类型可以对应 long vartchar类型最大32,000,000byte但是后续还可能遇到CLOB字段过长的问题。希望得到专家的帮助!