HIVE入门知识二、建表,查询,运用等

本文深入探讨Hive SQL的高级特性,包括CTAS、WITH子句、临时表、数据装载、分区表(静态与动态)、视图操作等。解析各种语句的应用场景及操作方法,助力提升Hive查询效率和数据管理能力。

Hive建表语句

创建内部表:
– 创建一个内部表
create table if not exists student(
id int, name string
)
row format delimited fields terminated by ‘\t’
stored as textfile
location ‘/home/hadoop/hive/warehouse/student’;

在这里插入图片描述
– 查询表的类型
desc formatted student;

Hive建表语句解析:
在这里插入图片描述
Hive建表高阶语句 - CTAS and WITH
CTAS – as select方式建表
employee为已建立的表 ,ctas_employee要建的新表
CREATE TABLE ctas_employee as SELECT * FROM employee;
创建临时表
临时表是应用程序自动管理在复杂查询期间生成的中间数据的方法
表只对当前session有效,session退出后自动删除
表空间位于/tmp/hive-<user_name>(安全考虑)
如果创建的临时表表名已存在,实际用的是临时表
CREATE TEMPORARY TABLE tmp_table_name1 (c1 string);
装载数据:LOAD
LOAD用于在Hive中移动数据
LOAD DATA LOCAL INPATH ‘/home/dayongd/Downloads/employee.txt’
OVERWRITE INTO TABLE employee;
– 加LOCAL关键字,表示原始文件位于Linux本地,执行后为拷贝数据
LOAD DATA LOCAL INPATH ‘/home/dayongd/Downloads/employee.txt’
OVERWRITE INTO TABLE employee_partitioned PARTITION (year=2014, month=12);
– 没有LOCAL关键字,表示文件位于HDFS文件系统中,执行后为直接移动数据
LOAD DATA INPATH ‘/tmp/employee.txt’
OVERWRITE INTO TABLE employee_partitioned PARTITION (year=2017, month=12);

LOCAL:指定文件位于本地文件系统,执行后为拷贝数据
OVERWRITE:表示覆盖表中现有数据

Hive分区(Partition)
分区主要用于提高性能
分区列的值将表划分为一个个的文件夹
查询时语法使用"分区"列和常规列类似
查询时Hive会只从指定分区查询数据,提高查询效率
分为静态分区和动态分区

Hive分区操作 - 静态分区

创建分区表
create table dept_partition(
deptno int,
dname string,
loc string )
partitioned by (month string)
row format delimited fields terminated by ‘\t’;

通过PARTITINED BY定义分区

静态分区操作
– 添加分区
alter table dept_partition add partition(month=‘201906’) ;
alter table dept_partition add partition(month=‘201905’) partition(month=‘201904’);
– 删除分区
alter table dept_partition drop partition (month=‘201904’);
alter table dept_partition drop partition (month=‘201905’), partition (month=‘201906’);

ALTER TABLE的方式添加静态分区
ADD添加分区, DROP删除分区
分区表操作
– 查看分区表有多少分区
show partitions dept_partition;
– 加载数据到分区表中
load data local inpath ‘/opt/datas/dept.txt’ into table dept_partition partition(month=‘201909’);
可以创建多级分区
– 创建二级分区表
create table dept_partition2(
deptno int, dname string, loc string)
partitioned by (month string, day string)
row format delimited fields terminated by ‘\t’;
– 加载数据到二级分区表中
load data local inpath ‘/opt/datas/dept.txt’ into table dept_partition2 partition(month=‘201909’, day=‘13’);

Hive分区操作 - 动态分区

使用动态分区需设定属性
et hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
设置分区模式为非严格模式

动态分区建表语句和静态分区相同
动态分区插入数据
insert into dynamic_people
partition(year,month)
select id,name,age,start_date,year(start_date),month(start_date)
from people;
– 查询数据
select * from dynamic_people where year = 2018;

Hive视图操作
视图操作命令
CREATE、SHOW、DROP、ALTER

– 创建视图,支持 CTE, ORDER BY, LIMIT, JOIN,等
CREATE VIEW view_name AS SELECT statement;
– 查找视图 (SHOW VIEWS 在 hive v2.2.0之后)
SHOW TABLES;
– 查看视图定义
SHOW CREATE TABLE view_name;
– 删除视图
DROP view_name;
–更改视图属性
ALTER VIEW view_name SET TBLPROPERTIES (‘comment’ = ‘This is a view’);
– 更改视图定义,
ALTER VIEW view_name AS SELECT statement;

Hive执行简单查询操作的方法如下: ### 操作 Hive有多种方式,这里介绍直接查询两种: - **直接**:文档未详细提及直接的具体语句,但一般格式如下: ```sql CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name ( column1 data_type, column2 data_type, ... ) [ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符'] [STORED AS file_format] [LOCATION '存储路径']; ``` 其中,`EXTERNAL` 关键字用于创建外部;`IF NOT EXISTS` 示如果不存在则创建;`ROW FORMAT DELIMITED FIELDS TERMINATED BY` 用于指定字段分隔符;`STORED AS` 用于指定存储文件格式;`LOCATION` 用于指定数据的存储路径。 - **查询**:使用查询结果创建,语法为: ```sql CREATE [EXTERNAL] TABLE [IF NOT EXISTS] tab_name ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' STORED AS file_format LOCATION '存储路径' AS SELECT name_1, name_2, name3 FROM tab_name2; ``` 例如,从 `tab_name2` 中选取 `name_1`、`name_2` 和 `name3` 列的数据来创建一个新 `tab_name` [^3]。 ### 查询操作 - **基础查询**:可以使用 `SELECT` 语句从查询数据,例如查看 `weblog_20150923` 的所有数据: ```sql SELECT * FROM weblog_20150923; ``` 还可以查看的结构: ```sql DESC weblog_20150923; ``` - **子查询**:Hive支持的子查询放在 `FROM` 字句中,子查询需要有一个别名,且子查询中的 `SELECT` 列名必须唯一,这些列名在外层的 `SELECT` 查询中可像中的列一样使用。例如: ```sql SELECT outer_col FROM ( SELECT inner_col1, inner_col2 FROM some_table ) subquery_alias WHERE subquery_alias.inner_col1 = 'value'; ``` 子查询可以是含有 `UNION` 的查询达式,Hive支持任意层次的子查询 [^1]。 - **连接查询**:连接查询是将两个在共同数据项上相互匹配的那些行合后进行查询的操作。HQL的连接查询分为内连接(`Inner Join`)、左外连接(`left join`)、右外连接(`right join`)、全连接和半连接(本篇未涉及)。例如内连接查询: ```sql SELECT * FROM table1 INNER JOIN table2 ON table1.common_column = table2.common_column; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值