返回顶部
首页 > 资讯 > 精选 >Hive实际操作用法介绍
  • 367
分享到

Hive实际操作用法介绍

2023-06-02 17:06:26 367人浏览 薄情痞子
摘要

这篇文章主要介绍“Hive实际操作用法介绍”,在日常操作中,相信很多人在Hive实际操作用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hive实际操作用法介绍”的疑惑有所帮助!接下来,请跟着小编一起来

这篇文章主要介绍“Hive实际操作用法介绍”,在日常操作中,相信很多人在Hive实际操作用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hive实际操作用法介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Hive表类型测试

内部表

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

$ cat /tmp/table_test.csv 1,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 seconds
hive> 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.csv 6,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 seconds hive> 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 seconds hive> 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实际操作用法介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Hive实际操作用法介绍

本文链接: https://lsjlt.com/news/230741.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hive实际操作用法介绍
    这篇文章主要介绍“Hive实际操作用法介绍”,在日常操作中,相信很多人在Hive实际操作用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hive实际操作用法介绍”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • C++程序的函数指针实际操作介绍
    这篇文章主要介绍“C++程序的函数指针实际操作介绍”,在日常操作中,相信很多人在C++程序的函数指针实际操作介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++程序的函数指针实际操作介绍”的疑惑有所帮助!...
    99+
    2023-06-03
  • C++流操作之fstream用法介绍
    在Windows平台对文件进行存取操作可选的方案有很多,如果采用纯C,则需要用到File*等,当然也可以直接调用Windows API来做;如果采用C++,首先想到的就是文件流fst...
    99+
    2022-11-15
    C++ 流操作 fstream
  • Python语法的实际应用操作
    本篇内容介绍了“Python语法的实际应用操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 元组用(),list用[],元祖不能修改,主要...
    99+
    2023-06-17
  • jQuery操作文本方法介绍
    text()可以获取或设置元素的文本内容。例如: 示例: <!DOCTYPE html> <html lang="en"> <head> ...
    99+
    2024-04-02
  • jQuery操作value值方法介绍
    val()可以获取或设置元素的value属性值。语法如下: 示例: <!DOCTYPE html> <html lang="en"> <head>...
    99+
    2024-04-02
  • Dbeaver的常用操作介绍
    这篇文章主要讲解了“Dbeaver的常用操作介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dbeaver的常用操作介绍”吧!dbeaver是免费和开源(...
    99+
    2024-04-02
  • C#操作进程的方法介绍
    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行...
    99+
    2024-04-02
  • jQuery操作属性值方法介绍
    一、获取或设置元素的属性值 attr()获取或设置匹配元素的属性值,语法如下: 获取元素属性值示例: <!DOCTYPE html> <html lang="en...
    99+
    2024-04-02
  • jQuery操作HTML代码方法介绍
    html()可以对HTML代码进行操作,类似于元素JavaScript中的innerHTML。 例如: 示例: <!DOCTYPE html> <html lan...
    99+
    2024-04-02
  • NodeJs操作MYSQL方法详细介绍
    目录在项目中操作数据库的步骤安装与配置 mysql 模块1. 安装 mysql 模块2. 配置 mysql 模块3. 测试 mysql 模块能否正常工作使用 mysql 模块操作 M...
    99+
    2024-04-02
  • 最实用Win7技巧快捷操作介绍
    Win7的桌面设置更加个性化,我们的照片、喜欢的壁纸,都可以随时设为背景,而女生们的桌面壁纸很多都比较卡哇伊,但如果去做演示时,投射到投影公示,也许就会带来一些尴尬。其实在演示前,我们只需要通过Win+X快捷键打开移动中...
    99+
    2023-05-26
    Win7技巧 快捷操作 操作 技巧 Win7
  • Kube-Eventer的操作介绍
    这篇文章主要介绍“Kube-Eventer的操作介绍”,在日常操作中,相信很多人在Kube-Eventer的操作介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kube-E...
    99+
    2024-04-02
  • Linux操作系统介绍
    1,Linux操作系统介绍**什么是操作系统操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。2,Li...
    99+
    2023-06-05
  • linux vim的操作介绍
    本篇内容介绍了“linux vim的操作介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!V1. 默认字符编码为utf8,打开使用gb231...
    99+
    2023-06-13
  • C语言中操作符的介绍及用法
    这篇文章主要讲解了“C语言中操作符的介绍及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中操作符的介绍及用法”吧!目录操作符分类算术操作符移位操作符整数存储规则左右移位规则赋值操作...
    99+
    2023-06-20
  • Mysql表的操作方法详细介绍
    目录创建表查看表结构修改表删除表创建表 语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 ...
    99+
    2024-04-02
  • jQuery样式操作方法整理介绍
    目录1.操作css方法2.设置样式类方法2.1添加类2.2移除类2.3切换类3.tab栏切换案例实现效果案例分析核心代码html结构4.jQuery类操作与className区别1....
    99+
    2022-11-13
    jQuery样式操作方法 jQuery样式操作函数 jQuery样式操作
  • Bash Shell字符串操作方法介绍
    这篇文章主要介绍“Bash Shell字符串操作方法介绍”,在日常操作中,相信很多人在Bash Shell字符串操作方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Bash Shell字符串操作方法介绍...
    99+
    2023-06-09
  • Java操作mysql数据库实例介绍
    这篇文章主要介绍“Java操作mysql数据库实例介绍”,在日常操作中,相信很多人在Java操作mysql数据库实例介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作