【问题标题】:Hive columns-newlineHive 列-换行符
【发布时间】:2021-07-04 18:36:33
【问题描述】:

hive 中的某些列具有多行值,这些值以换行符形式出现

例如

Empid Empname Dept company year month day
1234 ASD Finance qqq null null null
2015 6 3

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

select year from tbl_name where year='2015'

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

【问题讨论】:

    标签: hive special-characters hiveql


    【解决方案1】:

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

    如果表基于文本文件(存储为 TEXTFILE 或使用 OpenCSVSerDe 或 JSON...),则 SerDe 使用换行符作为分隔符读取行,如果列包含换行符,则在最低级别由换行符拆分。

    如果表存储是像 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 ;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多