侧边栏壁纸
博主头像
高大北博主等级

所有的再见中,我最喜欢明天见

  • 累计撰写 208 篇文章
  • 累计创建 151 个标签
  • 累计收到 20 条评论
标签搜索

目 录CONTENT

文章目录

sqoop分隔符终极解决方案

高大北
2022-04-25 / 0 评论 / 1 点赞 / 662 阅读 / 659 字 / 正在检测是否收录...

分隔符设置不正确,要么导致hive表中行数过多要么导致所有数据到hive后都集中到一列中。在sqoop侧和hive侧都设置正确,数据从其他数据库到hive库后数据总量的准确性才能得到保证。
在sqoop侧,拼装OptionsFileUtil. expandArguments(String[] args)函数的参数时,需要往其接收的数组中指定如下两个重要信息:

"--fields-terminated-by", "\001",
"--hive-drop-import-delims",

其中"–fields-terminated-by", "\001"含义为列分隔符指定为一个隐藏的字符,所谓隐藏是指该字符无法从键盘直接输入;
"–hive-drop-import-delims"是指丢弃hive默认的分隔符;
在hive侧

//设置hive库的分隔符
String serdeSql = "alter table " + tableName + " set serdeproperties('field.delim'='\001', 'serialization.format'='\001')";

serialization.format是指定数据文件序列化时表中两个列字段之间的文件中的字段分隔符
以上组合抽取数据时数据准确性得到了保证。

1

评论区