Hive创建表

狂风中的少年 提交于 2020-01-25 07:38:31

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;
-- 注:分区字段必须发放最后面

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!