CC00020.pbpositions——|Hadoop&PB级数仓.V04|——|PB数仓.v04|会员活跃度分析|json数据处理&SerDe处理json数据|

一、使用SerDe处理
### --- 使用SerDe处理
~~~     序列化是对象转换为字节序列的过程;反序列化是字节序列恢复为对象的过程;

~~~     # 对象的序列化主要有两种用途:
~~~     对象的持久化,即把对象转换成字节序列后保存到文件中
~~~     对象数据的网络传送
~~~     SerDe 是Serializer 和 Deserializer 的简写形式。
~~~     Hive使用Serde进行行对象的序列与反序列化。
~~~     最后实现把文件内容映射到 hive 表中的字段数据类型。

~~~     # SerDe包括Serialize/Deserilize 两个功能:
~~~     Serialize把Hive使用的java object转换成能写入HDFS字节序列,或者其他系统能识别的流文件
~~~     Deserilize把字符串或者二进制流转换成Hive能识别的java object对象
~~~     Read : HDFS files => InputFileFormat => <key, value> => Deserializer => Row object
~~~     Write : Row object => Seriallizer => <key, value> => OutputFileFormat => HDFS files
### --- 常见:

https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe
二、常见的serde
### --- Hive本身自带了几个内置的SerDe,还有其他一些第三方的SerDe可供选择。

~~~     # 语法:
~~~     创建表
create table t11(id string) 
stored as parquet;

create table t12(id string)
stored as ORC;
~~~     # 操作实例

hive (test)> create table t11(id string) 
           > stored as parquet;
hive (test)> 
           > create table t12(id string)
           > stored as ORC;
### --- 查看他们使用了什么样的反序列化方式
~~~     # 语法

desc formatted t11;
desc formatted t12;
~~~ LazySimpleSerDe(默认的SerDe)
~~~ ParquetHiveSerDe
~~~ OrcSerde
~~~     # 实例操作

hive (test)> desc formatted t11;
# Storage Information        
SerDe Library:          org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe  
InputFormat:            org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat    
OutputFormat:           org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat   
hive (test)> desc formatted t12;
# Storage Information        
SerDe Library:          org.apache.hadoop.hive.ql.io.orc.OrcSerde    
InputFormat:            org.apache.hadoop.hive.ql.io.orc.OrcInputFormat  
OutputFormat:           org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
三、纯json格式数据通过JsonSerDe处理
### --- 创建json文件:对于纯 json 格式的数据,可以使用 JsonSerDe 来处理。

[root@hadoop02 ~]# vim /data/yanqidw/logs/data/json2.dat
{"id": 1,"ids": [101,102,103],"total_number": 3}
{"id": 2,"ids": [201,202,203,204],"total_number": 4}
{"id": 3,"ids": [301,302,303,304,305],"total_number": 5}
{"id": 4,"ids": [401,402,403,304],"total_number": 5}
{"id": 5,"ids": [501,502,503],"total_number": 3}
### --- 建表并导入数据
~~~     # 语法
~~~     建表语句

create table jsont2(
id int,
ids array<string>,
total_number int
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';
~~~     导入数据

load data local inpath '/data/yanqidw/logs/data/json2.dat' into table jsont2;
~~~     # 操作实例

hive (test)> create table jsont2(
           > id int,
           > ids array<string>,
           > total_number int
           > )
           > ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

hive (test)> load data local inpath '/data/yanqidw/logs/data/json2.dat' into table jsont2;
~~~     # 查看创建的表

hive (test)> desc jsont2;
OK
col_name    data_type   comment
id                      int                     from deserializer   
ids                     array<string>           from deserializer   
total_number            int                     from deserializer
四、各种Json格式处理方法小结:
### --- 各种Json格式处理方法小结:

~~~     简单格式的json数据,使用get_json_object、json_tuple处理
~~~     对于嵌套数据类型,可以使用UDF
~~~     纯json串可使用JsonSerDe处理更简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值