美文网首页
2.Hive使用

2.Hive使用

作者: 南宫萧言 | 来源:发表于2019-01-12 15:56 被阅读0次

1.1Hive SQL

1.1.1Hive的数据类型

primitive_type

  array_type        //数组格式

  |map_type        //map格式

  |struct_type      //结构体格式

primitive_type

 |TINYINT

  |SMALLINT

  |INT

  |BIGINT

  |BOOLEAN

  |FLOAT

  |DOUBLE

  |STRING

hive比普通的mysql多了三种基本的数据结构,array,map,struct。
具体使用参考:hive使用手册

创建表的案例

hive数据的插入通过使用数据格式化,从hdfs文件中读取,上图后续的代码是格式化读取文件。

LOAD DATA LOCAL INPUT  ’/root/data' INTO TABLE psn;加载文件给hive数据表。

1.2Hive分区

1.2.1内部表和外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)

区别:

内部表数据由Hive自身管理,外部表数据由HDFS管理;

内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;

删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

1.2.2分区(加目录)

Hive 分区partition

必须在表定义时指定对应的partition字段

a、单分区建表语句:

create table day_table (id int, content string) partitioned by (dt string);

单分区表,按天分区,在表结构中存在id,content,dt三列。以dt为文件夹区分

b、双分区建表语句:

create table day_hour_table (id int, content string) partitioned by (dt string, hour string);

双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。先以dt为文件夹,再以hour子文件夹区分

添加分区:AlTER TABLE psn2 ADD partition(age=10,sex='boy')

Hive添加分区表语法

(表已创建,在此基础上添加分区):

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1']partition_spec [LOCATION 'location2'] ...;

partition_spec:

: (partition_column = partition_col_value, partition_column = partition_col_value, ...)

例:ALTER TABLE day_table ADD PARTITION (dt='2008-08-08', hour='08')

Hive删除分区语法

ALTER TABLE table_name DROP partition_spec, partition_spec,...partition_spec:

: (partition_column = partition_col_value, partition_column = partition_col_value, ...)

用户可以用ALTER TABLE DROP PARTITION 来删除分区。内部表中、对应分区的元数据和数据将被一并删除。

例:ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08',hour='09');

Hive向指定分区添加数据语法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2...)]

例:LOAD DATA INPATH '/user/pv.txt' INTOTABLE day_hour_table PARTITION(dt='2008-08- 08', hour='08');

LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hour partition(dt='2010-07- 07');

当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录

Hive查询执行分区语法

SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

分区表的意义在于优化查询。查询时尽量利用分区字段。如果不使用分区字段,就会全部扫描。

Hive查询表的分区信息语法:SHOW PARTITIONS day_hour_table;

1.2.3加数据(读时检查)

1.直接上传文件到HDFS目录下,一般为/user/hive/warehouse/数据库名/表名/下。

2.通过load data加载本地文件到hdfs目录下。

3.insert into tablename....

FROM psn3 insert overwrite table psn4 select id,name,likes   作用:复制表,中间表等。

1.3Hive SerDe

Hive SerDe - Serializer and Deserializer

1.SerDe 用于做序列化和反序列化。

2.构建在数据存储和执行引擎之间,对两者实现解耦。

3.Hive通过ROW FORMAT DELIMITED以及SERDE进行内容的读写.

row_format:

DELIMITED

          [FIELDS TERMINATED BY char [ESCAPEDBY char]]

          [COLLECTION ITEMS TERMINATED BY char]

          [MAP KEYS TERMINATED BY char]

          [LINES TERMINATED BY char]

|SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

Hive正则匹配

 CREATE TABLElogtbl (

   host STRING,

   identity STRING,

   t_userSTRING,

   time STRING,

   request STRING,

   refererSTRING,

   agent STRING)

 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

 WITH SERDEPROPERTIES ( "input.regex"= "([^ ]*) ([^ ]*) ([^ ]*) \\[(.*)\\] \"(.*)\" (-|[0-9]*)

(-|[0-9]*)" ) STORED AS TEXTFILE;

1.4Hive Beeline

Beeline要与HiveServer2配合使用

服务端启动hiveserver2

客户的通过beeline两种方式连接到hive:

1.beeline -u jdbc:hive2://localhost:10000/default -n root

2.beeline

beeline>

!connect jdbc:hive2://<host>:<port>/<db>;auth=noSasl root 123

默认用户名、密码不验证

1.5Hive JDBC

服务端启动hiveserver2后,在java代码中通过调用hive的jdbc访问默认端口10000进行连接、访问。

jdbc访问hive数据库的java代码

相关文章

  • 2.Hive使用

    1.1Hive SQL 1.1.1Hive的数据类型 primitive_type array_type //数...

  • 180531早课记录

    1.hive是什么? hive是构建在 Hadoop 上的数据仓库构架 2.hive的默认使用什么数据库?生产上...

  • hdfs文件操作和Hive 数据库操作(java api)

    1.hdfs文件操作 2.hive数据库连接 }

  • 2018-05-31

    1.hive是什么? 基于hadoop之上的存储仓库 2.hive的默认使用什么数据库?生产上我们一般用什么? ...

  • 2018-05-31 Morning Study — Day02

    1.hive是什么? hive是基于Hadoop的一个数据仓库工具 2.hive的默认使用什么数据库?生产上我们一...

  • 6月04日第二十四次早课【Hive】

    1.hive数据分为哪两块?分别存储在哪? metadata data | mysql hdfs 2.hive的建...

  • 2018-06-04 Morning Study — Day02

    1.hive数据分为哪两块?分别存储在哪? metadata,data|mysql,hdfs 2.hive的建表S...

  • Hive SQL

    语法 1.把collect的数组转为string类型 2.HIVE中select除了某些字段之外的剩余所有字段 3...

  • Hive

    Day1 基础: 1.hive是做什么的?hive的特性,应用场景 2.hive内部组成 jar、Thrift、元...

  • 4.Hive总结

    1.hive是数据仓库,主要是对历史数据做分析; 2.hive的产生是为了帮助非Java程序员做MR分析; 3.h...

网友评论

      本文标题:2.Hive使用

      本文链接:https://www.haomeiwen.com/subject/xnefdqtx.html