1 hive ddl语句
2 创建表
2.1 创建内部表(托管表,管理表):
表被Hive管控 数据存放在数据仓库中 /user/hive/warehouse
--语法:
create table 表名( 字段名1 数据类型,字段名 2 数据类型.... )
row format delimited
fields terminated by '\001' --指定字段分隔符
collection items terminated by '\002' -- 指定集合的分隔符
map keys terminated by '\003' --指定map的分隔符
lines terminated by '\n' --指定行的分隔符
create table students(id string,name string,java float,c float,mysql float,hadoop float,sex string)
row format delimited
fields terminated by ','
#将数据添加到students表中
load data local inpath '/home/zx/data/students2.csv' into table students;
运行结果如下:
d数据表是存放在数据仓库中
2.2创建外部表:
external 数据存放在HIVE数据仓库之外
运用场景: 1.可以先创建表,后面再生成数据,生成的数据可以随意的换
2.可以多个应用共享数据
语法:
create external table 表名( 字段名1 数据类型,字段名 2 数据类型.... )
row format delimited
fields terminated by '\001' --指定字段分隔符
collection items terminated by '\002' -- 指字集合的分隔符
map keys terminated by '\003' --指定map的分隔符
lines terminated by '\n' --指定行的分隔符
location '外部表存放的HDFS路径'
例子:
create external table students2(id string,name string,java float,c float,mysql float,hadoop float,sex string)
row format delimited
fields terminated by ','
location '/user/zx/mystudents'
load data local inpath '/home/zx/data/students2.csv' into table students;
运行结果如下:
内部表与外部表区别:
1.内部表: 数据存放在数据库位置,外部表数据存放在HDFS指定的位置上
2.drop外部表时,数据文件不会删除,drop内部表时数据文件也一并删除
3.外部表要指定外部数据文件存放目录
3 创建分区
表中的数据按一定的分区规则来存放 是以目录方式来分区(目录名为分区数据)
注:1.以 "partition=分区值"作为目录
2.分区字段不在与表的其它字段一起定义,但可以把它当成普通字段来操作
HIVE分区作用:加快数据分片,提高查询的效率
--语法:
create table 分区表名( 字段名1 数据类型,字段名 2 数据类型.... )
partitioned by ( 分区属性1 数据类型1, .... )
row format delimited
fields terminated by '\001' --指定字段分隔符
collection items terminated by '\002' -- 指字集合的分隔符
map keys terminated by '\003' --指定map的分隔符
lines terminated by '\n' --指定行的分隔符
location '外部表存放的HDFS路径'
create table students_p(id string,name string,java float,c float,mysql float,hadoop float )
partitioned by(sex string)
row format delimited
fields terminated by ','
INSERT INTO students_p PARTITION (sex = '男') SELECT
id,
NAME,
java,
c,
mysql,
hadoop
FROM
students
WHERE
sex = '男';
运行结果如下:
3.1 外部表分区
-- 分区外部表
CREATE EXTERNAL TABLE
IF NOT EXISTS part_test_2 (
c1 string,
c2 string,
c3 string,
c4 string
) PARTITIONED BY (
month_id string,#分区
day_id string
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/zx/part';part
load data local inpath '/home/sheng/data/part1.txt' into table partition (month_id='12',day_id='30');
3.3 自动插入分区:
-- 原始数据表
create table test( c1 string,c2 string,c3 string,c4 string,month_id string,day_id string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
-- 打开动态分区开关
set hive.exec.dynamic.partition.mode=off
-- 动态自动插入分区 使用 insert overwrite
insert overwrite table part_test_2 partition( month_id, day_id ) select c1,c2,c3,c4,month_id,day_id from test;
-- overwrite只覆盖查询出来的分区,没有查询出来的原分区表的分区数据不进行覆盖
-- 动态自动插入分区 使用 insert into
insert into table part_test_2 partition( month_id, day_id )
select c1,c2,c3,c4,month_id,day_id from test;
-- 注:分区字段必须发放最后面
来源:CSDN
作者:含笑戏红尘
链接:https://blog.csdn.net/weixin_43599377/article/details/103773529