建表
create table stu(id int,name string) //指定表名、字段
row format //row format 代表行格式化
delimited fields terminated by '\t'; //demlimited fields分隔字段 以 /t分隔
HDFS存元数据地址
/home/softwares/hadoop-2.6.1/dfs/data/current/BP-1499552349-192.168.31.160-1574884211184/current/finalized/subdir0/subdir0
导入数据
导入本地数据:load data local inpath '/path/' into table XX; = hadoop fs -put filepath /hadooppath/XX
HDFS上的数据交互:load data inpath 'hadooppath' into table XX; 修改namendoe元数据信息
分区表(常用)
分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。
Hive 中的分区就是分目录,把一个大的数据集根据业务需要(时间)分割成小的数据集。
在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
谓词下推:先走个数据过滤(WHERE)
语法
create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t'
Snipaste_2020-06-08_10-16-07.png
分区 将month作为一个单独的列
加载数据到分区表
load data local inpath '/home/data/dept.txt' into table dept_partition partition (month='2019-06');
Snipaste_2020-06-08_10-20-40.png
hdfs直接上传
hadoop fs -put /home/data/dept.txt /user/hive/warehouse/dept_partition/month=2019-08
增加分区:分区与分区之间是空格
alter table XX add partition(month='2019-08');
alter table dept_partition add partition(month='2019-08') partition(month='2018-06'); //多个也ok
Snipaste_2020-06-08_11-22-31.png删除分区:分区与分区之间是“,”
alter table XX drop partition(month='2019-08');
alter table dept_partition drop partition(month='2019-08'), partition(month='2018-06'); //多个也ok
查看分区表有多少分区
>show partition dept_partition;
>desc formatted 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';
load data local inpath '/home/data/dept.txt' into table dept_partition2 partition (month='2019-07',day='01')
Snipaste_2020-06-08_11-37-22.png
查询,过滤数据使用
select * from dept_partition2 where month='2019-07' and day='01';
把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式(重点)
1.上传数据后修复
hadoop fs -mkdir -p /user/hive/warehouse/dept_partition/month=2019-11
hadoop fs -put ./dept.txt /user/hive/warehouse/dept_partition/month=2019-11
>msck repair table dept_partition;
修复后可查询.png
2.上传数据后添加分区(常用)
hadoop fs -mkdir -p /user/hive/warehouse/dept_partition/month=2019-11
hadoop fs -put ./dept.txt /user/hive/warehouse/dept_partition/month=2019-11
alter table dept_partition add partition(month='2019-11')
3.load
load data local inpath '/home/data/dept.txt' into table dept_partition partition(month='2019-11')
增加/修改/替换列信息[add/change/replace]
alter table XX add columns(name string)
alter table XX change column name sex string //修改name列名,注意加上类型
replace会替换表中所有列,需写全字段
alter table XX replace columns(name string, sex string)
删表
drop table dept_partition;
复制表结构
create table XX like xx;
数据导入、导出
load
hive> load data [local] inpath '/opt/module/datas/student.txt' [overwrite] | into table student [partition (partcol1=val1,…)];
load data:表示加载数据
local:表示从本地加载数据到 hive 表;否则从HDFS 加载数据到 hive 表
inpath:表示加载数据的路径
overwrite:表示覆盖表中已有数据,否则表示追加
into table:表示加载到哪张表
student:表示具体的表
partition:表示上传到指定分区
insert
>insert into table XX
>select ___ from XX;
AS Select 创建表并且加载数据
create table student3
as select id, name from student;
创建表时通过 Location 指定加载数据路径
location.png导出
insert:将表中数据导出到本地或者hdfs
local为本地路径,不加local为hdfs
insert overwrite local directory 'path'
row format delimited fields terminated by '\t'
select * from XX;
hadoop命令导出到本地
hadoop fs -get hdfspath loaclpath
export 与 import
export table XX to 'hdfspath';
import table XX from 'hdfspath'
清除表中数据truncate
Truncate 只能删除管理表,不能删除外部表中数据
truncate table XX;
网友评论