0
点赞
收藏
分享

微信扫一扫

|NO.Z.00020|——————————|BigDataEnd|——|Hadoop&PB级数仓.V04|——|PB数仓.v04|会员活跃度分析|json数据处理&SerDe处理json数据|

未定义变量 2022-05-14 阅读 66

一、使用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处理更简单

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

                                                                                                                                                   ——W.S.Landor


举报

相关推荐

0 条评论