Hive(二)——数据查询等

楔子

学习了解hive

hive常用交互命令

[root@hadoop102 ~]# hive -help
usage: hive
 -d,--define <key=value>          Variable subsitution to apply to hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)
                                  
--  -e 不进入hive交互窗口执行sql
[root@hadoop102 ~]# hive -e "select * from student"
-- -f 执行脚本中的sql
 [root@hadoop102 ~]# hive -f  /opt/module/data/hive_student.sql
-- 退出
exit -- 先隐形提交数据,在退出
quit --不提交数据,退出

-- 在hive cli命令窗口查看hdfs 文件系统
hive (default)> dfs -ls /;

-- 在hive cli命令查看本地文件
hive (default)> ! ls /usr/local;
-- 查看 当前用户执行的 历史命令 (在当前用户目录下 .hivehistory 中  )
[grq@hadoop102 ~]$ pwd
/home/grq
[grq@hadoop102 ~]$ ll -a .h*
-rw-rw-r--. 1 grq grq 71 10月 15 15:29 .hivehistory

 

DDL数据定义

  • 创建数据库
    hive (default)> create database if not exists db_hive;

创建的数据库默认存储在 /user/hive/warehouse/${DB_NAME}.db
在这里插入图片描述

  • 创建数据指定位置
    hive (default)> create database if not exists db_hive2 location '/db_hive2.db';
  • 修改数据库
    hive (default)> alter database db_hive set dbproperties('createtime'='201810'); – 注意属性和值的单引号

hive (default)> desc database extended db_hive;
在这里插入图片描述


查询数据库

hive (default)> show databases;# 显示数据库信息
OK
database_name
db_hive
db_hive2
default
Time taken: 0.285 seconds, Fetched: 3 row(s)
hive (default)> show databases like 'db_hiv*';# 过滤显示数据库信息
OK
database_name
db_hive
db_hive2
Time taken: 0.102 seconds, Fetched: 2 row(s)
hive (default)> desc databases db_hive;
FAILED: SemanticException [Error 10001]: Table not found databases
hive (default)> desc database db_hive;# 显示数据库详情
OK
db_name	comment	location	owner_name	owner_type	parameters
db_hive		hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db	grq	USER	
Time taken: 0.166 seconds, Fetched: 1 row(s)
hive (default)> use db_hive;# 切换数据库
OK
Time taken: 0.17 seconds
hive (db_hive)> drop database db_hive2;# 删除数据库
OK
Time taken: 1.067 seconds
hive (db_hive)> drop database if exists db_hive2;
OK
Time taken: 0.117 seconds
hive (db_hive)> drop database if exists db_hive2 cascade;# 如果数据库不为空,使用cascade命令,强制删除
OK
Time taken: 0.215 seconds
hive (db_hive)> 

创建表例子

创建普通表

create table if not exists student2(
 id int,name string
) 
row format delimited fields terminated by '\t'
stored as textfile
location '/opt/module/data/stu.txt';


-- 加载数据
load data local inpath '/opt/module/data/stu.txt'  into table student2;

根据查询结果创建表
create table if not exists student3 as select * from student2;
在这里插入图片描述

根据已经存在的表结构创建表(不会执行mapreduce)
create table if not exists student4 like student2;

在这里插入图片描述

查询表类型
desc formatted student4;

外部表

外部表。hive并非完全拥有这份数据,删除表并不会删除这份数据,不过描述表的源数据信息会被删除。


使用场景
每天将收集到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT+INSERT进入内部表。

案例
创建部门、员工表

创建部门表

create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

员工表

create external table if not exists default.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by '\t';

导入数据

hive (default)> load data local inpath '/opt/module/data/dept.txt' into table default.dept;
hive (default)> load data local inpath '/opt/module/data/emp.txt' into table default.emp;

分区表


分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。


创建分区表 加载数据
create table dept_partition(
 deptno int, dname string, loc string
 )
 partitioned by (month string)
 row format delimited fields terminated by '\t';

