Hive的特殊分割符处理、JSON 解析方法、linux文件数据清洗之sed命令

一、特殊分隔符

1.1、特殊分割符处理方法:

hive默认是不支持多字节(符)分割符。如:(::   ||   **)

row_format有两种格式:
①、delimited 处理单字符分隔符

    delimited针对普通的文本文件,指定最重要的 行列分隔符 ,还有其他分隔符。
    默认的行分隔符:\n
    默认的列分隔符:ctrl+a  控制符号     十六进制来表示 :\001
    如果不满足默认分割符就要自行指定(但满足分隔符为单字符时):
    row format delimited fields terminated by ',' lines terminated by '\\|';

②、指定SERDE 处理特殊分割符(多字符分割符)
    SERDE:serializable(序列化) diserialiazble(反序列化)
    序列化:要把数据放到网络上进行传输,但是网络传输的格式只能是二进制字节序列,所以任何格式的数据要进行网络传输,就必须要进行序列化。
    默认的SERDE:LazySimpleSerde  是Java类。这个组件默认是按照普通文本文件来进行逐行读取的。也是不支持特殊(多字符)分割符的。

      如这种数据格式的处理:
          01||huangbo
          02||xuzheng
          03||wangbaoqiang
    使用 RegexSerDe 通过正则表达式来抽取字段 : 
    create table t_bi_reg(id string,name string) row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' with serdeproperties('input.regex'='(.*)\\|\\|(.*)','output.format.string'='%1$s %2$s') stored as textfile;

二、Json解析

2.1、JSON解析函数get_json_object(...)

假如以上数据存在一个叫demo01的表中,只存为一个字段叫data

现在我们把他解析出来存在一张普通的二维表中

create table demo02 as select 
get_json_object(data,'$.id') as id,
get_json_object(data,"$.name") as name,
get_json_object(data,'$.sex') sex,
get_json_object(data,'$.age') age,
get_json_object(data,'$.department') department
from demo01;

三、linux文件数据清洗之sed命令

sed详细说明:https://man.linuxde.net/sed

案例:sed 's/::/%/g' users.dat >> newusers.dat

说明:将users.dat中全部的:: 替换为%,并追加到新的文件中


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部