Hive 列换行

Hive columns-newline

配置单元中的一些列有多行值作为换行符出现

例如

Empid 公司名称 部门 公司
1234 自闭症 金融 qqq
2015 6 3

但是当我用年份查询 table 时,它给出了正确的答案

select year from tbl_name where year='2015'

这些多行值可能是什么原因以及如何在适当的列中对齐这些值?

根据 table 的存储方式,可以修复或不使用 SQL。

如果 table 基于文本文件(存储为文本文件或使用 OpenCSVSerDe 或 JSON...),则 SerDe 使用换行符作为分隔符读取行,如果列包含换行符,则为在最低层被换行分割。

如果table存储是像ORC这样的二进制格式,它不会存储为由换行符分隔的行。在不拆分行的情况下读取换行符但换行符导致输出行拆分的值,如果存储格式为 JSON 并且它包含斜杠 + n (\n) 组合,则会发生同样的情况,此类组合被解释为输出换行符。可以使用 regexp_replace:

用空格或空字符串替换换行符
insert overwritre table tbl_name 
select
Empid, 
Empname, 
Dept, 
 regexp_replace(company, '\n',' ')  company, --replace newline with space
`year`, 
`month`, 
`day`
from tbl_name ;

此外,如果列包含 TAB,最好用空格替换或删除它们,因为 \t 会导致列移位。使用 regexp_replace(col_name, '\t',' ')