加载数据

 hive (default)> load data local inpath '/opt/module/data/dept.txt' into table default.dept_partition partition(month='201809');
hive (default)> load data local inpath '/opt/module/data/dept.txt' into table default.dept_partition partition(month='201808');
hive (default)> load data local inpath '/opt/module/data/dept.txt' into table default.dept_partition partition(month='201807');

在这里插入图片描述

查询数据

hive (default)> select * from dept_partition where month='201809';
-- 联合查询
 select * from dept_partition where month='201809'
  union
 select * from dept_partition where month='201808'
  union
  select * from dept_partition where month='201807';

查看有多少分区

show partitions dept_partition;

创建二级分区

create table dept_partition2(
   deptno int, dname string, loc string
)
partitioned by (month string, day string)
row format delimited fields terminated by '\t';
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hive是一个大数据分析的开源平台,它提供了很多的综合应用案例,其中之一是用户学历查询。用户学历查询案例中,我们可以使用Hive数据仓库中读取关于用户的数据,然后通过分析和聚合这些数据,来确定用户的学历信息。在这个过程中,Hive提供了强大的SQL语句支持,以及丰富的函数库,可以满足各种复杂的分析需求。 ### 回答2: 近日,一家大型人力资源公司因为工作中频繁查询员工学历信息而决定使用hive技术来进行数据的处理和分析,通过hive的综合应用,实现了更加高效便捷的用户学历查询。 此次项目中,该公司首先进行了数据清洗和处理,将员工学历相关信息从不同的数据源中收集并整合,统一存储在hive数据仓库中。接着,通过hiveQL语言对数据进行查询和筛选,实现了仅需几秒钟即可得到用户学历信息的目标。使用hive的好处是能够快速处理海量数据,提高查询效率,同时还能实现数据分析和统计,并可视化展示数据结果。 在具体的操作中,该公司将原始数据进行拆分和转换,把不同的表进行组合和分析。同时,在处理数据过程中还运用了一些hadoop生态体系的其他组件,比如pig和spark等工具,以提高效率和处理这些数据所需的时间。在处理完成之后,用户可以通过hive对用户的学历进行查询,根据自己的需要,可以根据职位、学历、工作年限等限定条件来查询,大大地提高了查询精度,也让招聘和人事等相关部门的工作变得更加轻松便捷。 总的来说,该项目成功运用了hive技术,实现了用户学历查询的目标,提升了工作效率和数据查询的准确度。而且此次项目的经验和教训也可以为其他公司和企业在hive技术的运用方面提供借鉴和参考。 ### 回答3: Hive是Hadoop生态系统中的一项重要技术,它是基于Hadoop的MapReduce框架的数据仓库解决方案,可以进行大规模数据的存储和处理。而学历查询是一个典型的数据查询场景,由于学历查询需要对大量的数据进行快速高效的查询和分析,因此使用Hive进行学历查询可以大大提高查询效率和数据处理能力。 以学历查询为例,如果我们需要查询某个区域内所有人的学历情况,我们需要从海量的数据中筛选出相关的信息,然后进行分析和统计,这个过程需要耗费大量的时间和精力。但是如果使用Hive,我们可以通过Hive的SQL查询语句来快速实现数据查询和分析。 具体来说,如果我们要查询一个城市的所有居民的学历情况,首先要准备好相应的数据表或数据集,然后利用Hive的相关命令将数据导入到Hive表中。在数据导入完成后,我们可以使用类似于SQL的语句来实现查询。例如,我们可以使用Hive的SELECT语句和GROUP BY语句来实现按学历等级进行分组并统计各组的人数。 当然,如果需要更加复杂的查询和分析任务,我们也可以使用Hive进行更多的数据处理和计算任务。例如,Hive支持使用自定义的UDF函数,可以对数据实现更加灵活和精细化的处理。 总而言之,Hive作为一种分布式数据存储和查询解决方案,可以为学历查询数据处理场景提供快速、高效和可扩展的解决方案。通过合理的数据分析和查询,可以帮助我们更好地了解数据背后的真相,为业务决策提供更多有效的参考和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值