IT评测·应用市场-qidao123.com
标题:
Hive操作数据库,表等操作
[打印本页]
作者:
祗疼妳一个
时间:
2025-1-7 20:26
标题:
Hive操作数据库,表等操作
1、启动
上一篇文章报告了hive的摆设和搭建,那么这一篇文章给大家讲讲,hive的一些简单的使用方法。
起首我们按步骤启动hive。
起首切换到自己hadoop的sbin目录,以启动集群。
cd /export/servers/hadoop/sbin
复制代码
然后使用一键启动命令,在三台虚拟机上开始搭建集群。
start-all.sh
复制代码
启动完成之后,使用jps,看一下自己的进程们显示的全面不全面。
发现叫全面之后,我们切换到hadoop03的虚拟机,输入下面的命令启动hadoop03上面,启动一下我们配置的MetaStore服务。
hive --service metastore
复制代码
启动完MetaStore服务知乎,我们再双击一下hadoop03,开启下一个窗口。
启动HiveServers2
hive --servece hiveserver2
复制代码
开启之后,HiveServer2重要用来记载一些hadoop02操作的日志,举行一些活动的记载。大家可以在这里看到hadoop02链接服务的重要日志内容。
接下来,我们再切换到hadoop02,输入下面的命令,举行连接HadoopServer2的服务。
beeline -u jdbc:hive2://hadoop03:10000 -n root
复制代码
然后,我们就水灵灵的启动成功了。
2、操作
当我们电脑上出现下面的输出的时候,我们这次链接就成功了。
哦豁,接下来我们就可以开始举行数据库的一些操作了。
创建数据库
起首创建一个数据库,
CREATE DATABASE IF NOT EXISTS hive_db
COMMENT 'This is my hive_db'
LOCATION '/hive/hive_db'
WITH DBPROPERTIES ('author'='zhangsan', 'date'='2024-11-2');
复制代码
首句判断,如果数据库不存在,那么就创建一个数据库,
第二行是为数据库做了一个注释,说明一下这个数据库是做什么的,
第三行是指定了一下数据库在hdfs上储存的位置,可选,可以自己指定一个位置举行储存。
第四举动数据库添加了作者,还有日期两个属性。
。
创建完数据库之后,我们可以检察一下数据库的属性信息。
检察数据库的储存信息
describe database extended hive_db;
复制代码
修改数据库信息
alter database hive_db set dbproperties ('author'='lisi','date'='2022-07-02');
复制代码
删除数据库
‘
drop database hive_db;
复制代码
小小小提示,这句删除hive_db数据库内里所有的表和数据,如果数据库不为空,你没有删除成功的话,可以加上CASCADE关键字来举行一个强制的删除。
drop database hive_db CASCADE;
复制代码
接下来我们创建一个itcast的数据库,
CREATE DATABASE IF NOT EXISTS itcast
复制代码
内部表
之后,我们可以创建一个内部表,
内部表是hive默认创建表的范例,Hive会完全控制和管理内部表的数据和元数据。
Hive负责管理表的元数据,包括表布局、列范例、分区信息等。
内部表适用于数据完全由Hive管理,数据生命周期短,不须要与其他系统共享数据的场景。
create table if not exists
itcast.managed_table(
dept_id INT comment "This is deptid",
staff_id INT comment "This is staffid",
staff_name STRING comment "This is staffname",
staff_age INT comment "This is staffage",
salary FLOAT comment "This is staff salary",
hobby ARRAY<STRING> comment "This is staff hobby",
base_info MAP<STRING, INT> comment "Record height and weight",
person_info STRUCT<marry:STRING,children:STRING>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n'
tblproperties("comment"="This is a managed table");
复制代码
创建完成之后,我们就可以开始创建下一个表。
外部表的创建
外部表是指表的数据实际存储在Hive Metastore之外的位置(如HDFS、HBase、Amazon S3等),Hive仅维护表的元数据(如表布局、分区信息等),而不管理数据本身。
外部表在元数据管理方面,Hive维护表的元数据,但不涉及数据的实际存储和管理。
create external table if not exists
itcast.external_table(
staff_id INT comment "This is staffid",
staff_name STRING comment "This is staffname",
salary FLOAT comment "This is staff salary"
)
row format delimited
fields terminated by ','
lines terminated by '\n'
location '/hive/external_table/';
复制代码
桶表的创建
桶表是一种特别的表格存储方式,它将数据分成若干个桶,每个桶中存放一部门数据。通过对数据举行桶分组,可以提高查询的性能,镌汰数据的扫描和处理时间。
桶表适用于须要对数据举行高效查询和处理的场景,特别是当数据会被经常用来做连接查询时。
并且,桶表可以提高查询效率,优化数据分组,镌汰数据的扫描和处理时间。通过数据预分组,可以加速JOIN操作和抽样的速度。
create external table if not exists
itcast.clustered_table(
id STRING,
name STRING,
gender STRING,
age INT,
dept STRING
)
clustered by (dept) sorted by (age desc) into 3 buckets
row format delimited
fields terminated by ','
lines terminated by '\n'
location '/hive/clustered_table/';
复制代码
先容完并且成功创建了上面的三种表,接下来我们检察表managed_table的详细布局信息
desc formatted itcast.managed_table;
复制代码
对表重命名
表external_table重命名为external_table_new
alter table itcast.external_table rename to external_table_new;
复制代码
修改表中的字段
表external_table_new的字段staff_name修改为staff_username,并且将该字段的数据范例修改为varchar(30)
alter table itcast.external_table_new
change staff_name staff_username varchar(30);
复制代码
在表中添加字段
alter table itcast.external_table_new add columns (staff_gender STRING);
复制代码
复制代码
删除表
#删除数据库itcast中的表external_table_new
drop table itcast.external_table_new;
复制代码
在分区表中添加分区
#分区表partitioned_table添加分区city=Nanjing
alter table itcast.partitioned_table add partition(city="Nanjing");
复制代码
重命名分区
分区表partitioned_table的分区city=Nanjing重命名为city=Chongqing
alter table itcast.partitioned_table partition(city="Nanjing")
rename to partition(city="Chongqing");
复制代码
删除分区
删除分区表partitioned_table的分区city=Chongqing
alter table itcast.partitioned_table drop
if exists partition(city="Chongqing");
复制代码
复制代码
导入数据
数据文件staff_data导入表managed_table
load data local inpath '/export/data/staff_data' into table itcast.managed_table;
复制代码
向表clustered_table导入数据
INSERT INTO TABLE itcast.clustered_table
VALUES(1,'user01','man',20,'Personnel'),
(2,'user02','woman',23,'R&D Department'),
(3,'user03','man',36,'Marketing Department'),
(4,'user04','man',32,'Personnel'),
(5,'user05','woman',22,'R&D Department'),
(6,'user06','man',21,'Marketing Department'),
(7,'user07','woman',28,'Finance Department'),
(8,'user08','woman',23,'R&D Department'),
(9,'user09','man',26,'Finance Department'),
(10,'user10','man',25,'R&D Department');
复制代码
#向分区表partitioned_table的分区city=Beijing导入数据
load data inpath '/hive/data/staff_data2'
into table itcast.partitioned_table
partition (city='Beijing');
复制代码
#向分区表partitioned_table的分区city=Tianjin导入数据
INSERT INTO TABLE itcast.partitioned_table
PARTITION (city='Tianjin')
VALUES(6,'staff6','man')
,(7,'staff7','man')
,(8,'staff8','woman')
,(9,'staff9','man')
,(10,'staff10','woman');
复制代码
#开启动态分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
复制代码
#动态分区向分区表partitioned_table导入数据
INSERT INTO TABLE itcast.partitioned_table
PARTITION (city)
VALUES(11,'staff11','man','Guangdong')
,(12,'staff12','man','Guangdong')
,(13,'staff13','woman','Shanghai')
,(14,'staff14','man','Guangdong')
,(15,'staff15','woman','Shanghai');
复制代码
查询
select staff_name,base_info from itcast.managed_table;
复制代码
#查询1-1
select staff_name,base_info from itcast.managed_table;
复制代码
#查询1-2
select count(staff_id) from itcast.managed_table;
复制代码
#查询1-3
select sum(salary) from itcast.managed_table;
复制代码
#查询1-4
select distinct dept_id from itcast.managed_table;
复制代码
#查询2-1
select dept_id,staff_name from itcast.managed_table where dept_id=1001
复制代码
;
#查询2-2
select staff_name,base_info["height"] from itcast.managed_table where base_info["height"]>190;
复制代码
#查询2-3
select staff_name,hobby[0] from itcast.managed_table where hobby[0] like "playing%";
复制代码
#查询2-4
select staff_name,person_info from itcast.managed_table where person_info.marry="Y" and person_info.children="Y";
复制代码
#查询2-5
select staff_name,salary from itcast.managed_table where salary>=7000 and salary <= 9000;
复制代码
#查询3-1
select dept_id,avg(salary) from itcast.managed_table group by dept_id;
复制代码
#查询3-2
select dept_id,count(staff_id) from itcast.managed_table where person_info.marry="Y" group by dept_id;
复制代码
#查询3-3
select dept_id from itcast.managed_table group by dept_id having avg(salary) < 6000;
复制代码
#查询4-1
select staff_name,salary from itcast.managed_table order by salary desc limit 5;
复制代码
#查询4-2
select dept_id,staff_name,staff_age from itcast.managed_table distribute by dept_id sort by staff_age asc;
复制代码
创建表staff table
create table if not exists
itcast.staff_table(
staff_id INT,
staff_name STRING,
staff_gender string,
city string
)
row format delimited
fields terminated by ','
lines terminated by '\n';
复制代码
<strong>向表中插入数据</strong>
复制代码
INSERT INTO TABLE itcast.staff_table
VALUES(16,'staff16','man','Changsha'),
(17,'staff17','man','Changsha'),
(18,'staff18','woman','Changsha'),
(19,'staff19','man','Beijing'),
(20,'staff20','woman','Nanjing');
复制代码
查询插入
insert into table itcast.partitioned_table partition (city)
select staff_id,staff_name,staff_gender,city from itcast.staff_table;
复制代码
#创建表students_table
create table if not exists
itcast.students_table(
class string,
student_name string
)
row format delimited
fields terminated by ','
lines terminated by '\n';
复制代码
#向表students_table插入数据
INSERT INTO TABLE itcast.students_table
VALUES('301','student1'),
('302','student2'),
('305','student3'),
('303','student4'),
('302','student5'),
('303','student6'),
('301','student7'),
('303','student8'),
('302','student9'),
('301','student10');
复制代码
#创建表teacher_table
create table if not exists
itcast.teacher_table(
class string,
teacher_name string
)
row format delimited
fields terminated by ','
lines terminated by '\n';
复制代码
#向表teacher_table插入数据
INSERT INTO TABLE itcast.teacher_table
VALUES('301','teacher01'),
('302','teacher02'),
('303','teacher03'),
('304','teacher04');
复制代码
#关联查询
#内连接
SELECT t1.class,t2.class,t1.student_name,t2.teacher_name
FROM itcast.students_table t1
INNER JOIN
itcast.teacher_table t2
ON t1.class = t2.class;
复制代码
#左外连接
SELECT t1.class,t2.class,t1.student_name,t2.teacher_name
FROM itcast.students_table t1
LEFT JOIN
itcast.teacher_table t2
ON t1.class = t2.class;
复制代码
#右外连接
SELECT t1.class,t2.class,t1.student_name,t2.teacher_name
FROM itcast.students_table t1
RIGHT JOIN
itcast.teacher_table t2
ON t1.class = t2.class;
复制代码
#全外连接‘
SELECT t1.class,t2.class,t1.student_name,t2.teacher_name
FROM itcast.students_table t1
FULL JOIN
itcast.teacher_table t2
ON t1.class = t2.class;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4