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',' ')
配置单元中的一些列有多行值作为换行符出现
例如
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',' ')