我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hive数据仓库如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hive数据仓库如何使用

这篇文章将为大家详细讲解有关Hive数据仓库如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

Hive数据仓库如何使用

Hive表类型测试

内部表

数据准备,先在HDFS上准备文本文件,逗号分割,并上传到/test目录,然后在Hive里创建表,表名和文件名要相同。

$ cat /tmp/table_test.csv1,user1,10002,user2,20003,user3,30004,user4,40005,user5,5000
Hive创建表
hive> CREATE TABLE table_test ( id int, name string, value INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

前半部分跟我们使用SQL语法差不多,后面的设置表示我们以’,’为分隔符导入数据。

Hive加载HDFS数据
$ hive -e 'load data local inpath '/tmp/table_test.csv' into table db_test.table_test'Loading data to table db_test.table_testOKTime taken: 0.148 seconds

同一个文件可以多次加载(追加数据),同时会在HDFS数据目录下多生成一个文件。另外这里加载数据local关键字表示我们从本地文件加载,如果不加local表示从HDFS中加载数据。

Hive查看数据
hive> select * from table_test;OK1       user1   10002       user2   20003       user3   30004       user4   40005       user5   5000Time taken: 0.058 seconds, Fetched: 5 row(s)

你也可以使用select id from table_test,但是注意在Hive中除了select * from table之外可以使用全表扫描之外,其余任何查询都需要走MapRedure。

查看HDFS数据文件
[hadoop@hadoop-nn ~]$ hdfs dfs -ls /user/hive/warehouse/db_test.db/table_test/Found 1 items-rwxrwxrwx   2 root supergroup         65 2017-06-15 22:27 /user/hive/warehouse/db_test.db/table_test/table_test.csv

注意文件权限属主为root,这是因为我是在root用户下进入hive的,一般在Hadoop用户下进入hive命令行进行创建表。

从HDFS加载数据到Hive,先上传数据到HDFS集群中
[hadoop@hadoop-nn ~]$ hdfs dfs -mkdir /test[hadoop@hadoop-nn ~]$ hdfs dfs -put /tmp/table_test.csv /test/table_test.csv
创建表
[hadoop@hadoop-nn ~]$ hivehive> CREATE TABLE hdfs_table ( id int, name string, value INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
加载数据
hive> LOAD DATA INPATH '/test/table_test.csv' OVERWRITE INTO TABLE db_test.hdfs_table;Loading data to table db_test.hdfs_tableOKTime taken: 0.343 secondshive> select * from db_test.hdfs_table;OK1       user1   10002       user2   20003       user3   30004       user4   40005       user5   5000Time taken: 0.757 seconds, Fetched: 5 row(s)

注意,如果从HDFS加载数据到Hive后,原有的HDFS的数据文件就不会存在了。

[hadoop@hadoop-nn ~]$ hdfs dfs -ls /test/table_test.csvls: `/test/table_test.csv': No such file or directory
查看HDFS数据文件
[hadoop@hadoop-nn ~]$ hdfs dfs -ls /user/hive/warehouse/db_test.db/hdfs_table/Found 1 items-rwxrwxrwx   2 hadoop supergroup         65 2017-06-15 22:54 /user/hive/warehouse/db_test.db/hdfs_table/table_test.csv

再次上传一个文件到对应表的目录(/user/hive/warehouse/db_test.db/hdfs_table)下

[hadoop@hadoop-nn ~]$ cat /tmp/table_test.csv6,user6,6000[hadoop@hadoop-nn ~]$ hdfs dfs -put /tmp/table_test.csv /user/hive/warehouse/db_test.db/hdfs_table/table_test_20170616.csv
再次查看Hive表
hive> select * from db_test.hdfs_table;OK1       user1   10002       user2   20003       user3   30004       user4   40005       user5   50006       user6   6000Time taken: 0.053 seconds, Fetched: 6 row(s)

可以看到,我们追加的一个表信息也显示出来了。

分区表

创建分区表时,需要给定一个分区字段,这个分区字段可以是已经存在的,也可以是不存在(如果不存在创建表时会自动添加)。Hive分区概念跟MySQL分区差不多。下面创建一个以月为分区的分区表。

CREATE TABLE par_table ( id int, name string, value INT) partitioned by (day int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
查看表信息
hive> desc par_table;OKid                      int                                        name                    string                                      value                   int                                        day                     int                                                       # Partition Information          # col_name              data_type               comment                           day                     int                                        Time taken: 0.023 seconds, Fetched: 9 row(s)
加载数据到Hive分区表中,需要指定对应的分区表进行数据加载
hive> LOAD DATA LOCAL INPATH '/tmp/table_test.csv' OVERWRITE INTO TABLE db_test.par_table PARTITION (day='22');Loading data to table db_test.par_table partition (day=22)OKTime taken: 0.267 secondshive> LOAD DATA LOCAL INPATH '/tmp/table_test.csv' OVERWRITE INTO TABLE db_test.par_table PARTITION (day='23');Loading data to table db_test.par_table partition (day=23)OKTime taken: 0.216 seconds
查看HDFS数据文件展示样式
[hadoop@hadoop-nn ~]$ hdfs dfs -ls /user/hive/warehouse/db_test.db/par_table/Found 1 itemsdrwxrwxrwx   - hadoop supergroup          0 2017-06-16 01:12 /user/hive/warehouse/db_test.db/par_table/day=22drwxrwxrwx   - hadoop supergroup          0 2017-06-16 01:12 /user/hive/warehouse/db_test.db/par_table/day=23

可以看到多了对应的分区目录了。

查询数据,查询时有点不太一样,如果给定一个where条件指定分区字段(也就是根据查询字段来进行分区),这样就只会查询这个分区的内容,不需要加载所有表。如果查询字段不是分区字段,那么就需要扫描所有的分区了。如下两个示例:

hive> select * from db_test.par_table;OK6       user6   6000    226       user6   6000    23Time taken: 0.054 seconds, Fetched: 2 row(s)hive> select * from db_test.par_table where day=22;OK6       user6   6000    22Time taken: 0.068 seconds, Fetched: 1 row(s)
外部表

Hive支持外部表,外部表跟内部表和分区表不同。只需要在HDFS中有了对应的文件,然后在Hive就可以创建一个表并指定对应的目录就可以直接查数据了,而不需要执行数据加载任务。下面来测试看看:

先在HDFS中创建目录和上传文件:

[hadoop@hadoop-nn ~]$ hdfs dfs -mkdir -p /hive/external[hadoop@hadoop-nn ~]$ hdfs dfs -put /tmp/table_test.csv /hive/external/ext_table.csv

然后在Hive中直接创建表:

CREATE EXTERNAL TABLE ext_table ( id int, name string, value INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/hive/external';

此时,直接查询此表,不需要加载数据了

hive> select * from ext_table;OK6       user6   6000Time taken: 0.042 seconds, Fetched: 1 row(s)

Hive还支持桶表,这里就不说了,很少用,有兴趣自行查看资料。

最后来一个MapReduce处理Hive的过程

hive> select count(*) from table_test;WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.Query ID = hadoop_20170616021047_9c0dc1bf-383f-49ad-83e2-e2e5dfdcb20cTotal jobs = 1Launching Job 1 out of 1Number of reduce tasks determined at compile time: 1In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=In order to limit the maximum number of reducers: set hive.exec.reducers.max=In order to set a constant number of reducers: set mapreduce.job.reduces=Starting Job = job_1497424827481_0004, Tracking URL = http://master:8088/proxy/application_1497424827481_0004/Kill Command = /usr/local/hadoop/bin/hadoop job  -kill job_1497424827481_0004Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 12017-06-16 02:10:52,914 Stage-1 map = 0%,  reduce = 0%2017-06-16 02:10:57,062 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.11 sec2017-06-16 02:11:02,204 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 2.53 secMapReduce Total cumulative CPU time: 2 seconds 530 msecEnded Job = job_1497424827481_0004MapReduce Jobs Launched:Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 2.53 sec   HDFS Read: 7980 HDFS Write: 102 SUCCESSTotal MapReduce CPU Time Spent: 2 seconds 530 msecOK10Time taken: 15.254 seconds, Fetched: 1 row(s)

可以好好看一下处理过程,由于是测试环境所以MP时间很久。

视图

另外Hive也支持视图,使用非常简单,如下配置:

hive> create view view_test as select * from table_test;OKTime taken: 0.054 secondshive> select * from view_test;OKd1      user1   1000d1      user2   2000d1      user3   3000d2      user4   4000d2      user5   5000Time taken: 0.057 seconds, Fetched: 5 row(s)
Hive元数据信息

然后我们来查看一下Hive元数据表信息,在MySQL的hive库下的DBS表中存储Hive创建的库信息:

mysql> select * from DBS;+-------+-----------------------+---------------------------------------------------+---------+------------+------------+| DB_ID | DESC                  | DB_LOCATION_URI                                   | NAME    | OWNER_NAME | OWNER_TYPE |+-------+-----------------------+---------------------------------------------------+---------+------------+------------+|     1 | Default Hive database | hdfs://master:8020/user/hive/warehouse            | default | public     | ROLE       ||     6 | NULL                  | hdfs://master:8020/user/hive/warehouse/db_test.db | db_test | hadoop     | USER       |+-------+-----------------------+---------------------------------------------------+---------+------------+------------+2 rows in set (0.00 sec)DB_ID:库ID,具有唯一性。DESC:库描述信息。DB_LOCATION_URI:库在HDFS的URI地址。NAME:库名称。OWNER_NAME:库的所有者,用什么系统用户登录Hive创建的,其所有者就是谁,一般要在Hadoop用户下登录Hive。OWNER_TYPE:库的所有者类型。在hive库下的TBLS表中存储我们创建的表的元数据信息:mysql> select * from TBLS;+--------+-------------+-------+------------------+--------+-----------+-------+------------+----------------+--------------------+--------------------+| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | RETENTION | SD_ID | TBL_NAME   | TBL_TYPE       | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |+--------+-------------+-------+------------------+--------+-----------+-------+------------+----------------+--------------------+--------------------+|     11 |  1497579800 |     6 |                0 | root   |         0 |    11 | table_test | MANAGED_TABLE  | NULL               | NULL               ||     16 |  1497581548 |     6 |                0 | hadoop |         0 |    16 | hdfs_table | MANAGED_TABLE  | NULL               | NULL               ||     26 |  1497584489 |     6 |                0 | hadoop |         0 |    26 | par_table  | MANAGED_TABLE  | NULL               | NULL               ||     28 |  1497591914 |     6 |                0 | hadoop |         0 |    31 | ext_table  | EXTERNAL_TABLE | NULL               | NULL               |+--------+-------------+-------+------------------+--------+-----------+-------+------------+----------------+--------------------+--------------------+4 rows in set (0.00 sec)解释几个重要参数:TBL_ID:表ID,具有唯一性。CREATE_TIME:表创建时间。DB_ID:所属库的ID。LAST_ACCESS_TIME:最后一次访问时间。OWNER:表的所有者,用什么系统用户登录Hive创建的,其所有者就是谁,一般要在Hadoop用户下登录Hive。TBL_NAME:表名称。TBL_TYPE:表类型,MANAGED_TABLE表示受托管的表(如内部表、分区表、桶表),EXTERNAL_TABLE表示外部表,两个有个很大的区别就是受托管的表,当你执行DROP TABLE动作时,会把Hive元数据信息连同HDFS数据也一同删除。而外部表执行DROP TABLE时不会删除HDFS的数据,只是把元数据信息删除了。

关于“Hive数据仓库如何使用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hive数据仓库如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Hive数据仓库如何使用

这篇文章将为大家详细讲解有关Hive数据仓库如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,
2023-06-27

大数据Hadoop之——数据仓库Hive

目录一、概述二、Hive优点与使用场景1)优点2)使用场景三、Hive架构1)服务端组件1、Driver组件2、Metastore组件3、Thrift服务2)客户端组件1、CLI2、Thrift客户端3、WEBGUI3)Metastore详解四、Hive的工作
大数据Hadoop之——数据仓库Hive
2018-04-25

数据仓库和Hive环境搭建

数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。

hive数据仓库新增字段方法

目录新增字段1、方法1cascade知识2、方法2 (适用于外部表)3、方法3(下下策)修改字段删除列新增字段1、方法1alter taTyVzTble 表名 add columns (列名 string COMMENT '新添加的列'
2022-06-23

如何在 Java 中添加 Hive 数据库?(java怎么添加hive数据库)

在Java中添加Hive数据库是一项常见的任务,它可以帮助开发人员在Java应用程序中与Hive进行交互。以下是详细的步骤:一、环境准备确保你的系统中已经安装了Java开发环境(JDK)。你可以从
如何在 Java 中添加 Hive 数据库?(java怎么添加hive数据库)
Java数据库2024-12-22

如何让数据湖仓达到数据仓库的性能

数据湖仓库的演变重塑了数据分析,结合了数据湖和数据仓库的优势。尽管它具有变革性的潜力,但诸如高效查询性能等挑战仍然存在。创新解决方案如MPP查询执行、缓存框架和系统级优化可能弥合这些差距,并使企业能够享受湖仓库的所有好处,而无需承受任何缺点

数仓 | 该如何理解数据仓库的建设

在大数据时代,随着机器学习和人工智能的兴起,这个定义需要做一些补充:数据仓库不只是用于构建支持管理决策的商业智能BI的基础, 也是大量的机器学习和人工智能算法的底层基础之一。

PL/SQL在数据仓库中如何应用

在数据仓库中,PL/SQL可以应用于数据的提取、转换、加载等方面。具体来说,PL/SQL可以用于以下几个方面:数据提取:使用PL/SQL编写程序来提取数据并将数据从源系统导入到数据仓库中。可以通过编写存储过程或函数来实现数据提取的逻辑,比如
PL/SQL在数据仓库中如何应用
2024-05-07

如何配置使用YUM仓库

小编给大家分享一下如何配置使用YUM仓库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过源代码编译的方式安装程序在灵活性、可定制性方面具有无可比拟的优势,但也正
2023-06-27

Hive中如何创建和管理数据库

在Hive中创建和管理数据库需要使用Hive的DDL语句。下面是在Hive中创建和管理数据库的步骤:创建数据库:CREATE DATABASE IF NOT EXISTS dbname;这个语句用于创建一个名为dbname的数据库。如果数据
Hive中如何创建和管理数据库
2024-04-03

mysql数据库如何使用数据库

使用 mysql 数据库连接到数据库并创建数据库。选择数据库,创建表,并插入数据。使用查询从表中获取数据,并使用更新命令修改数据。使用删除命令删除数据,并管理用户和权限。定期备份和恢复数据库以确保数据安全。如何使用 MySQL 数据库My
mysql数据库如何使用数据库
2024-04-14

5000多张数据表,如何用SQL迁移到数据仓库?

需求背景最近公司打算集中梳理几大业务系统的数据,希望将各个业务系统中的数据集中到数据仓库中。总共有5000多张数据表,但是好在业务数据量没有像电商那么庞大,也就几十个G。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录