hive:文件读取、解析的方式、Serde使用。

文件读取、解析的方式指定:ROW FORMAT row_format 
综述:hive会指定两个类去读取数据:
一个类用于从文件中读取一条一条的记录:(可能是一行,也可能是xml文件的一个完整的标签)
一个类用于从上面读取到的记录中切分出一个一个的字段(可能是简单的按照分隔符切,也可以对复杂的结构进行自定义切分)。

ROW FORMAT示例:
ROW FORMAT:指定用什么inputformat类进行数据读取
DELIMITED:指定用默认的org.apache.hadoop.mapred.TextInputFormat类去读取数据行,以回车符做为行分隔符
FIELDS TERMINATED BY ',':表示用什么SerDe类去解析一行中的数据,默认用org.apache.hadoop.hive.serde2\lazy.LazySimpleSerDe

---SerDe:
Serder:
serialize:序列化(写数据)
deserialize:反序列化(读数据)

常用的Serde:csv\tsv\json serde \regexp serde:
csv:逗号分隔符
tsv:tab分隔符
json:json格式的数据
regexp:数据需要复合正则表达式

csv 案例row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'  指定使用csv  SerDe
创建表:
create table if not exists csv1(
uid int,
uname string,
age int
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
stored as textfile
;

数据案例:

1,zs1,23
2,zs2,23
3,zs3,23
4,zs4,23
5,zs5,23
6,zs6,23
7,zs7,23
8,zs8,23

加载数据:

load data local inpath '/usr/local/hivedata/csv1.txt' into table csv1;

json 案例:row format serde "org.openx.data.jsonserde.JsonSerDe" 指定使用json  SerDe  第三方提供jar包
如果是第三方jar包或者是自己写的jar包,就必须首先加载jar包:
add jar /root/json-serde-1.3-jar-with-dependencies.jar;

create table if not exists js1(
pid int,
content string
)
row format serde "org.openx.data.jsonserde.JsonSerDe"
;

数据案例:

{"pid":"1","content":"this is pid 1 content"}
{"pid":"2","content":"this is pid 2 content"}

加载数据:

load data local inpath '/usr/local/hivedata/js1' into table js1;

map嵌套array:
zs chinese:90,87    math:98,99    english:76,79
ls chinese:90,87    math:98,99    english:76,79
create table if not exists complex(
uname string,
score map>
)
row format serde 'org.openx.data.jsonserde.JsonSerDe'  指定使用json  SerDe  第三方提供jar包
;

数据案例:

{"uname":"zs","score":{"chinese":[90,87],"math":[98,99],"english":[76,79]}}
{"uname":"ls","score":{"chinese":[90,87],"math":[98,99],"english":[76,79]}}

加载数据:

load data local inpath '/usr/local/hivedata/complex' into table complex;

查询:
查询学生成绩,要求学生下半年的语文成绩大于85;
select *
from complex
where score["chinese"][1] > 87
;
 

 

 

 

 

 


 

你可能感兴趣的:(大数据Hive)