`
superlxw1234
  • 浏览: 541852 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:43124
社区版块
存档分类
最新评论

[一起学Hive]之三—Hive中的数据库(Database)和表(Table)

    博客分类:
  • hive
阅读更多

前面的文章中,介绍了可以把Hive当成一个“数据库”,它也具备传统数据库的数据单元,数据库(Database/Schema)和表(Table)。

 

本文介绍一下Hive中的数据库(Database/Schema)和表(Table)的基础知识,由于篇幅原因,这里只是一些常用的、基础的。

 

二、Hive的数据库和表

 

先看一张草图:

 

Hive结构

Hive结构

 

从图上可以看出,Hive作为一个“数据库”,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。

 

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

 

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

 

2.  Hive中的数据库(Database)

 

  • 进入Hive命令行,执行show databases;命令,可以列出hive中的所有数据库,默认有一个default数据库,进入Hive-Cli之后,即到default数据库下。
  • 使用use databasename;可以切换到某个数据库下,同mysql;

 

hive> show databases;
OK
default
lxw1234
usergroup_mdmp
userservice_mdmp
Time taken: 0.442 seconds, Fetched: 4 row(s)
hive> use lxw1234;
OK
Time taken: 0.023 seconds
hive>

 

 

  • Hive中的数据库在HDFS上的存储路径为

 

${hive.metastore.warehouse.dir}/databasename.db

 

比如,名为lxw1234的数据库存储路径为:

 

/user/hive/warehouse/lxw1234.db

 

  • 创建Hive数据库

 

使用HDFS超级用户,进入Hive-Cli,语法为:

 

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

 

 

              比如,创建名为lxw1234的数据库:

CREATE DATABASE IF NOT EXISTS lxw1234
COMMENT 'lxw的大数据田地-lxw1234.com'
localtion 'hdfs://namenode/user/lxw1234/lxw1234.db/';

            

创建时候可以指定数据库在HDFS上的存储位置。

注意:使用HDFS超级用户创建数据库后,该数据库在HDFS上的存储路径的属主为超级用户,如果该数据库是为某个或者某些用户使用的,则需要修改路径属主,或者在Hive中进行授权。

  • 修改数据库

修改数据库属性:

ALTER (DATABASE|SCHEMA) database_name

SET DBPROPERTIES (property_name=property_value, …);

修改数据库属主:

ALTER (DATABASE|SCHEMA) database_name

SET OWNER [USER|ROLE] user_or_role;

  • 删除数据库

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name

[RESTRICT|CASCADE];

默认情况下,Hive不允许删除一个里面有表存在的数据库,如果想删除数据库,要么先将 数据库中的表全部删除,要么可以使用CASCADE关键字,使用该关键字后,Hive会自己将数据库下的表全部删除。RESTRICT关键字就是默认情 况,即如果有表存在,则不允许删除数据库。

3.  Hive中的表(Table)

3.1 查看所有的表

进入Hive-Cli,使用use databasename;切换到数据库之后,执行show tables; 即可查看该数据库下所有的表:

hive> show tables;
OK
lxw1
lxw1234
table1
t_site_log

 

3.2 表的存储路径

默认情况下,表的存储路径为:

${hive.metastore.warehouse.dir}/databasename.db/tablename/

可以使用desc formatted tablename;命令查看表的详细信息,其中包括了存储路径:

Location:               hdfs://cdh5/hivedata/warehouse/lxw1234.db/lxw1234

 

3.3 内部表和外部表

Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。

  • 内部表和外部表最大的区别

内部表DROP时候会删除HDFS上的数据;

外部表DROP时候不会删除HDFS上的数据;

  • 内部表适用场景:

Hive中间表、结果表、一般不需要从外部(如本地文件、HDFS上load数据)的情况。

  • 外部表适用场景:

源表,需要定期将外部数据映射到表中。

  • 我们的使用场景:

每天将收集到的网站日志定期流入HDFS文本文件,一天一个目录;

在Hive中建立外部表作为源表,通过添加分区的方式,将每天HDFS上的原始日志映射到外部表的天分区中;

在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT+INSERT进入内部表。

3.4 创建表

创建表的语法选项特别多,这里只列出常用的选项。

其他请参见Hive官方文档:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

以一个例子来说吧:

CREATE EXTERNAL TABLE t_lxw1234 (

id INT,

ip STRING COMMENT ‘访问者IP’,

avg_view_depth DECIMAL(5,1),

bounce_rate DECIMAL(6,5)

) COMMENT ‘lxw的大数据田地-lxw1234.com’

PARTITIONED BY (day STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘,’

STORED AS textfile

LOCATION ‘hdfs://cdh5/tmp/lxw1234/';

  • 关键字EXTERNAL

表示该表为外部表,如果不指定EXTERNAL关键字,则表示内部表

  • 关键字COMMENT

为表和列添加注释

  • 关键字PARTITIONED BY

表示该表为分区表,分区字段为day,类型为string

  • 关键字ROW FORMAT DELIMITED

指定表的分隔符,通常后面要与以下关键字连用:

FIELDS TERMINATED BY ‘,’ //指定每行中字段分隔符为逗号

LINES TERMINATED BY ‘\n’ //指定行分隔符

COLLECTION ITEMS TERMINATED BY ‘,’ //指定集合中元素之间的分隔符

MAP KEYS TERMINATED BY ‘:’ //指定数据中Map类型的Key与Value之间的分隔符

举个例子:

create table score(name string, score map<string,int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘\t’

COLLECTION ITEMS TERMINATED BY ‘,’

MAP KEYS TERMINATED BY ‘:';

要加载的文本数据为:

biansutao ‘数学':80,’语文':89,’英语':95

jobs ‘语文':60,’数学':80,’英语':99

  • 关键字STORED AS

指定表在HDFS上的文件存储格式,可选的文件存储格式有:

TEXTFILE //文本,默认值

SEQUENCEFILE // 二进制序列文件

RCFILE //列式存储格式文件 Hive0.6以后开始支持

ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive0.11以后开始支持

PARQUET //列出存储格式文件,Hive0.13以后开始支持

  • 关键词LOCATION

指定表在HDFS上的存储位置。

 

Hive相关文章(持续更新)

一起学Hive系列

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

1
0
分享到:
评论
1 楼 annmi_cai 2016-03-11  
顶顶更健康

相关推荐

    SparkSQL通过Hive创建DataFrame

    Table or view 'stu' not found in database 'default'; 分析:确实没有临时表View,并且没有开启Hive支持 解决:开启Hive支持 val spark: SparkSession = SparkSession.builder() .appName(SparkUtils) .master...

    bak_hive_ddl.sh

    hive数仓databases,tables DDL语句 备份脚本,下载即可直接运行,需要运行脚本前须保证数据库已创建完成,数据库需要手动创建

    大数据应用测试经验总结.pdf

    复制⽂件 hadoop fs -cp ${hdfs file} ${hdfs file} 移动⽂件 hadoop fs -mv ${hdfs file} ${hdfs file} 三、hive和hbase⽐较: Hive(⾮数据库) Hbase(数据库) 适⽤场景 ⽤于对⼀段时间内的数据进⾏分析查询,...

    Practical Hadoop Ecosystem(Apress,2016)

    This book is a practical guide on using the Apache Hadoop projects including MapReduce, HDFS, Apache Hive, Apache HBase, Apache Kafka, Apache Mahout and Apache ...How create a Hive table over Apache Solr

    greenplum-db-6.2.1-rhel7-x86_64.rpm

    For previous versions of the release notes for Greenplum Database, go to Pivotal Greenplum Database Documentation. For information about Greenplum Database end of life, see Pivotal Greenplum Database...

    Pro.Docker.148421829

    Table of Contents Chapter 1: Hello Docker Chapter 2: Installing Linux Chapter 3: Using Oracle Database Chapter 4: Using MySQL Database Chapter 5: Using MongoDB Chapter 6: Using Apache Cassandra ...

    Professional NoSQL 英文版 Shashank.Tiwari

    Table of Contents INTRODUCTION xvii PART I: GETTING STARTED CHAPTER 1: NOSQL: WHAT IT IS AND WHY YOU NEED IT 3 CHAPTER 2: HELLO NOSQL: GETTING INITIAL HANDS-ON EXPERIENCE 21 CHAPTER 3: ...

    pyetl:python ETL框架

    Pyetl Pyetl is a Python 3.6+ ETL framework Installation: ...# 数据库之间数据同步,表到表传输 dst = pymysql.connect(host="localhost", user="your_user", password="your_password", db="tes

    hadoop_the_definitive_guide_3nd_edition

    Hadoop definitive 第三版, 目录如下 1. Meet Hadoop . . . 1 Data! 1 Data Storage and Analysis 3 Comparison with Other Systems 4 RDBMS 4 Grid Computing 6 Volunteer Computing 8 A Brief History of Hadoop 9...

    pydbclib:面向人类的 Python 数据库工具包

    Pydbclib is Python Database Connectivity Lib, a general database operation toolkit for Python 3.6+ Installation: pip3 install pydbclib Example: from pydbclib import connect # 使用with上下文,可以自动...

    Hadoop.The.Definitive.Guide.4th.Edition.1491901632

    Learn the HBase distributed database and the ZooKeeper distributed configuration service Table of Contents Part I. Hadoop Fundamentals Chapter 1. Meet Hadoop Chapter 2. MapReduce Chapter 3. The Hadoop...

    R.for.Programmers.Mastering.the.Tools.14987368

    Table of Contents Chapter 1: Basic R Packages Chapter 2: Basic Packages of Time Series Chapter 3: Performance Monitoring Packages of R Chapter 4: Cross-Platform Communication of R Chapter 5: Server ...

Global site tag (gtag.js) - Google Analytics