欢迎投稿

今日深度:

Hive基本操作,

Hive基本操作,


文章目录

  • 1、Hive在HDFS上的默认存储路径
  • 2、hive中的数据库
    • 查看数据库
    • 切换数据库(如切换到数据库kaidy)
    • 创建数据库
    • 删除数据库
  • 3、hive中的表
    • 查看数据库中所有的表
    • 创建表
    • 删除表
    • 查看已创建的表信息
    • 输出创建指定表或者视图的语句
    • 列出表所有属性
    • 查看表中的全部数据
    • 查看表中的记录数
    • 查看表中前5条数据
    • 外部表和内部表
  • 4、分区(partition)
    • 建立分区表
    • 查看分区信息
    • partition
    • 指定分区查看数据
    • 删除指定分区
    • 批量删除分区
  • 5、静态分区和动态分区
    • 动态分区设置方法
  • 6、分桶(bucket)

1、Hive在HDFS上的默认存储路径

Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse.

2、hive中的数据库

查看数据库

show databases;

切换数据库(如切换到数据库kaidy)

use kaidy;

创建数据库

语法:CREATE DATABASE|SCHEMA [IF NOT EXISTS]

删除数据库

#Hive中的数据库在HDFS上的存储路径为:
${hive.metastore.warehouse.dir}/databasename.db
比如,名为kaidy的数据库存储路径为:
/user/hive/warehouse/kaidy.db

3、hive中的表

查看数据库中所有的表

show tables;

创建表

语法CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
[(col_name data_type [COMMENT col_comment], …)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]

删除表

语法DROP TABLE [IF EXISTS] table_name;
#Hive中的表在HDFS上的存储路径为:
${hive.metastore.warehouse.dir}/databasename.db/tablename/

查看已创建的表信息

DESCRIBE EXTENDED db_name.table_name
–FORMATTED关键字替代EXTENDED能提供更加可读和冗长的输出信息
DESCRIBE mydb.employee.salary
–如果只想查看某一列的信息,则使用EXTENDED也不会提供更多的信息

输出创建指定表或者视图的语句

语法:SHOW CREATE TABLE ([db_name.]table_name|view_name)

列出表所有属性

语法:SHOW TBLPROPERTIES table_name

查看表中的全部数据

select * from table_name;

查看表中的记录数

select count(*) from table_name;

查看表中前5条数据

select * from table_name limit 5;

外部表和内部表

Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。
内部表和外部表最大的区别:
内部表DROP时候会删除HDFS上的数据;
外部表DROP时候不会删除HDFS上的数据;
内部表适用场景:
Hive中间表、结果表、一般不需要从外部(如本地文件、HDFS上load数据)的情况。
外部表适用场景:
源表,需要定期将外部数据映射到表中。
使用场景:
每天将收集到的网站日志定期流入HDFS文本文件,一天一个目录;
在Hive中建立外部表作为源表,通过添加分区的方式,将每天HDFS上的原始日志映射到外部表的天分区中;
在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT+INSERT进入内部表。

4、分区(partition)

建立分区表

CREATE TABLE IF NOT EXISTS alarm3 ( eid int, name String, salary Float, destination String, month String) COMMENT ‘Alarm details’ partitioned by (p_province String) clustered by (eid) into 8 buckets STORED AS orc TBLPROPERTIES (‘transactional’=‘true’);

查看分区信息

语法:SHOW PARTITIONS table_name [PARTITION(partition_desc)]

partition

p_date=2019-01-01/p_province=beijingshi
p_date=2019-02-01/p_province=beijingshi
p_date=2019-02-01/p_province=tianjinshi
p_date=2019-02-01/p_province=xinjiangweiwuerzuzizh
p_date=2019-02-01/p_province=zhejiangsheng

指定分区查看数据

##基于单个分区查询例子:
select * from table_name where p_date=‘2019-02-01’ limit 100;
##基于两级分区查询例子:
select * from table_name where concat_ws(’,’,p_date,p_province)=‘2019-02-01,beijingshi’ limit 100;

删除指定分区

alter table table_name drop partition(p_province=‘anhuisheng’);

批量删除分区

alter table table_name drop if exists
partition(dt=‘20180401’),
partition(dt=‘20180402’),
partition(dt=‘20180403’),
partition(dt=‘20180404’);

5、静态分区和动态分区

动态分区设置方法

set hive.exec.dynamic.partition=true; 这个属性默认值是true,就是开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict; 这个属性默认值是strict,就是要求分区字段必须有一个是静态的分区值,随后会讲到,当前设置为nonstrict,那么可以全部动态分区
set hive.exec.max.dynamic.partitions=100000;能被每个mapper或者reducer创建的最大动态分区的数目,如果一个mapper或者reducer试图创建多余这个值的动态分区数据,会引发错误
set hive.exec.max.dynamic.partitions.pernode=100000;被一条带有动态分区的SQL语句所能创建的动态分区总量,如果超出限制会报出错误
set hive.exec.max.created.files=100000;全局能被创建文件数据的最大值,专门有一个hadoop计数器来跟踪该值,如果超出会报错
可以直接把上述设置项在控制台中运行一下,以后就可以自由动态分区了。

多个分区字段时,可以实现半自动分区(部分字段静态分区,注意静态分区字段要在动态分区字段前面)

6、分桶(bucket)

#创建表分桶示例:
CREATE TABLE IF NOT EXISTS alarm2 ( eid int, name String, salary Float, destination String, month String, province String) COMMENT ‘Alarm details’ clustered by (eid) into 8 buckets STORED AS orc TBLPROPERTIES (‘transactional’=‘true’);

www.htsjk.Com true http://www.htsjk.com/hive/40223.html NewsArticle Hive基本操作, 文章目录 1、Hive在HDFS上的默认存储路径 2、hive中的数据库 查看数据库 切换数据库(如切换到数据库kaidy) 创建数据库 删除数据库 3、hive中的表 查看数据库中所有的表 创建...
相关文章
    暂无相关文章
评论暂时关闭