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

[一起学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  
顶顶更健康

相关推荐

    jdbc连接hive数据库的驱动jar包

    在Java编程环境中,JDBC(Java Database Connectivity)是一种标准接口,用于与各种类型的数据库进行通信。当需要通过Java程序访问Hive数据库时,就需要使用Hive JDBC驱动。Hive是Apache Hadoop生态系统中的一个数据...

    java操作Hive源码之HiveJDBC实例(mysql数据库)

    在Java编程环境中,与Hive进行交互通常涉及使用Hive JDBC驱动程序,这是一种允许Java应用程序通过JDBC(Java Database Connectivity)接口与Hadoop上的Hive数据仓库进行通信的方式。本实例将聚焦于如何使用Java和...

    13-Hive基本操作1

    `CREATE TABLE`用于创建Hive中的表。你可以指定表的列名、数据类型以及存储格式。例如,`CREATE TABLE my_table (col1 string, col2 int)`将创建一个名为my_table的表,包含两列col1和col2。 5. **修改表**: ...

    hive元数据生成建表语句

    本资源“hive元数据生成建表语句”主要关注如何从已有的Hive元数据中自动生成创建表的SQL语句,以便于理解和重现现有数据表的结构。 首先,理解Hive元数据: 1. **数据库**:Hive支持多数据库的概念,每个数据库...

    hive客户端安装_hive客户端安装_hive_

    在Hive CLI中,你可以创建数据库、表,加载数据,执行SQL查询等操作。 七、连接Hive与Hadoop 确保Hive知道Hadoop的位置,编辑$HIVE_HOME/conf/hive-site.xml,添加以下配置: ```xml ... &lt;name&gt;fs.defaultFS ...

    Hive使用手册Hive使用手册

    Hive是建立在Hadoop之上的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,方便大数据的分析。连接Hive通常通过Hive Shell或使用其他支持Hive的客户端如Beeline、Hue等。要连接Hive...

    Hive练习 1.在Hive中建立数据库hive,该库中建立外部表party,将hdfs的/party.csv导入该表,用命令

    通过以上步骤,我们不仅学习了如何在Hive中创建数据库和外部表,还掌握了如何通过SQL查询进行数据分析。这些练习涵盖了基本的数据表管理以及高级的数据分析技巧,对于理解Hive的基本操作和功能非常有帮助。此外,...

    使用javaJDBC连接hive数据,实现简单的操作!

    Java JDBC(Java Database Connectivity)是Java编程语言中与各种数据库进行交互的标准API。在本教程中,我们将深入探讨如何使用Java JDBC连接到Hive数据库,并执行基本的数据操作。Hive是一个基于Hadoop的数据仓库...

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    理解Hive JDBC的工作原理以及如何在Java项目中正确配置和使用它是大数据开发中的关键技能之一。通过这个实例,你现在已经具备了使用Hive JDBC的基础知识,可以进一步探索更高级的Hive和Java集成技术。

    hive-jdbc所需jar(精简可用)

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得用户能够通过SQL语句对存储在Hadoop分布式文件系统(HDFS)中的大数据进行分析。...

    Hive教程--命令

    创建数据库是 Hive 中最基本的操作之一。Hive 中的数据库是一个命名空间或表的集合。使用 CREATE DATABASE 语句可以创建数据库。在 Hive 中,配置单元包含一个名为 default 的默认数据库。CREATE DATABASE 语句的...

    大数据课程hive编程课件

    `:在`hive`数据库中创建表`usr`,包含`id`、`name`和`age`三个字段。 - `hive&gt; create table if not exists hive.usr(id bigint,name string,age int) location '/usr/local/hive/warehouse/hive/usr';`:创建表`...

    Hive教程.pdf

    - **定义**: Hive是一种基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射成一张数据库表,并提供类SQL查询功能,使得Hadoop能够更好地处理大数据。 - **特点**: - **易于使用**: 用户可以使用类似于SQL的...

    大数据技术基础实验报告-Hive安装配置与应用.doc

    默认情况下,Hive使用内嵌的Derby数据库作为元数据库,但考虑到并发访问和性能问题,推荐使用MySQL作为元数据库。首先,我们需要安装MySQL服务器: ``` apt-get install mysql-server -y service mysql start `...

    hive原理1介绍

    通过将结构化的数据文件映射为一张数据库表,Hive提供了SQL查询的功能,使得数据分析人员能够更加方便高效地处理大数据集。 #### Hive的数据模型 Hive中有多种数据模型,包括: - **内部表**(Internal Table):...

    最强HiveSQL开发指南.pdf

    2. **数据表操作**:CREATE TABLE用于创建新表,ALTER TABLE用于修改表结构,如添加或删除列,LOAD DATA用于将数据从本地或HDFS加载到表中,DROP TABLE用于删除表。 ### Hive的DQL查询语法 - **单表查询**:通过...

    SparkSQL通过Hive创建DataFrame

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

    hive 简明教程

    Hive是一个建立在Hadoop之上的数据仓库工具,用于处理和分析大规模数据。它的设计目的是为了简化对大数据的查询和分析,使得用户能够使用类似于SQL的语言来操作数据,而无需深入了解底层的MapReduce编程。 Hive的...

    hive入门.pdf

    Hive提供了DDL命令来管理数据库和表的生命周期,包括创建、修改和删除数据库与表等操作。 1. **创建和删除数据库** - 创建数据库:`CREATE DATABASE IF NOT EXISTS db_test COMMENT '用于测试';` - 删除数据库:...

    hive如何去安装与配置

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL方言(HQL)对存储在HDFS上的大规模数据进行查询和分析。在本文中,我们将详细讲解Hive的安装与配置过程,帮助你更好地理解和操作这个强大的大...

Global site tag (gtag.js) - Google Analytics